Miklix

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.


Questa pagina è stata tradotta automaticamente dall'inglese per renderla accessibile al maggior numero di persone possibile. Purtroppo, la traduzione automatica non è ancora una tecnologia perfezionata, quindi possono verificarsi degli errori. Se preferite, potete consultare la versione originale in inglese qui:

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

#define.FormatMacro('%1-%2-%3')
;

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:

#define.FormatMacro('%1-%2-%3');
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:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

In realtà funzionerà come se avessi fornito direttamente la stringa di formato.

Questo piccolo lavoro illustra gli esempi:

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

Ulteriori letture

Se ti è piaciuto questo post, potrebbero piacerti anche questi suggerimenti:


Condividi su BlueskyCondividi su FacebookCondividi su LinkedInCondividi su TumblrCondividi su XCondividi su LinkedInAggiungi su Pinterest

Mikkel Christensen

Sull'autore

Mikkel Christensen
Mikkel è il creatore e proprietario di miklix.com. Ha oltre 20 anni di esperienza come programmatore di computer/sviluppatore di software ed è attualmente impiegato a tempo pieno in una grande azienda IT europea. Quando non scrive sul blog, dedica il suo tempo libero a una vasta gamma di interessi, hobby e attività, che in qualche modo si riflettono nella varietà di argomenti trattati in questo sito.