Miklix

Форматиране на низове с Macro и strFmt в Dynamics AX 2012

Публикувано: 16 февруари 2025 г. в 0:47:52 ч. UTC
Последна актуализация: 12 януари 2026 г. в 8:44:20 ч. 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));
}

Допълнително четене

Ако ви е харесала тази публикация, може да ви харесат и тези предложения:


Споделете в BlueskyСподелете във FacebookСподелете в LinkedInСподелете в TumblrСподелете в XСподелете в LinkedInЗакачи в Пинтерест

Микел Кристенсен

За автора

Микел Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.