Miklix

Cum să repeți asupra elementelor unei enumerari din codul X++ în Dynamics AX 2012

Publicat: 15 februarie 2025 la 23:10:55 UTC

Acest articol explică cum să enumerați și să treceți în buclă peste elementele unei enumerari de bază în Dynamics AX 2012, inclusiv un exemplu de cod X++.


Această pagină a fost tradusă automat din limba engleză pentru a o face accesibilă cât mai multor persoane. Din păcate, traducerea automată nu este încă o tehnologie perfecționată, astfel încât pot apărea erori. Dacă preferați, puteți vizualiza versiunea originală în limba engleză aici:

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

Informațiile din această postare se bazează pe Dynamics AX 2012 R3. Poate fi valabil sau nu pentru alte versiuni.

Am creat recent un formular care trebuia să afișeze o valoare pentru fiecare element dintr-o enumerare. În loc să creez manual câmpurile (și apoi să trebuiască să mențin formularul dacă enumerarea este vreodată modificată), am decis să o implementez dinamic, astfel încât să adauge automat câmpurile la proiect în timpul execuției.

Cu toate acestea, am descoperit curând că repetarea valorilor dintr-o enumerare, deși destul de ușoară odată ce știi cum, este puțin confuză.

Evident, trebuie să începeți cu clasa DictEnum. După cum veți vedea, această clasă are mai multe metode pentru obținerea de informații, cum ar fi numele și eticheta, atât din index, cât și din valoare.

Diferența dintre index și valoare este că index este numărul unui element din enumerare, dacă elementele enumerației au fost numerotate secvenţial începând de la zero, în timp ce valoarea este proprietatea "valoare" reală a elementului. Deoarece majoritatea enumărilor au valori numerotate succesiv de la 0, indexul și valoarea unui element vor fi adesea aceleași, dar cu siguranță nu întotdeauna .

Dar de unde știi ce valori are o enumerare? Aici devine confuz. Clasa DictEnum are o metodă numită values(). S-ar putea să vă așteptați ca această metodă să returneze o listă cu valorile enumerației, dar asta ar fi evident prea ușor, așa că în schimb returnează numărul de valori pe care le conține enumerarea. Cu toate acestea, numărul de valori nu are nimic de-a face cu valorile reale, așa că trebuie să utilizați acest număr ca bază pentru apelarea metodelor bazate pe index, nu pe cele bazate pe valori.

Dacă ar fi numit această metodă indexes(), ar fi fost mai puțin confuz ;-)

De asemenea, țineți cont de faptul că valorile enumerare (și se pare că acești „indexuri”) încep de la 0, spre deosebire de indicii de matrice și container din X++, care încep de la 1, așa că pentru a trece peste elementele dintr-o enumerare ați putea face ceva de genul acesta:

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

Aceasta va scoate simbolul și eticheta fiecărui element din enumerare în infolog.

Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Bang Christensen

Despre autor

Mikkel Bang Christensen
Mikkel este creatorul și proprietarul miklix.com. El are peste 20 de ani de experiență ca programator de calculatoare/dezvoltator software profesionist și este în prezent angajat cu normă întreagă pentru o mare corporație europeană de IT. Atunci când nu scrie pe blog, își petrece timpul liber cu o gamă largă de interese, hobby-uri și activități, care se pot reflecta într-o anumită măsură în varietatea de subiecte abordate pe acest site.