Miklix

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.


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 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

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

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:

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

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

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

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));
}
Condividi su BlueskyCondividi su FacebookCondividi su LinkedInCondividi su TumblrCondividi su XCondividi su LinkedInAggiungi su Pinterest

Mikkel Bang Christensen

Sull'autore

Mikkel Bang 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.