Miklix

Форматирање низа помоћу макроа и стрФмт-а у Динамицс АКС 2012

Објављено: 16. фебруар 2025. 00:52:31 UTC

Овај чланак описује неко необично понашање у Динамицс АКС 2012 када се користи макро као стринг формата у стрФмт-у, као и примери како да то заобиђете.


Ова страница је машински преведена са енглеског како би била доступна што већем броју људи. Нажалост, машинско превођење још увек није усавршена технологија, тако да може доћи до грешака. Ако желите, можете погледати оригиналну енглеску верзију овде:

String Formatting with Macro and strFmt in Dynamics AX 2012

Информације у овом посту су засноване на Динамицс АКС 2012 Р3. Може, али и не мора бити важеће за друге верзије.

Недавно сам наишао на проблем са функцијом стрФмт који ме је мало збунио. Оно што је највише збунило било је то што се неким чудним случајем никада раније нисам сусрео са тим током мојих много година као Акапта/Динамицс АКС програмер.

Проблем је био у томе што сам покушао да користим макро као стринг формата за функцију стрФмт и једноставно није успело. Потпуно је игнорисао % параметре и вратио само остатак стринга.

Након што сам га погледао, открио сам да се сами макрои могу користити за форматирање стрингова, што такође нисам знао. Па добро, увек је добро научити нешто ново, али сам ипак био веома изненађен што нисам случајно наишао на ово раније.

У суштини, овако нешто

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

неће функционисати јер се знаци % у макроу заправо користе за карактеристике форматирања низова самог макроа. У овом случају, стрФмт функција ће видети стринг за форматирање као "--" и стога ће само то вратити.

Нешто овако:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

ће радити, али вероватно не онако како желите. Уместо излаза вредности три променљиве, уместо тога ће се исписати имена променљивих, у овом случају "салесИд-итемИд-линеНум". (Примијетите да нисам ставио размаке након зареза приликом просљеђивања параметара макроу, као што обично радим у позивима метода. То је зато што ће макро заправо користити и такве размаке, па би излаз био „салесИд- итемИд-линеНум“ ако јесам).

Да бисте заправо користили макро као стринг за форматирање са стрФмт, морате да избегнете знаке процента помоћу обрнутих косих црта, као што је ово:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Ово ће заправо функционисати као да сте директно доставили стринг формата.

Овај мали посао илуструје примере:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}
Поделите на БлуескиПоделите на ФејсбукуДелите на ЛинкедИнуПодели на Тумблр-уПодели на КсДелите на ЛинкедИнуПин на Пинтерест-у

Миккел Банг Кристенсен

О аутору

Миккел Банг Кристенсен
Миккел је креатор и власник миклик.цом. Има преко 20 година искуства као професионални компјутерски програмер/програмер софтвера и тренутно је запослен са пуним радним временом у великој европској ИТ корпорацији. Када не пише блог, своје слободно време проводи на широком спектру интересовања, хобија и активности, што се у извесној мери може одразити на разноврсност тема обрађених на овој веб страници.