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