Miklix

Kaip kartoti Enum elementus iš X++ kodo „Dynamics AX 2012“

Paskelbta: 2025 m. vasario 15 d. 23:10:43 UTC
Paskutinį kartą atnaujinta: 2026 m. sausio 12 d. 08:42:00 UTC

Šiame straipsnyje paaiškinama, kaip išvardyti ir cikliškai peržiūrėti pagrindinio išvardijimo elementus „Dynamics AX 2012“, įskaitant X++ kodo pavyzdį.


Šis puslapis buvo mašininiu būdu išverstas iš anglų kalbos, kad juo galėtų naudotis kuo daugiau žmonių. Deja, mašininis vertimas dar nėra tobula technologija, todėl gali pasitaikyti klaidų. Jei pageidaujate, originalią versiją anglų kalba galite peržiūrėti čia:

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

Šiame įraše pateikta informacija pagrįsta „Dynamics AX 2012 R3“. Ji gali tikti arba netikti kitoms versijoms.

Neseniai kūriau formą, kurioje reikėjo rodyti kiekvieno išvardijimo elemento reikšmę. Užuot rankiniu būdu kūręs laukus (ir vėliau tvarkydamas formą, jei išvardijimas kada nors modifikuojamas), nusprendžiau ją įdiegti dinamiškai, kad laukai būtų automatiškai įtraukti į dizainą vykdymo metu.

Tačiau netrukus supratau, kad iš tikrųjų iteruoti per reikšmes sąraše, nors ir gana lengva, kai tik žinai, kaip tai padaryti, yra šiek tiek painu.

Akivaizdu, kad reikia pradėti nuo „DictEnum“ klasės. Kaip matysite, ši klasė turi kelis metodus informacijai, pvz., pavadinimui ir žymai, gauti tiek iš indekso, tiek iš reikšmės.

Skirtumas tarp indekso ir reikšmės yra tas, kad indeksas yra elemento numeris sąraše (enum), jei sąrašo elementai būtų sunumeruoti nuosekliai, pradedant nuo nulio, o reikšmė yra tikroji elemento „reikšmės“ savybė. Kadangi daugumos sąrašų (enum) reikšmės sunumeruotos nuosekliai nuo 0, elemento indeksas ir reikšmė dažnai bus vienodi, bet tikrai ne visada.

Bet kaip žinoti, kokias reikšmes turi išvardijimas? Čia prasideda painiava. „DictEnum“ klasė turi metodą, vadinamą reikšmėmis(). Galite tikėtis, kad šis metodas grąžins išvardijimo reikšmių sąrašą, bet tai, žinoma, būtų pernelyg lengva, todėl vietoj to jis grąžina išvardijimo reikšmių skaičių. Tačiau reikšmių skaičius neturi nieko bendra su tikrosiomis reikšmėmis, todėl jums reikia naudoti šį skaičių kaip pagrindą iškviesti indeksu pagrįstus metodus, o ne reikšmėmis pagrįstus.

Jei tik jie būtų šį metodą pavadinę indexes(), būtų buvę mažiau painiavos ;-)

Taip pat nepamirškite, kad enum reikšmės (ir, matyt, šie „indeksai“) prasideda nuo 0, kitaip nei masyvų ir konteinerių indeksai X++, kurie prasideda nuo 1, todėl norėdami peržiūrėti elementus enum reikšmėse, galite atlikti tokius veiksmus:

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

Tai išves kiekvieno išvardijimo elemento simbolį ir žymę į infologą.

Papildoma literatūra

Jei jums patiko šis įrašas, jums taip pat gali patikti šie pasiūlymai:


Pasidalinkite „Bluesky“.Dalintis FacebookBendrinkite „LinkedIn“.Bendrinkite „Tumblr“.Dalintis XBendrinkite „LinkedIn“.Prisegti prie Pinterest

Mikkel Christensen

Apie autorių

Mikkel Christensen
Mikkelis yra miklix.com kūrėjas ir savininkas. Jis turi daugiau nei 20 metų profesionalaus kompiuterių programuotojo ir programinės įrangos kūrėjo patirtį ir šiuo metu visą darbo dieną dirba didelėje Europos IT korporacijoje. Kai jis nerašo tinklaraščio, laisvalaikį skiria įvairiems interesams, pomėgiams ir užsiėmimams, kurie tam tikra prasme gali atsispindėti šioje svetainėje nagrinėjamų temų įvairovėje.