Форматиране на низове с 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 и той просто не работеше. Напълно игнорираше параметрите % и връщаше само останалата част от низа.
След като го проучих, открих, че самите макроси могат да се използват за форматиране на низове, което също беше нещо, което не знаех. Е, винаги е добре да научиш нещо ново, но все пак бях много изненадан, че не бях попаднал на това преди.
По принцип, нещо подобно
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Няма да работи, защото знаците % в макроса всъщност се използват за собствените функции за форматиране на низове на макроса. В този случай функцията strFmt ще види форматиращия низ като "--" и следователно ще върне само това.
Нещо подобно:
info(#FormatMacro(salesId,itemId,lineNum));
Ще работи, но вероятно не по начина, по който искате. Вместо да извежда стойностите на трите променливи, ще извежда имената на променливите, в този случай "salesId-itemId-lineNum". (Обърнете внимание, че не поставих интервали след запетаите, когато предавах параметри на макроса, както обикновено правя при извиквания на методи. Това е така, защото макросът всъщност ще използва и такива интервали, така че изходът ще бъде "salesId-itemId-lineNum", ако го бях направил).
За да използвате макрос като форматиращ низ със strFmt, трябва да екранирате знаците за проценти с обратни наклонени черти, ето така:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Това всъщност ще работи така, сякаш сте предоставили директно форматиращия низ.
Тази малка задача илюстрира примерите:
{
#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));
}
Допълнително четене
Ако ви е харесала тази публикация, може да ви харесат и тези предложения:
- Идентифициране на клас документ и заявка за AIF услуга в Dynamics AX 2012
- Бърз преглед на Dynamics AX 2012 SysOperation Framework
- Извикване на AIF Document Services директно от X++ в Dynamics AX 2012
