Kako iterirati preko elemenata enuma iz X++ koda u Dynamics AX 2012
Objavljeno: 15. veljače 2025. u 23:15:39 UTC
Zadnje ažuriranje: 12. siječnja 2026. u 08:42:25 UTC
Ovaj članak objašnjava kako nabrojati i petljom preći preko elemenata osnovnog nabrajanja u sustavu Dynamics AX 2012, uključujući primjer X++ koda.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Informacije u ovom postu temelje se na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije.
Nedavno sam stvarao obrazac koji je trebao prikazati vrijednost za svaki element u nabrajanju. Umjesto ručnog stvaranja polja (a zatim potrebe za održavanjem obrasca ako se nabrajanje ikada promijeni), odlučio sam ga dinamički implementirati tako da automatski dodaje polja u dizajn tijekom izvođenja.
Međutim, ubrzo sam otkrio da je iteriranje kroz vrijednosti u nabrajanju, iako dovoljno jednostavno kada znate kako, pomalo zbunjujuće.
Očito morate početi s klasom DictEnum. Kao što ćete vidjeti, ova klasa ima nekoliko metoda za dobivanje informacija kao što su naziv 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 numerirani sekvencijalno počevši od nule, dok je vrijednost stvarno svojstvo elementa "vrijednost". Budući da većina nabrajanja ima vrijednosti numerirane sekvencijalno od 0, indeks i vrijednost elementa često će biti isti, ali sigurno 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 će ova metoda vratiti popis vrijednosti enuma, ali to bi očito bilo prejednostavno, pa umjesto toga vraća broj vrijednosti koje enum sadrži. Međutim, broj vrijednosti nema nikakve veze sa stvarnim vrijednostima, pa taj broj morate koristiti kao osnovu za pozivanje metoda temeljenih na indeksu, a ne onih temeljenih na vrijednosti.
Da su samo ovu metodu nazvali indexes(), bilo bi manje zbunjujuće ;-)
Također imajte na umu da vrijednosti nabrajanja (i očito ovi "indeksi") počinju od 0, za razliku od indeksa nizova i kontejnera u X++, koji počinju od 1, pa za petlju kroz elemente u nabrajanju možete učiniti nešto poput ovoga:
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 nabrojavanju u infolog.
Dodatno čitanje
Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:
- Pretvorite real u niz sa svim decimalama u Dynamics AX 2012
- Korištenje upita u klasi ugovora o podacima SysOperation u sustavu Dynamics AX 2012
- Pogreška "Nije definirana klasa metapodataka za podatkovni ugovorni objekt" u programu Dynamics AX 2012
