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.
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
;
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:
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:
;
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:
{
#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:
- Korzystanie z struktury SysExtension w celu znalezienia podklasy, którą należy utworzyć w systemie Dynamics AX 2012
- Błąd „Brak zdefiniowanej klasy metadanych dla obiektu kontraktu danych” w systemie Dynamics AX 2012
- Identyfikowanie klasy dokumentu i zapytania dla usługi AIF w systemie Dynamics AX 2012
