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

Ez a cikk elmagyarázza, hogyan lehet felsorolni és áthurkolni az alapsor elemeit a Dynamics AX 2012 rendszerben, beleértve az 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-on alapulnak. Lehet, hogy más verziókra érvényes, de lehet, hogy nem.

Nemrég készítettem egy űrlapot, amelynek meg kellett jelenítenie egy értéket az enum minden eleméhez. A mezők manuális létrehozása helyett (és az űrlap karbantartása, ha az enum valaha is módosul), úgy döntöttem, hogy dinamikusan implementálom, hogy futás közben automatikusan hozzáadja a mezőket a tervhez.

Hamarosan azonban rájöttem, hogy az enumban szereplő értékek feletti iteráció, bár elég egyszerű, ha tudod, hogyan, kissé zavaró.

Nyilvánvalóan a DictEnum osztállyal kell kezdenie. Amint látni fogja, ennek az osztálynak számos módszere van az olyan információk megszerzésére, mint a név és a címke mind az indexből, mind az értékből.

Az index és az érték között az a különbség, hogy az index egy elem száma az enumban, ha az enum elemeit sorban számozták nullától kezdve, míg az érték az elem tényleges "érték" tulajdonsága. Mivel a legtöbb enum értékei 0-tól sorban vannak számozva, az elemek indexe és értéke gyakran megegyezik, de nem mindig .

De honnan tudod, hogy egy enum mely értékei? Itt kezd zavaró lenni. A DictEnum osztálynak van egy value() nevű metódusa. Elképzelhető, 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 alapul venni az index alapú módszerek meghívásához, nem az értékalapúakhoz.

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

Ne feledje azt is, 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-től kezdődnek, tehát az enum elemei között a következőt teheti:

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 adatnaplóba kiírja az enum minden elemének szimbólumát és címkéjét.

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 Bang Christensen

A szerzőről

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