Ինչպե՞ս իտերացնել Էնումի տարրերը X++ կոդից Դինամիկայում AX 2012
Հրապարակվել է՝ 15 փետրվարի, 2025 թ., 23:15:35 UTC
Այս հոդվածում բացատրվում է, թե ինչպես կարելի է դինամիկայի AX 2012-ում ընդգրկել եւ թեքել base enum-ի տարրերը, ներառյալ X++ կոդի օրինակը։
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Այս պոստում տեղադրված տեղեկատվությունը հիմնված է Dynamics AX 2012 R3-ի վրա: Այն կարող է կամ չի կարող վավերական լինել այլ տարբերակների համար։
Վերջերս ես ստեղծում էի մի ձեւ, որը պետք է ցույց տար յուրաքանչյուր տարրի արժեքը ըստ էության: Դաշտերը ձեռքով ստեղծելու փոխարեն (եւ հետո պետք է պահպանել ձեւը, եթե երբեւէ է մուտքը փոփոխված է), ես որոշեցի այն դինամիկ կերպով իրականացնել, որպեսզի այն ավտոմատ կերպով ավելացնի դաշտերը նախագծման ժամանակ։
Սակայն շուտով ես հայտնաբերեցի, որ իրականում կրկնվող արժեքները, մինչդեռ բավական հեշտ է իմանալ, թե ինչպես, մի քիչ շփոթեցնող է:
Ակնհայտ է, որ դուք պետք է սկսեք DictEnum դասից: Ինչպես կտեսնեք, այս դասարանը ունի մի քանի մեթոդներ, որոնք կարող են ստանալ այնպիսի տեղեկություններ, ինչպիսիք են անունը եւ պիտակը թե՛ ինդեքսից, թե՛ արժեքից:
Ինդեքսի եւ արժեքի տարբերությունն այն է, որ ինդեքսը էլեմենտի թիվ է էնում, եթե էն տարրը համարակալվել է զրոյից սկսած հաջորդականությամբ, իսկ արժեքը տարրի իրական «արժեք» հատկությունն է: Քանի որ մուտքերի մեծ մասը ունի 0-ից հաջորդական համարակալված արժեքներ, հաճախ տարրի ինդեքսն ու արժեքը նույնը կլինեն, բայց, անշուշտ, ոչ միշտ:
Բայց որտեղի ՞ ց գիտես, թե որ արժեքներն ունի էնումը ։ Ահա թե որտեղ է այն շփոթեցնում: DictEnum դասն ունի մի մեթոդ, որը կոչվում է արժեքներ(): Դուք կարող եք ակնկալել, որ այս մեթոդը կվերադարձնի enum-ի արժեքների ցուցակը, սակայն դա ակնհայտորեն շատ հեշտ կլինի, դրա փոխարեն այն վերադարձնում է այն արժեքների քանակը, որոնք պարունակում է enum-ը: Սակայն արժեքների քանակը որեւէ առնչություն չունի իրական արժեքների հետ, ուստի անհրաժեշտ է օգտագործել այս թիվը որպես հիմք՝ ինդեքսի վրա հիմնված մեթոդները կանչելու համար, այլ ոչ թե արժեքի վրա հիմնված մեթոդները։
Եթե միայն նրանք անվանեին այս մեթոդի ինդեքսները () փոխարենը, ապա դա ավելի քիչ շփոթեցնող կլիներ ;-)
Նաեւ հիշեք, որ enum արժեքները (եւ ըստ երեւույթին այս «ինդեքսները») սկսվում են 0-ից, ի տարբերություն array եւ կոնտեյներային ինդեքսների X++-ում, որոնք սկսվում են 1-ից, այնպես որ enum-ում տարրերի վրա պտույտ կատարելու համար դուք կարող եք անել նման բան.
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Սա դուրս կբերի յուրաքանչյուր տարրի սիմվոլը եւ պիտակը ինֆոլոգին: