Formattazione stringa con macro e strFmt in Dynamics AX 2012
Pubblicato: 16 febbraio 2025 alle ore 00:48:32 UTC
Ultimo aggiornamento: 12 gennaio 2026 alle ore 08:44:26 UTC
In questo articolo vengono descritti 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 anche per altre versioni.
Di recente ho riscontrato un problema con la funzione strFmt che mi ha lasciato un po' perplesso. La cosa più sconcertante è che, per una strana coincidenza, non mi era mai capitato prima nei miei molti anni di esperienza come sviluppatore Axapta/Dynamics AX.
Il problema era che ho provato a usare una macro come stringa di formato per la funzione strFmt, ma non ha funzionato. Ignorava completamente i parametri % e restituiva solo il resto della stringa.
Dopo aver approfondito la questione, ho scoperto che le macro stesse possono essere utilizzate per formattare le stringhe, cosa che non sapevo. Vabbè, è sempre bello imparare qualcosa di nuovo, ma sono rimasto comunque molto sorpreso di non aver mai incontrato prima questa possibilità.
In pratica, qualcosa del genere
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Non funzionerà perché i simboli % nella macro vengono in realtà utilizzati per le funzionalità 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 come desideri. Invece di restituire i valori delle tre variabili, restituirà 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 ai metodi. Questo perché la macro utilizzerà effettivamente anche questi spazi, quindi l'output sarebbe "salesId-itemId-lineNum" se lo facessi).
Per utilizzare effettivamente una macro come stringa di formattazione con strFmt, è necessario usare barre rovesciate per nascondere i segni di percentuale, in questo modo:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
In realtà 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));
}
Ulteriori letture
Se ti è piaciuto questo post, potrebbero piacerti anche questi suggerimenti:
- Panoramica rapida di Dynamics AX 2012 SysOperation Framework
- Chiamata dei servizi di documentazione AIF direttamente da X++ in Dynamics AX 2012
- Identificazione della classe di documento e query per il servizio AIF in Dynamics AX 2012
