Miklix

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

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

Во принцип, вакво нешто

#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 години искуство како професионален компјутерски програмер/развивач на софтвер и моментално е вработен со полно работно време во голема европска ИТ корпорација. Кога не пишува блог, тој го поминува своето слободно време на широк спектар на интереси, хоби и активности, кои до одреден степен може да се рефлектираат во разновидните теми опфатени на оваа веб-локација.