Miklix

Hvernig á að endurtaka þætti enum úr X++ kóða í Dynamics AX 2012

Birt: 19. mars 2025 kl. 21:32:52 UTC

Þessi grein útskýrir hvernig á að telja upp og lykkja yfir þætti grunnupptalningar í Dynamics AX 2012, þar á meðal X++ kóðadæmi.


Þessi síða var vélþýdd úr ensku til að gera hana aðgengilega sem flestum. Því miður er vélþýðing ekki enn fullkomin tækni, svo villur geta komið upp. Ef þú vilt geturðu skoðað upprunalegu ensku útgáfuna hér:

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

Upplýsingarnar í þessari færslu eru byggðar á Dynamics AX 2012 R3. Þær geta verið réttan eða ekki fyrir aðrar útgáfur.

Ég var nýlega að búa til form sem þurfti að sýna gildi fyrir hvert einasta frumefni í enum. Í stað þess að búa til reitina handvirkt (og þar með þurfa að viðhalda forminu ef enum er breytt), ákvað ég að útfæra það á dýnamískan hátt þannig að það bætti sjálfkrafa reitunum við hönnunina á keyrslutíma.

En ég uppgötvaði fljótlega að það að fara í gegnum gildin í enum, þó það sé auðvelt þegar maður veit hvernig, er svolítið ruglingslegt.

Þú þarft augljóslega að byrja með DictEnum klasanum. Eins og þú munt sjá, þá hefur þessi klasinn ýmsa aðferðir til að fá upplýsingar eins og nafn og merkingu bæði úr vísitölu og gildi.

Munurinn á vísitölu og gildi er að vísitala er númer frumefnisins í enum, ef frumefnin í enum væru númeruð í röð sem byrjar frá núlli, en gildi er raunveruleg "gildi" eiginleiki frumefnisins. Þar sem flest enum hafa gildi númeruð í röð frá 0, þá mun vísitala og gildi frumefnisins oft vera eins, en vissulega ekki alltaf.

En hvernig veistu hvaða gildi enum hefur? Hér fer það að verða ruglingslegt. DictEnum klasinn hefur aðferð sem heitir values(). Þú myndir kannski búast við að þessi aðferð skili lista yfir gildi enum, en það væri auðvitað of auðvelt, þannig að í staðinn skilar hún fjölda gilda sem enum inniheldur. Hins vegar hefur fjöldi gilda ekkert með raunveruleg gildi að gera, svo þú þarft að nota þennan fjölda sem grunn fyrir að kalla á aðferðir sem byggjast á vísitölum, ekki þeim sem byggjast á gildum.

Ef bara þeir hefðu kallað þessa aðferð indexes() í staðinn, þá hefði það verið minna ruglingslegt ;-)

Reyndu einnig að hafa í huga að gildi enum (og augljóslega þessi "vísitölur") byrja á 0, ólíkt vísitölum í fylkjum og ílátum í X++, sem byrja á 1, svo til að fara í gegnum frumefnin í enum getur þú gert eitthvað eins og þetta:

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

Þetta mun úttaka táknið og merkingu hvers frumefnis í enum í infolog.

Deildu á BlueskyDeildu á FacebookDeildu á LinkedInDeildu á TumblrDeildu á XDeildu á LinkedInFestu á Pinterest

Mikkel Christensen

Um höfundinn

Mikkel Christensen
Mikkel er skapari og eigandi miklix.com. Hann hefur yfir 20 ára reynslu sem faglegur tölvuforritari/hugbúnaðarhönnuður og er nú í fullu starfi hjá stóru evrópsku upplýsingatæknifyrirtæki. Þegar hann er ekki að blogga eyðir hann frítíma sínum í margs konar áhugamál, áhugamál og athafnir, sem geta að einhverju leyti endurspeglast í margs konar efni sem fjallað er um á þessari vefsíðu.