Miklix

Kako ponoviti elemente enuma iz kode X++ v Dynamics AX 2012

Objavljeno: 15. februar 2025 ob 11:10:58 pop. UTC

Ta članek pojasnjuje, kako oštevilčiti in prebrati elemente osnovnega enuma v Dynamics AX 2012, vključno s primerom kode X++.


Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

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

Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice.

Nedavno sem ustvarjal obrazec, ki je moral prikazati vrednost za vsak element v naštevanju. Namesto ročnega ustvarjanja polj (in nato potrebe po vzdrževanju obrazca, če je enum kdaj spremenjen), sem se odločil, da ga implementiram dinamično, tako da bo samodejno dodal polja v načrt med izvajanjem.

Vendar sem kmalu odkril, da je dejansko ponavljanje vrednosti v enumu, čeprav je dovolj enostavno, ko veš, kako, nekoliko zmedeno.

Očitno morate začeti z razredom DictEnum. Kot boste videli, ima ta razred več metod za pridobivanje informacij, kot sta ime in oznaka iz indeksa in vrednosti.

Razlika med indeksom in vrednostjo je v tem, da je indeks številka elementa v enumu, če so bili elementi enuma oštevilčeni zaporedno od nič, medtem ko je vrednost dejanska lastnost "vrednosti" elementa. Ker ima večina enumov vrednosti, oštevilčene z zaporedno številko 0, bosta indeks in vrednost elementa pogosto enaka, zagotovo pa ne vedno .

Toda kako veste, katere vrednosti ima enum? Tu pride do zmede. Razred DictEnum ima metodo, imenovano values(). Morda bi pričakovali, da bo ta metoda vrnila seznam vrednosti enuma, vendar bi bilo to očitno prelahko, zato namesto tega vrne število vrednosti, ki jih enum vsebuje. Vendar pa število vrednosti nima nobene zveze z dejanskimi vrednostmi, zato morate to številko uporabiti kot osnovo za klicanje metod, ki temeljijo na indeksu, ne tistih, ki temeljijo na vrednosti.

Če bi to metodo namesto tega poimenovali indexes(), bi bilo manj zmedeno ;-)

Upoštevajte tudi, da se vrednosti enum (in očitno ti "indeksi") začnejo pri 0, v nasprotju z indeksi matrik in vsebnikov v X++, ki se začnejo pri 1, tako da lahko za zanko po elementih v enum naredite nekaj takega:

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

To bo izpisalo simbol in oznako vsakega elementa v enum v infolog.

Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Bang Christensen

O avtorju

Mikkel Bang Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.