Miklix

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

Publikované: 15. februára 2025 o 23:10:57 UTC
Posledná aktualizácia: 12. januára 2026 o 8:42:05 UTC

Tento článok vysvetľuje, ako vymenovať a prechádzať prvkami základného výčtu v systéme 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 systéme Dynamics AX 2012 R3. Môžu, ale nemusia byť platné aj pre iné verzie.

Nedávno som vytváral formulár, ktorý potreboval zobraziť hodnotu pre každý prvok vo výčte. Namiesto manuálneho vytvárania polí (a následnej údržby formulára, ak sa výčet niekedy zmení), som sa rozhodol implementovať ho dynamicky, aby automaticky pridával polia do návrhu počas behu.

Čoskoro som však zistil, že samotné iterovanie cez hodnoty vo výčte, hoci je to dosť jednoduché, keď viete ako, je trochu mätúce.

Samozrejme, musíte začať s triedou DictEnum. Ako uvidíte, táto trieda má niekoľko metód na získavanie informácií, ako je názov a označenie, z indexu aj hodnoty.

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

Ale ako zistíte, aké hodnoty má enum? Tu to začína byť mätúce. Trieda DictEnum má metódu s názvom values(). Možno by ste očakávali, že táto metóda vráti zoznam hodnôt enum, ale to by bolo očividne 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 indexoch, nie metód založených na hodnotách.

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

Majte tiež na pamäti, že hodnoty enum (a zrejme aj tieto „indexy“) začínajú na 0, na rozdiel od indexov polí a kontajnerov v X++, ktoré začínajú na 1, takže na prechádzanie prvkov vo enum by ste mohli 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)));
}

Toto vypíše symbol a označenie každého prvku vo výčte do infologu.

Ďalšie čítanie

Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:


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

Mikkel Christensen

O autorovi

Mikkel 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.