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++.
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:
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:
- Klicanje dokumentnih storitev AIF neposredno iz X++ v Dynamics AX 2012
- Oblikovanje nizov z makri in strFmt v Dynamics AX 2012
- Identifikacija razreda dokumenta in poizvedbe za storitev AIF v Dynamics AX 2012
