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++.
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:
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:
- Rozdíl mezi data() a buf2Buf() v Dynamics AX 2012
- Identifikace třídy dokumentu a dotazu pro službu AIF v Dynamics AX 2012
- Rychlý přehled Dynamics AX 2012 SysOperation Framework
