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++.
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:
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:
- Preveďte real na reťazec so všetkými desatinnými miestami v Dynamics AX 2012
- Volanie dokumentových služieb AIF priamo z X++ v Dynamics AX 2012
- Chyba „Pre objekt zmluvy údajov nie je definovaná žiadna trieda metadát“ v Dynamics AX 2012
