Miklix

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

Објављено: 16. фебруар 2025. 00:52:31 UTC
Последње ажурирано: 12. јануар 2026. 08:44:49 UTC

Овај чланак описује нека необична понашања у програму Dynamics AX 2012 при коришћењу макроа као стринг за форматирање у strFmt, као и примере како то заобићи.


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

String Formatting with Macro and strFmt in Dynamics AX 2012

Информације у овом посту су засноване на Dynamics AX 2012 R3. Могу, али и не морају бити важеће за друге верзије.

Недавно сам наишао на проблем са функцијом strFmt који ме је мало збунио. Најзанимљивије је било то што се, неком чудном случајношћу, никада раније нисам сусрео са тим током мојих многих година као Axapta/Dynamics AX програмер.

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

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

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

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

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

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

Нешто попут овога:

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

Ће радити, али вероватно не онако како желите. Уместо да прикаже вредности три променљиве, приказаће имена променљивих, у овом случају „salesId-itemId-lineNum“. (Обратите пажњу да нисам ставио размаке после зареза приликом прослеђивања параметара макроу, као што обично радим у позивима метода. То је зато што ће макро заправо користити и такве размаке, тако да би излаз био „salesId-itemId-lineNum“ ако бих то урадио).

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

#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 година искуства као професионални компјутерски програмер/програмер софтвера и тренутно је запослен са пуним радним временом у великој европској ИТ корпорацији. Када не пише блог, своје слободно време проводи на широком спектру интересовања, хобија и активности, што се у извесној мери може одразити на разноврсност тема обрађених на овој веб страници.