Miklix

Форматирање низи со макро и 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 и едноставно не работеше. Целосно ги игнорираше % параметрите и го врати само остатокот од стрингот.

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

Во основа, нешто како ова

#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Споделете на ФејсбукСподелете на LinkedInСподелете на TumblrСподелете на XСподелете на LinkedInЗакачи на Pinterest

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

За авторот

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