Miklix

Kako iterirati elemente enuma iz X++ koda u Dynamics AX 2012

Objavljeno: 15. februar 2025. u 23:15:36 UTC

Ovaj članak objašnjava kako nabrojati i petljati preko elemenata osnovnog enuma u Dynamics AX 2012, uključujući primjer X++ koda.


Ova stranica je mašinski prevedena sa engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, mašinsko prevođenje još nije usavršena tehnologija, pa može doći do grešaka. Ako želite, možete pogledati originalnu englesku verziju ovdje:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

Informacije u ovom postu su zasnovane na Dynamics AX 2012 R3. Može ili ne mora vrijediti za druge verzije.

Nedavno sam kreirao obrazac koji je trebao prikazati vrijednost za svaki element u enumu. Umjesto ručnog kreiranja polja (i onda potrebe za održavanjem obrasca ako je enum ikada modificiran), odlučio sam da ga implementiram dinamički tako da bi automatski dodao polja u dizajn u vrijeme izvođenja.

Međutim, ubrzo sam otkrio da je zapravo ponavljanje vrijednosti u enumu, iako dovoljno lako kada znate kako, pomalo zbunjujuće.

Očigledno treba da počneš sa DictEnum klasom. Kao što ćete vidjeti, ova klasa ima nekoliko metoda za dobijanje informacija kao što su ime i oznaka iz indeksa i vrijednosti.

Razlika između indeksa i vrijednosti je u tome što je indeks broj elementa u enumu, ako su elementi enuma numerirani sekvencijalno počevši od nule, dok je vrijednost stvarna "vrijednost" elementa osobina. Kako većina enuma ima vrijednosti numerirane sekvencijalno od 0, indeks i vrijednost elementa će često biti isti, ali sigurno ne uvijek.

Ali kako znati koje vrijednosti ima enum? Ovdje postaje zbunjujuće. Klasa DictEnum ima metodu koja se zove values(). Možete očekivati da će ova metoda vratiti listu vrijednosti enuma, ali to bi očito bilo previše lako, pa umjesto toga vraća broj vrijednosti koje enum sadrži. Međutim, broj vrijednosti nema nikakve veze sa stvarnim vrijednostima, tako da morate koristiti ovaj broj kao osnovu za pozivanje metoda zasnovanih na indeksu, a ne onih zasnovanih na vrijednostima.

Da su samo ovu metodu nazvali indexes() umjesto toga, bilo bi manje zbunjujuće ;-)

Također imajte na umu da vrijednosti enuma (i očigledno ovi "indeksi") počinju na 0, za razliku od indeksa niza i kontejnera u X++, koji počinju na 1, tako da da petljate preko elemenata u enumu možete uraditi nešto poput ovoga:

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

Ovo će prikazati simbol i oznaku svakog elementa u enumu u infolog.

Podijelite na BlueskyPodijelite na FacebookuPodijelite na LinkedIn-uPodijelite na Tumblr-uPodijeli na XPodijelite na LinkedIn-uPrikači na Pinterest

Mikkel Bang Christensen

O autoru

Mikkel Bang Christensen
Mikkel je kreator i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer/programer softvera i trenutno je zaposlen sa punim radnim vremenom u velikoj evropskoj IT korporaciji. Kada ne piše blog, svoje slobodno vrijeme provodi na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme koje se obrađuju na ovoj web stranici.