Miklix

Kuidas itereerida X++ koodi enumi elemente rakenduses Dynamics AX 2012

Avaldatud: 15. veebruar 2025, kell 23:10:12 UTC

Selles artiklis selgitatakse, kuidas Dynamics AX-i 2012 põhiloendi elemente loetleda ja üle korrata, sealhulgas X++ koodinäidet.


See lehekülg on inglise keelest masintõlgitud, et muuta see võimalikult paljudele inimestele kättesaadavaks. Kahjuks ei ole masintõlge veel täiuslik tehnoloogia, mistõttu võivad esineda vead. Kui soovite, võite vaadata ingliskeelset originaalversiooni siin:

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

Selles postituses olev teave põhineb Dynamics AX-i 2012 R3-l. See võib teiste versioonide jaoks kehtida, kuid ei pruugi kehtida.

Lõin hiljuti vormi, mis pidi kuvama loendi iga elemendi väärtuse. Selle asemel, et väljad käsitsi luua (ja seejärel vormi säilitada, kui loendit kunagi muudetakse), otsustasin selle dünaamiliselt juurutada, et see lisaks väljad käivitamise ajal kujundusse automaatselt.

Siiski avastasin peagi, et tegelikult väärtuste kordamine loendis, kuigi see on piisavalt lihtne, kui tead, kuidas seda teha, on veidi segane.

Ilmselgelt peate alustama DictEnumi klassist. Nagu näete, on sellel klassil mitu meetodit teabe saamiseks, nagu nimi ja silt nii indeksist kui ka väärtusest.

Indeksi ja väärtuse erinevus seisneb selles, et indeks on elemendi number loendis, kui loendi elemendid nummerdati järjestikku, alustades nullist, samas kui väärtus on elemendi tegelik "väärtuse" omadus. Kuna enamiku enumite väärtused on nummerdatud järjestikku alates nullist, on elemendi indeks ja väärtus sageli samad, kuid kindlasti mitte alati .

Aga kuidas sa tead, millised väärtused enumil on? Siin lähebki segaseks. Klassil DictEnum on meetod, mida nimetatakse väärtusteks (). Võib eeldada, et see meetod tagastab loendi väärtuste loendi, kuid see oleks ilmselgelt liiga lihtne, nii et selle asemel tagastab see loendis sisalduvate väärtuste arvu . Väärtuste arvul pole aga tegelike väärtustega midagi pistmist, seega peate seda numbrit kasutama indeksipõhiste, mitte väärtuspõhiste meetodite kutsumisel.

Kui nad oleksid selle meetodi asemel nimetanud indexes(), oleks see vähem segadust tekitanud ;-)

Samuti pidage meeles, et loendi väärtused (ja ilmselt need "indeksid") algavad 0-st, erinevalt X++ massiivi- ja konteinerindeksitest, mis algavad 1-st, nii et loendis olevate elementide ületamiseks võiksite teha midagi sellist:

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

See väljastab teabelogi loendi iga elemendi sümboli ja sildi.

Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isJagage LinkedInisKinnitage Pinterestis

Mikkel Bang Christensen

Autorist

Mikkel Bang Christensen
Mikkel on miklix.com looja ja omanik. Tal on üle 20 aasta kogemust professionaalse programmeerija/tarkvaraarendajana ning praegu töötab ta täiskohaga suures Euroopa IT-ettevõttes. Kui ta ei kirjuta blogi, veedab ta oma vaba aega mitmesuguste huvide, hobide ja tegevustega, mis võib mingil määral kajastuda sellel veebisaidil käsitletavate teemade mitmekesisuses.