Miklix

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

Objavljeno: 15. februar 2025 ob 11:10:58 pop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:42:06 dop. UTC

V tem članku je pojasnjeno, kako našteti in zankati elemente osnovnega naštevanja v programu 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 programu Dynamics AX 2012 R3. Morda veljajo za druge različice, morda pa tudi ne.

Pred kratkim sem ustvarjal obrazec, ki je moral prikazati vrednost za vsak element v naštevanju. Namesto ročnega ustvarjanja polj (in nato vzdrževanja obrazca, če se naštevanje kdaj spremeni), sem se odločil, da ga implementiram dinamično, tako da bi samodejno dodal polja v zasnovo med izvajanjem.

Vendar sem kmalu ugotovil, da je dejansko iteriranje po vrednostih v naštevanju, čeprav je dovolj enostavno, ko enkrat 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, tako iz indeksa kot iz vrednosti.

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

Kako pa veste, katere vrednosti ima enum? Tu postane zmedeno. 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 število vrednosti nima nič skupnega z dejanskimi vrednostmi, zato morate to število uporabiti kot osnovo za klic metod, ki temeljijo na indeksih, ne pa metod, ki temeljijo na vrednostih.

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

Upoštevajte tudi, da se vrednosti naštevanja (in očitno ti "indeksi") začnejo pri 0, za razliko od indeksov polj in vsebnikov v X++, ki se začnejo pri 1, zato lahko za zanko čez elemente v naštevanju 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 v infolog izpisalo simbol in oznako vsakega elementa v naštevanju.

Nadaljnje branje

Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:


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

Mikkel Christensen

O avtorju

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