Stringopmaak met macro en strFmt in Dynamics AX 2012
Gepubliceerd: 16 februari 2025 om 00:48:46 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:44:29 UTC
Dit artikel beschrijft een aantal eigenaardige gedragingen in Dynamics AX 2012 bij gebruik van een macro als opmaakreeks in de strFmt, en geeft voorbeelden van hoe dit probleem te omzeilen.
String Formatting with Macro and strFmt in Dynamics AX 2012
De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Deze informatie is mogelijk niet geldig voor andere versies.
Ik stuitte onlangs op een probleem met de strFmt-functie dat me een tijdje perplex maakte. Het meest raadselachtige was dat ik het, door een vreemd toeval, nog nooit eerder was tegengekomen in mijn vele jaren als Axapta/Dynamics AX-ontwikkelaar.
Het probleem was dat ik een macro als opmaakstring voor de strFmt-functie probeerde te gebruiken, maar dat werkte gewoon niet. De %-parameters werden volledig genegeerd en alleen de rest van de string werd geretourneerd.
Na wat onderzoek ontdekte ik dat macro's zelf gebruikt kunnen worden om strings te formatteren, iets wat ik ook nog niet wist. Ach ja, het is altijd leuk om iets nieuws te leren, maar ik was toch wel verbaasd dat ik dit niet eerder was tegengekomen.
In principe zoiets als dit
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dit werkt niet, omdat de %-tekens in de macro eigenlijk worden gebruikt voor de eigen tekenreeksopmaakfuncties van de macro. In dit geval zal de strFmt-functie de opmaaktekenreeks interpreteren als "--" en daarom alleen dat retourneren.
Zoiets als dit:
info(#FormatMacro(salesId,itemId,lineNum));
Het zal werken, maar waarschijnlijk niet zoals je wilt. In plaats van de waarden van de drie variabelen weer te geven, geeft het de namen van de variabelen weer, in dit geval "salesId-itemId-lineNum". (Merk op dat ik geen spaties achter de komma's heb geplaatst bij het doorgeven van parameters aan de macro, zoals ik normaal gesproken doe bij methodeaanroepen. Dat komt omdat de macro die spaties ook gebruikt, waardoor de uitvoer "salesId-itemId-lineNum" zou zijn als ik dat wel had gedaan).
Om een macro daadwerkelijk als opmaakstring te gebruiken met strFmt, moet je de procenttekens escapen met backslashes, zoals dit:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dit werkt in feite alsof je de opmaakstring direct had opgegeven.
Dit kleine projectje illustreert de voorbeelden:
{
#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));
}
Verder lezen
Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:
- Hoe u over de elementen van een enum kunt itereren vanuit X++-code in Dynamics AX 2012
- Fout 'Geen metagegevensklasse gedefinieerd voor gegevenscontractobject' in Dynamics AX 2012
- Een query gebruiken in een SysOperation Data Contract-klasse in Dynamics AX 2012
