Formattazione stringa con macro e strFmt in Dynamics AX 2012
Pubblicato: 16 febbraio 2025 alle ore 00:48:32 UTC
Questo articolo descrive alcuni comportamenti particolari in Dynamics AX 2012 quando si utilizza una macro come stringa di formato in strFmt, nonché esempi su come aggirare il problema.
String Formatting with Macro and strFmt in Dynamics AX 2012
Le informazioni contenute in questo post si basano su Dynamics AX 2012 R3. Potrebbero essere valide o meno per altre versioni.
Di recente ho riscontrato un problema con la funzione strFmt che mi ha lasciato perplesso per un po'. La parte più sconcertante è che, per una strana coincidenza, non l'avevo mai riscontrato prima nei miei molti anni da sviluppatore Axapta/Dynamics AX.
Il problema era che ho provato a usare una macro come stringa di formato per la funzione strFmt e non ha funzionato. Ha ignorato completamente i parametri % e ha restituito solo il resto della stringa.
Dopo averci pensato, ho scoperto che le macro stesse possono essere usate per formattare le stringhe, cosa che non sapevo. Oh beh, è sempre bello imparare qualcosa di nuovo, ma sono rimasto comunque molto sorpreso di non essermi mai imbattuto in questa cosa prima.
Fondamentalmente, qualcosa del genere
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
non funzionerà perché i segni % nella macro sono in realtà usati per le caratteristiche di formattazione delle stringhe della macro stessa. In questo caso, la funzione strFmt vedrà la stringa di formattazione come "--" e quindi restituirà solo quella.
Qualcosa del genere:
info(#FormatMacro(salesId,itemId,lineNum));
funzionerà, ma probabilmente non nel modo in cui lo desideri. Invece di emettere i valori delle tre variabili, emetterà invece i nomi delle variabili, in questo caso "salesId-itemId-lineNum". (Nota che non ho inserito spazi dopo le virgole quando ho passato i parametri alla macro, come faccio di solito nelle chiamate di metodo. Questo perché la macro utilizzerà effettivamente anche tali spazi, quindi l'output sarebbe "salesId- itemId- lineNum" se lo facessi).
Per utilizzare effettivamente una macro come stringa di formattazione con strFmt, è necessario eseguire l'escape dei segni di percentuale con barre rovesciate, in questo modo:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Funzionerà come se avessi fornito direttamente la stringa di formato.
Questo piccolo lavoro illustra gli esempi:
{
#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));
}