Miklix

Come scorrere gli elementi di un enum dal codice X++ in Dynamics AX 2012

Pubblicato: 15 febbraio 2025 alle ore 23:10:38 UTC
Ultimo aggiornamento: 12 gennaio 2026 alle ore 08:41:58 UTC

Questo articolo spiega come enumerare e ripetere gli elementi di un enum di base in Dynamics AX 2012, incluso un esempio di codice X++.


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:

How to Iterate Over the Elements of an Enum from X++ Code 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 stavo creando un modulo che doveva visualizzare un valore per ogni elemento di un enum. Invece di creare manualmente i campi (e poi dover gestire il modulo in caso di modifica dell'enum), ho deciso di implementarlo dinamicamente, in modo che aggiungesse automaticamente i campi al progetto in fase di esecuzione.

Tuttavia, ho scoperto presto che l'iterazione sui valori in un enum, sebbene abbastanza semplice una volta capito come fare, può risultare un po' complicata.

Ovviamente, è necessario iniziare con la classe DictEnum. Come vedrai, questa classe dispone di diversi metodi per ottenere informazioni come nome ed etichetta, sia dall'indice che dal valore.

La differenza tra indice e valore è che indice è il numero di un elemento nell'enum, se gli elementi dell'enum sono numerati in sequenza a partire da zero, mentre valore è la proprietà "valore" effettiva dell'elemento. Poiché la maggior parte degli enum ha valori numerati in sequenza a partire da 0, indice e valore di un elemento saranno spesso gli stessi, ma certamente non sempre.

Ma come si fa a sapere quali valori ha un enum? È qui che la situazione si complica. La classe DictEnum ha un metodo chiamato values(). Ci si potrebbe aspettare che questo metodo restituisca un elenco dei valori dell'enum, ma sarebbe ovviamente troppo semplice, quindi restituisce il numero di valori contenuti nell'enum. Tuttavia, il numero di valori non ha nulla a che fare con i valori effettivi, quindi è necessario utilizzare questo numero come base per chiamare i metodi basati sugli indici, non quelli basati sui valori.

Se solo avessero chiamato questo metodo indexes(), sarebbe stato meno confusionario ;-)

Tieni presente anche che i valori enum (e apparentemente questi "indici") iniziano da 0, a differenza degli indici di array e contenitori in X++, che iniziano da 1, quindi per eseguire un ciclo sugli elementi in un enum potresti fare qualcosa del genere:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

In questo modo verranno visualizzati nell'infolog il simbolo e l'etichetta di ciascun elemento nell'enum.

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.