Miklix

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

Vydáno: 15. února 2025 v 23:09:58 UTC
Poslední aktualizace: 12. ledna 2026 v 8:41:52 UTC

Tento článek vysvětluje, jak v aplikaci Dynamics AX 2012 vytvářet výčet a smyčku přes prvky základního výčtu, 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 aplikaci Dynamics AX 2012 R3. Pro jiné verze mohou, ale nemusí být platné.

Nedávno jsem vytvářel formulář, který potřeboval zobrazit hodnotu pro každý prvek ve výčtu. Místo ručního vytváření polí (a následné údržby formuláře v případě změny výčtu) jsem se rozhodl implementovat formulář dynamicky, aby se pole automaticky přidávala do návrhu za běhu.

Brzy jsem ale zjistil, že samotné iterování nad hodnotami ve výčtu, i když je to docela 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 spočívá v tom, že index je číslo prvku ve výčtu, pokud by prvky výčtu byly číslovány postupně od nuly, zatímco hodnota je skutečná vlastnost prvku „hodnota“. 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 poznáte, jaké hodnoty má výčet? A tady to začíná být matoucí. Třída DictEnum má metodu s názvem values(). Dalo by se očekávat, že tato metoda vrátí seznam hodnot výčtu, ale to by samozřejmě bylo příliš snadné, takže místo toho vrátí 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 indexech, nikoli metod založených na hodnotách.

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

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

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

Další čtení

Pokud se vám tento příspěvek líbil, mohly by se vám líbit i tyto návrhy:


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

Mikkel Christensen

O autorovi

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