Miklix

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

Opublikowano: 16 lutego 2025 00:48:48 UTC
Ostatnia aktualizacja: 12 stycznia 2026 08:44:29 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ć aktualne dla innych wersji.

Niedawno natknąłem się na problem z funkcją strFmt, który przez chwilę mnie zaskoczył. Najbardziej zastanawiające było to, że jakimś dziwnym zbiegiem okoliczności nigdy wcześniej się z nim nie spotkałem, będąc wieloletnim programistą 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 zapoznaniu się z tematem odkryłem, że same makra mogą być używane do formatowania ciągów znaków, o czym również nie wiedziałem. No 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 obsługi funkcji formatowania ciągu znaków w makrze. W takim przypadku funkcja strFmt potraktuje ciąg formatujący jako „--” i zwróci tylko ten znak.

Coś takiego:

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

Zadziała, ale prawdopodobnie nie tak, jak chcesz. Zamiast wartości trzech zmiennych, zwróci ich nazwy, w tym przypadku „salesId-itemId-lineNum”. (Zauważ, że nie dodałem spacji po przecinkach podczas przekazywania parametrów do makra, jak to zazwyczaj robię w wywołaniach metod. Dzieje się tak, ponieważ makro również będzie używać takich spacji, więc gdybym to zrobił, wynik wyglądałby tak: „salesId-itemId-lineNum”).

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));
}

Dalsza lektura

Jeśli podobał Ci się ten wpis, mogą Cię zainteresować również poniższe sugestie:


Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Christensen

O autorze

Mikkel 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.