Miklix

Kā atkārtot Enum elementus no X++ koda programmā Dynamics AX 2012

Publicēts: 2025. gada 15. februāris 23:10:43 UTC

Šajā rakstā ir paskaidrots, kā uzskaitīt un cilpot pāri pamata uzskaites elementiem programmā Dynamics AX 2012, tostarp X++ koda piemērs.


Šī lapa tika mašīntulkota no angļu valodas, lai padarītu to pieejamu pēc iespējas vairāk cilvēkiem. Diemžēl mašīntulkošana vēl nav pilnīga tehnoloģija, tāpēc tajā var rasties kļūdas. Ja vēlaties, oriģinālo versiju angļu valodā varat apskatīt šeit:

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

Šajā ziņā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tas var būt un var nebūt derīgs citām versijām.

Es nesen veidoju veidlapu, kurai bija jāparāda vērtība katram enum elementam. Tā vietā, lai manuāli izveidotu laukus (un pēc tam būtu jāuztur veidlapa, ja enum kādreiz tiek mainīts), es nolēmu to ieviest dinamiski, lai tas automātiski pievienotu laukus noformējumam izpildes laikā.

Tomēr es drīz atklāju, ka faktiski atkārtojot vērtības enum, lai gan tas ir pietiekami viegli, ja jūs zināt, kā to izdarīt, ir nedaudz mulsinoši.

Acīmredzot jāsāk ar DictEnum klasi. Kā redzēsit, šai klasei ir vairākas metodes, lai iegūtu informāciju, piemēram, nosaukumu un etiķeti gan no indeksa, gan vērtības.

Atšķirība starp indeksu un vērtību ir tāda, ka indekss ir elementa numurs enum, ja enum elementi tika numurēti secīgi, sākot no nulles, bet vērtība ir elementa faktiskā "vērtības" īpašība. Tā kā lielākajai daļai enumu vērtību ir secīgi numurētas no 0, elementa indekss un vērtība bieži vien būs vienādi, bet noteikti ne vienmēr .

Bet kā jūs zināt, kuras vērtības ir enum? Šeit tas kļūst mulsinoši. DictEnum klasei ir metode, ko sauc par value(). Jūs varētu sagaidīt, ka šī metode atgriezīs enum vērtību sarakstu, taču tas acīmredzami būtu pārāk vienkārši, tāpēc tā vietā atgriež enum ietverto vērtību skaitu . Tomēr vērtību skaitam nav nekā kopīga ar faktiskajām vērtībām, tāpēc jums ir jāizmanto šis skaitlis kā pamats uz indeksu balstīto metožu izsaukšanai, nevis uz vērtībām balstīto metožu izsaukšanai.

Ja viņi šo metodi būtu nosaukuši par indeksiem (), tas būtu mazāk mulsinoši ;-)

Ņemiet vērā arī to, ka enum vērtības (un acīmredzot šie "indeksi") sākas ar 0, atšķirībā no masīvu un konteineru indeksiem X++, kas sākas ar 1, tāpēc, lai cilpu pāri enum elementiem, varat rīkoties šādi:

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

Tādējādi informācijas žurnālā tiks parādīts katra saraksta elementa simbols un etiķete.

Kopīgojiet pakalpojumā BlueskyKopīgot FacebookKopīgojiet vietnē LinkedInKopīgojiet vietnē TumblrKopīgot vietnē XKopīgojiet vietnē LinkedInPiespraust vietnē Pinterest

Mikkel Bang Christensen

Par autoru

Mikkel Bang Christensen
Mikels ir miklix.com radītājs un īpašnieks. Viņam ir vairāk nekā 20 gadu pieredze kā profesionālam programmētājam/programmatūras izstrādātājam, un pašlaik viņš strādā pilna laika darbu lielā Eiropas IT korporācijā. Kad viņš neraksta blogus, viņš pavada brīvo laiku, pievēršoties dažādām interesēm, hobijiem un aktivitātēm, kas zināmā mērā var atspoguļoties šajā tīmekļa vietnē aplūkoto tēmu daudzveidībā.