Miklix

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

Publicēts: 2025. gada 15. februāris 23:10:43 UTC
Pēdējo reizi atjaunināts: 2026. gada 12. janvāris 08:42:00 UTC

Šajā rakstā ir paskaidrots, kā Dynamics AX 2012 uzskaitīt un cikliski apstrādāt pamata uzskaitījuma elementus, 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ā ierakstā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tā var būt vai nebūt derīga citām versijām.

Nesen veidoju formu, kurai bija jāparāda katra elementa vērtība uzskaitījumā. Tā vietā, lai laukus veidotu manuāli (un pēc tam uzturētu formu, ja uzskaitījums kādreiz tiek mainīts), nolēmu to ieviest dinamiski, lai tā automātiski pievienotu laukus dizainam izpildes laikā.

Tomēr drīz vien atklāju, ka faktiski atkārtot vērtības uzskaitījumā ir nedaudz mulsinoša, lai gan tas ir pietiekami vienkārši, kad zināt, kā to izdarīt.

Acīmredzot jāsāk ar DictEnum klasi. Kā redzēsiet, šai klasei ir vairākas metodes informācijas, piemēram, nosaukuma un etiķetes, iegūšanai gan no indeksa, gan vērtības.

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

Bet kā zināt, kādas vērtības ir uzskaitījumam (enum)? Šeit rodas apjukums. DictEnum klasei ir metode ar nosaukumu values(). Varētu gaidīt, ka šī metode atgriezīs uzskaitījuma vērtību sarakstu, taču tas, protams, būtu pārāk vienkārši, tāpēc tā vietā tā atgriež uzskaitījumā esošo vērtību skaitu. Tomēr vērtību skaitam nav nekāda sakara ar faktiskajām vērtībām, tāpēc šis skaitlis ir jāizmanto kā pamats indeksu metožu, nevis vērtību metožu izsaukšanai.

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

Tāpat paturiet prātā, ka uzskaitījuma vērtības (un acīmredzot arī š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 apstrādātu uzskaitījuma elementus ciklā, 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)));
}

Tas izvadīs katra uzskaitījuma elementa simbolu un etiķeti infologā.

Papildu lasāmviela

Ja jums patika šī ziņa, jums varētu patikt arī šie ieteikumi:


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

Mikkel Christensen

Par autoru

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