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
Ultima actualizare: 12 ianuarie 2026 la 08:42:04 UTC

Acest articol explică cum se enumeră și se parcurge prin buclă elementele unei enumerări 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. Este posibil să fie sau nu valabile pentru alte versiuni.

Recent, cream 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ă fiu nevoit să mențin formularul dacă enumerarea este modificată vreodată), am decis să îl implementez dinamic, astfel încât să adauge automat câmpurile la design în timpul execuției.

Totuși, am descoperit curând că iterarea peste valorile 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 precum nume și etichetă atât din index, cât și din valoare.

Diferența dintre index și value este că index este numărul unui element în enum, dacă elementele enum-ului au fost numerotate secvențial începând de la zero, în timp ce value este proprietatea „value” reală a elementului. Deoarece majoritatea enum-urilor au valori numerotate secvențial de la 0, indexul și valoarea unui element vor fi adesea aceleași, dar cu siguranță nu întotdeauna.

Dar cum știi ce valori are o enumerare? Aici devine confuz. Clasa DictEnum are o metodă numită values(). S-ar putea să te aștepți ca această metodă să returneze o listă cu valorile enumerației, dar evident că ar fi 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 nicio legătură cu valorile reale, așa că trebuie să folosești acest număr ca bază pentru apelarea metodelor bazate pe index, nu pe cele bazate pe valori.

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

De asemenea, rețineți că valorile enum (și aparent acești „indexuri”) încep de la 0, spre deosebire de indexurile matriceale și containerelor din X++, care încep de la 1, așa că pentru a parcurge elementele dintr-o enumerare, ați putea face ceva de genul:

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 afișa simbolul și eticheta fiecărui element din enumerare în infolog.

Lectură suplimentară

Dacă ți-a plăcut această postare, s-ar putea să-ți placă și aceste sugestii:


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

Mikkel Christensen

Despre autor

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