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.
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:
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:
- Virknes formatēšana, izmantojot makro un strFmt programmā Dynamics AX 2012
- Dzēsiet juridisko personu (uzņēmuma kontus) programmā Dynamics AX 2012
- Dynamics AX 2012 konvertējiet reālu par virkni ar visām decimāldaļām
