Miklix

Formatowanie ciągu za pomocą makra i strFmt w Dynamics AX 2012

Opublikowano: 16 lutego 2025 00:48:48 UTC

W tym artykule opisano pewne nietypowe zachowanie w systemie Dynamics AX 2012 w przypadku użycia makra jako ciągu formatującego w strFmt, a także przykłady obejścia tego problemu.


Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

String Formatting with Macro and strFmt in Dynamics AX 2012

Informacje zawarte w tym poście dotyczą systemu Dynamics AX 2012 R3. Mogą być lub nie być ważne dla innych wersji.

Niedawno natrafiłem na problem z funkcją strFmt, który trochę mnie zdezorientował. Najbardziej zdumiewające było to, że jakimś dziwnym zbiegiem okoliczności nigdy wcześniej się z nim nie spotkałem w ciągu wielu lat pracy jako programista Axapta/Dynamics AX.

Problem polegał na tym, że próbowałem użyć makra jako ciągu formatującego dla funkcji strFmt i po prostu nie działało. Całkowicie ignorowało parametry % i zwracało tylko pozostałą część ciągu.

Po przyjrzeniu się temu odkryłem, że same makra mogą być używane do formatowania ciągów, czego również nie wiedziałem. Cóż, zawsze dobrze jest nauczyć się czegoś nowego, ale i tak byłem bardzo zaskoczony, że wcześniej na to nie trafiłem.

Zasadniczo coś takiego

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

nie zadziała, ponieważ znaki % w makrze są w rzeczywistości używane do własnych funkcji formatowania ciągu makra. W tym przypadku funkcja strFmt zobaczy ciąg formatujący jako „--” i zwróci tylko ten.

Coś takiego:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

zadziała, ale prawdopodobnie nie tak, jak chcesz. Zamiast wyprowadzać wartości trzech zmiennych, wyprowadzi nazwy zmiennych, w tym przypadku „salesId-itemId-lineNum”. (Zauważ, że nie umieściłem spacji po przecinkach podczas przekazywania parametrów do makra, jak zwykle robię w wywołaniach metod. Dzieje się tak, ponieważ makro będzie faktycznie używać takich spacji, więc wyjściem byłoby „salesId-itemId-lineNum”, gdybym to zrobił).

Aby faktycznie użyć makra jako ciągu formatującego ze strFmt, należy poprzedzić znaki procentowe ukośnikami odwrotnymi, w następujący sposób:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

W rzeczywistości będzie to działać tak, jakbyś podał ciąg formatujący bezpośrednio.

Ta mała praca ilustruje przykłady:

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));
}
Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Bang Christensen

O autorze

Mikkel Bang Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.