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