Форматирање низи со макро и strFmt во Dynamics AX 2012
Објавено: 5 март 2025, во 19:54:33 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));
}