Kaip kartoti Enum elementus iš X++ kodo „Dynamics AX 2012“
Paskelbta: 2025 m. vasario 15 d. 23:10:43 UTC
Šiame straipsnyje paaiškinama, kaip išvardinti ir perjungti pagrindinio sąrašo elementus sistemoje Dynamics AX 2012, įskaitant X++ kodo pavyzdį.
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. Jis gali galioti arba negalioja kitoms versijoms.
Neseniai kūriau formą, kurioje reikėjo parodyti kiekvieno sąrašo elemento vertę. Užuot kūręs laukus rankiniu būdu (ir tada, kai reikia prižiūrėti formą, jei sąrašas kada nors keičiamas), nusprendžiau jį įdiegti dinamiškai, kad jis automatiškai pridėtų laukus į dizainą vykdymo metu.
Tačiau netrukus supratau, kad iš tikrųjų kartoti reikšmes sąraše, nors ir pakankamai lengva, kai žinai, kaip tai padaryti, yra šiek tiek painu.
Akivaizdu, kad jums reikia pradėti nuo DictEnum klasės. Kaip matysite, ši klasė turi kelis metodus, kaip gauti informaciją, pvz., pavadinimą ir etiketę iš indekso ir reikšmės.
Skirtumas tarp indekso ir reikšmės yra tas, kad indeksas yra elemento numeris sąraše, jei sąrašo elementai buvo sunumeruoti nuosekliai pradedant nuo nulio, o vertė yra elemento tikroji „vertės“ savybė. Kadangi daugumos sąrašų reikšmės sunumeruotos nuosekliai nuo 0, elemento indeksas ir reikšmė dažnai bus vienodi, bet tikrai ne visada .
Bet kaip žinoti, kokias vertes turi enum? Štai čia pasidaro painu. DictEnum klasėje yra metodas, vadinamas Values (). Galite tikėtis, kad šis metodas pateiks enum reikšmių sąrašą, bet akivaizdu, kad tai būtų per lengva, todėl vietoj to jis grąžins reikšmių, esančių sąraše, skaičių . Tačiau reikšmių skaičius neturi nieko bendra su tikrosiomis reikšmėmis, todėl jūs turite naudoti šį skaičių kaip pagrindą iškviesti indeksu pagrįstus metodus, o ne verte pagrįstus metodus.
Jei tik jie būtų pavadinę šį metodą indeksais (), būtų buvę mažiau paini ;-)
Taip pat atminkite, kad sąrašo reikšmės (ir, matyt, šie "indeksai") prasideda nuo 0, skirtingai nuo masyvo ir konteinerio indeksų X++, kurie prasideda nuo 1, todėl norėdami pereiti prie sąrašo elementų, galite padaryti kažką panašaus:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Taip į informacinį žurnalą bus pateiktas kiekvieno sąrašo elemento simbolis ir etiketė.