Miklix

Jak iterovat prvky výčtu z kódu X++ v Dynamics AX 2012

Vydáno: 15. února 2025 v 23:09:58 UTC

Tento článek vysvětluje, jak vytvořit výčet a smyčku přes prvky základního výčtu v Dynamics AX 2012, včetně příkladu kódu X++.


Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

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

Informace v tomto příspěvku jsou založeny na Dynamics AX 2012 R3. Může a nemusí platit pro jiné verze.

Nedávno jsem vytvářel formulář, který potřeboval zobrazit hodnotu pro každý prvek ve výčtu. Namísto ručního vytváření polí (a následné nutnosti udržovat formulář, pokud se výčet někdy změní), jsem se rozhodl jej implementovat dynamicky, aby automaticky přidával pole do návrhu za běhu.

Brzy jsem však zjistil, že vlastně iterování hodnot ve výčtu, i když je dost snadné, jakmile víte jak, je trochu matoucí.

Je zřejmé, že musíte začít s třídou DictEnum. Jak uvidíte, tato třída má několik metod pro získávání informací, jako je název a popisek z indexu i hodnoty.

Rozdíl mezi indexem a hodnotou je v tom, že index je číslo prvku ve výčtu, pokud byly prvky výčtu číslovány postupně od nuly, zatímco hodnota je skutečná vlastnost „hodnota“ prvku. Protože většina výčtů má hodnoty číslované postupně od 0, index a hodnota prvku budou často stejné, ale rozhodně ne vždy .

Ale jak víte, jaké hodnoty má enum? Tady to začíná být matoucí. Třída DictEnum má metodu nazvanou values(). Můžete očekávat, že tato metoda vrátí seznam hodnot výčtu, ale to by bylo zjevně příliš snadné, takže místo toho vrací počet hodnot, které výčet obsahuje. Počet hodnot však nemá nic společného se skutečnými hodnotami, takže toto číslo musíte použít jako základ pro volání metod založených na indexu, nikoli metod založených na hodnotách.

Kdyby tuto metodu místo toho pojmenovali indexes(), bylo by to méně matoucí ;-)

Mějte také na paměti, že hodnoty výčtu (a zřejmě tyto „indexy“) začínají na 0, na rozdíl od indexů polí a kontejnerů v X++, které začínají na 1, takže pro zacyklení prvků ve výčtu můžete udělat něco takového:

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 se do infologu zobrazí symbol a popisek každého prvku ve výčtu.

Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.