Miklix

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

Objavljeno: 15. februar 2025. u 23:15:36 UTC
Posljednje ažurirano: 12. januar 2026. u 08:42:24 UTC

Ovaj članak objašnjava kako nabrojati i petljom preći preko elemenata osnovnog nabrajanja 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 zasnovane su na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije.

Nedavno sam kreirao formu koja je trebala prikazati vrijednost za svaki element u nabrajanju. Umjesto ručnog kreiranja polja (a zatim potrebe za održavanjem forme ako se nabrajanje ikada promijeni), odlučio sam ga implementirati dinamički tako da bi automatski dodavao polja u dizajn tokom izvršavanja.

Međutim, ubrzo sam otkrio da je iteriranje kroz vrijednosti u nabrajanju, iako dovoljno jednostavno kada znate kako, pomalo zbunjujuće.

Očigledno je da trebate početi s klasom DictEnum. 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 nabrajanju, ako su elementi nabrajanja numerisani sekvencijalno počevši od nule, dok je vrijednost stvarno svojstvo elementa "vrijednost". Budući da većina nabrajanja ima vrijednosti numerisane sekvencijalno od 0, indeks i vrijednost elementa će često biti isti, ali svakako ne uvijek.

Ali kako znati koje vrijednosti enum ima? Tu stvari postaju zbunjujuće. Klasa DictEnum ima metodu pod nazivom values(). Možda biste očekivali da ova metoda vrati listu vrijednosti enuma, ali to bi očigledno bilo previše jednostavno, pa umjesto toga vraća broj vrijednosti koje enum sadrži. Međutim, broj vrijednosti nema nikakve veze sa stvarnim vrijednostima, tako da ovaj broj trebate koristiti kao osnovu za pozivanje metoda zasnovanih na indeksu, a ne onih zasnovanih na vrijednosti.

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

Također imajte na umu da vrijednosti nabrajanja (i očigledno ovi "indeksi") počinju od 0, za razliku od indeksa nizova i kontejnera u X++, koji počinju od 1, tako da biste petljom prešli preko elemenata u nabrajanju mogli biste učiniti 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 ispisati simbol i oznaku svakog elementa u nabrajanju u infolog.

Dodatno čitanje

Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:


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

Mikkel Christensen

O autoru

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