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++.
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:
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:
- Utilizarea cadrului SysExtension pentru a afla ce subclasă să instanțieze în Dynamics AX 2012
- Apelarea serviciilor de documente AIF direct de la X++ în Dynamics AX 2012
- Diferența dintre data() și buf2Buf() în Dynamics AX 2012
