Miklix

Az enum elemeinek iterálása az X++ kódból a Dynamics AX 2012-ben

Megjelent: 2025. február 15. 23:10:36 UTC
Utolsó frissítés: 2026. január 12. 8:41:57 UTC

Ez a cikk bemutatja, hogyan lehet felsorolni és végigfuttatni egy alap enumeráció elemeit a Dynamics AX 2012 rendszerben, beleértve egy X++ kódpéldát is.


Ezt az oldalt angolból gépi fordítással készítettük, hogy minél több ember számára elérhető legyen. Sajnos a gépi fordítás még nem tökéletes technológia, ezért előfordulhatnak hibák. Ha szeretné, itt megtekintheti az eredeti angol nyelvű változatot:

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

A bejegyzésben található információk a Dynamics AX 2012 R3 verzión alapulnak. Előfordulhat, hogy más verziókra nem érvényesek.

Nemrég készítettem egy űrlapot, amelynek minden enumerált elemhez meg kellett jelenítenie egy értéket. Ahelyett, hogy manuálisan hoznám létre a mezőket (és utána karban kellene tartanom az űrlapot, ha az enumerált valaha is módosul), úgy döntöttem, hogy dinamikusan implementálom, így futásidőben automatikusan hozzáadja a mezőket a tervhez.

Azonban hamarosan rájöttem, hogy az enum értékein való végigiterálás, bár elég egyszerű, ha egyszer tudjuk, hogyan kell, kissé zavaró.

Nyilvánvalóan a DictEnum osztállyal kell kezdened. Amint látni fogod, ennek az osztálynak számos metódusa van információk, például név és címke kinyerésére mind az indexből, mind az értékből.

Az index és az érték közötti különbség az, hogy az index egy elem száma az enumban, ha az enum elemei nullától kezdődően szekvenciálisan vannak számozva, míg az érték az elem tényleges „érték” tulajdonsága. Mivel a legtöbb enum értékei 0-tól kezdődően szekvenciálisan vannak számozva, egy elem indexe és értéke gyakran megegyezik, de természetesen nem mindig.

De honnan tudhatod, hogy egy enum mely értékeket tartalmazza? Itt kezd bonyolulttá válni a dolog. A DictEnum osztálynak van egy values() nevű metódusa. Azt várhatnád, hogy ez a metódus az enum értékeinek listáját adja vissza, de ez nyilvánvalóan túl egyszerű lenne, ezért ehelyett az enum által tartalmazott értékek számát adja vissza. Az értékek számának azonban semmi köze a tényleges értékekhez, ezért ezt a számot kell használnod az indexalapú metódusok meghívásának alapjául, nem az értékalapúakat.

Ha ezt a metódust indexes()-nek nevezték volna el, kevésbé lett volna zavaró ;-)

Azt is vedd figyelembe, hogy az enum értékek (és látszólag ezek az "indexek") 0-val kezdődnek, ellentétben az X++ tömb- és konténerindexeivel, amelyek 1-gyel kezdődnek, így az enum elemein való végighaladáshoz valami ilyesmit tehetsz:

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)));
}

Ez az enumban található egyes elemek szimbólumát és címkéjét kiírja az infologba.

További olvasmányok

Ha tetszett ez a bejegyzés, akkor ezek a javaslatok is érdekelhetik:


Oszd meg a Bluesky-nOszd meg a FacebookonOszd meg a LinkedIn-enOszd meg a Tumblr-enOszd meg X-enOszd meg a LinkedIn-enPin a Pinteresten

Mikkel Christensen

A szerzőről

Mikkel Christensen
Mikkel a miklix.com létrehozója és tulajdonosa. Több mint 20 éves tapasztalattal rendelkezik, mint hivatásos számítógépes programozó/szoftverfejlesztő, és jelenleg teljes munkaidőben dolgozik egy nagy európai informatikai vállalatnál. Amikor nem blogol, szabadidejét érdeklődési körének, hobbijainak és tevékenységeinek széles skálájával tölti, ami bizonyos mértékig tükröződhet a weboldalon tárgyalt témák sokféleségében.