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

Questo articolo spiega come enumerare e ciclare sugli 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 o meno per altre versioni.

Di recente stavo creando un form che doveva visualizzare un valore per ogni elemento in un enum. Invece di creare manualmente i campi (e poi dover gestire il form se l'enum viene modificato), ho deciso di implementarlo dinamicamente in modo che aggiungesse automaticamente i campi al design in fase di esecuzione.

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

Ovviamente devi iniziare con la classe DictEnum. Come vedrai, questa classe ha 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 stati 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 fai a sapere quali valori ha un enum? Ecco dove inizia la confusione. La classe DictEnum ha un metodo chiamato values(). Potresti aspettarti che questo metodo restituisca un elenco dei valori dell'enum, ma sarebbe ovviamente troppo facile, quindi restituisce invece il numero di valori che l'enum contiene. Tuttavia, il numero di valori non ha nulla a che fare con i valori effettivi, quindi devi usare questo numero come base per chiamare i metodi basati sull'indice, non quelli basati sul valore.

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

Tieni presente 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.

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.