Miklix

Ako iterovať cez prvky Enum z kódu X++ v Dynamics AX 2012

Publikované: 15. februára 2025 o 23:10:57 UTC

Tento článok vysvetľuje, ako enumerovať a opakovať prvky základného enumu v Dynamics AX 2012, vrátane príkladu kódu X++.


Táto stránka bola strojovo preložená z angličtiny, aby bola prístupná čo najväčšiemu počtu ľudí. Žiaľ, strojový preklad ešte nie je dokonalá technológia, takže sa môžu vyskytnúť chyby. Ak chcete, môžete si pozrieť pôvodnú anglickú verziu tu:

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

Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie.

Nedávno som vytváral formulár, ktorý potreboval zobraziť hodnotu pre každý prvok v zozname. Namiesto manuálneho vytvárania polí (a následnej potreby udržiavať formulár, ak sa enum niekedy zmení), som sa rozhodol implementovať ho dynamicky, aby automaticky pridal polia do návrhu za behu.

Čoskoro som však zistil, že v skutočnosti iterovanie hodnôt v enume, hoci je dosť jednoduché, keď viete ako, je trochu mätúce.

Je zrejmé, že musíte začať s triedou DictEnum. Ako uvidíte, táto trieda má niekoľko metód na získanie informácií, ako je názov a štítok z indexu aj hodnoty.

Rozdiel medzi indexom a hodnotou je v tom, že index je číslo prvku vo výčte, ak prvky výčtu boli číslované postupne od nuly, zatiaľ čo hodnota je skutočná "hodnota" vlastnosť prvku. Keďže väčšina enumov má hodnoty číslované postupne od 0, index a hodnota prvku budú často rovnaké, ale určite nie vždy .

Ale ako viete, aké hodnoty má enum? Tu to začína byť mätúce. Trieda DictEnum má metódu nazvanú values(). Môžete očakávať, že táto metóda vráti zoznam hodnôt enum, ale to by bolo zjavne príliš jednoduché, takže namiesto toho vráti počet hodnôt, ktoré enum obsahuje. Počet hodnôt však nemá nič spoločné so skutočnými hodnotami, takže toto číslo musíte použiť ako základ pre volanie metód založených na indexe, nie metód založených na hodnote.

Keby len túto metódu pomenovali indexes(), bolo by to menej mätúce ;-)

Majte tiež na pamäti, že hodnoty enum (a zrejme tieto "indexy") začínajú na 0, na rozdiel od indexov polí a kontajnerov v X++, ktoré začínajú na 1, takže na zacyklenie prvkov vo enume môžete urobiť niečo takéto:

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

Tým sa do infologu vypíše symbol a štítok každého prvku v zozname.

Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvorcom a majiteľom miklix.com. Má viac ako 20 rokov skúseností ako profesionálny počítačový programátor/vývojár softvéru a v súčasnosti pracuje na plný úväzok pre veľkú európsku IT korporáciu. Keď práve nepíše blog, venuje svoj voľný čas širokej škále záujmov, koníčkov a aktivít, čo sa môže do istej miery odrážať v rôznorodosti tém na tejto webovej lokalite.