Miklix

Kako ponoviti elemente enuma iz Ks ++ koda u Dinamics AKS KSNUMKS

Objavio: 19. mart 2025. 21:32:58 UTC

Ovaj članak objašnjava kako nabrojati i petljati preko elemenata osnovnog enuma u Dinamics AKS 2012, uključujući primer Ks ++ koda.


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

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 biti ili ne biti važeće za druge verzije.

Nedavno sam pravio formu koja je trebalo da prikazuje vrednost za svaki element u enumu. Umesto da ručno kreiram polja (i onda moram da održavam formu ako se enum ikada izmeni), odlučio sam da implementiram dinamički, tako da će polja automatski biti dodata u dizajn prilikom izvođenja.

Međutim, ubrzo sam otkrio da je zapravo iteriranje kroz vrednosti u enumu, dok je dovoljno lako kada znaš kako, pomalo zbunjujuće.

Očigledno treba da počneš sa klasom DictEnum. Kao što ćeš videti, ova klasa ima nekoliko metoda za dobijanje informacija kao što su ime i oznaka sa oba indeksa i vrednosti.

Razlika između indeksa i vrednosti je u tome što je indeks broj elementa u enumu, ako bi elementi enum-a bili numerisani sekvencijalno počevši od nule, dok je vrednost stvarna "vrednost" svojstva elementa. Kako većina enum-a ima vrednosti numerisane sekvencijalno od 0, indeks i vrednost elementa će često biti isti, ali sigurno ne uvek.

Ali kako da znaš koje vrednosti ima enum? Tu postaje zbunjujuće. Klasa DictEnum ima metodu pod nazivom values(). Možda bi očekivao da ova metoda vrati listu vrednosti enum-a, ali to bi očigledno bilo previše lako, pa umesto toga vraća broj vrednosti koje enum sadrži. Međutim, broj vrednosti nema nikakve veze sa stvarnim vrednostima, pa moraš koristiti ovaj broj kao osnovu za pozivanje metoda zasnovanih na indeksima, a ne onih zasnovanih na vrednostima.

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

Imaj na umu da vrednosti enum-a (i očigledno ovi "indeksi") počinju od 0, za razliku od indeksa niza i kontejnera u X++, koji počinju od 1, pa da bi iterirao kroz elemente u enumu mogao bi da uradiš nešto poput ovog:

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 na infologu.

Podeli na BlueskiPodeli na FejsbukuPodeli na LinkedInPodeli na TumblrPodeli na XPodeli na LinkedInPin na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikel je tvorac i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer / programer i trenutno je zaposlen sa punim radnim vremenom za veliku evropsku IT korporaciju. Kada ne bloguje, on provodi svoje slobodno vreme na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj meri može odraziti na različite teme koje se obrađuju na ovoj veb stranici.