Форматирање низи со макро и strFmt во Dynamics AX 2012
Објавено: 5 март 2025, во 19:54:33 UTC
Последно ажурирано: 12 јануари 2026, во 08:44:53 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));
}
Дополнително читање
Ако ви се допадна овој пост, можеби ќе ви се допаднат и овие предлози:
- Користење на рамката SysExtension за да откриете која подкласа да се инстанцира во Dynamics AX 2012
- Брз преглед на Dynamics AX 2012 SysOperation Framework
- Повикување на AIF Document Services директно од X++ во Dynamics AX 2012
