Miklix

Ինչպե՞ս իտերացնել Էնումի տարրերը 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-ում տարրերի վրա պտույտ կատարելու համար դուք կարող եք անել նման բան.

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

Սա դուրս կբերի յուրաքանչյուր տարրի սիմվոլը եւ պիտակը ինֆոլոգին:

Կիսվեք Bluesky-ումԿիսվել Facebook-ումԿիսվեք LinkedIn-ումԿիսվեք Tumblr-ումԿիսվեք X-ումԿիսվեք LinkedIn-ումԿպցնել Պինթրեսթում

Միկել Բանգ Քրիստենսեն

Հեղինակի մասին

Միկել Բանգ Քրիստենսեն
Mikkel-ը miklix.com-ի ստեղծողն ու սեփականատերն է: Նա ունի ավելի քան 20 տարվա աշխատանքային փորձ՝ որպես պրոֆեսիոնալ համակարգչային ծրագրավորող/ծրագրային ապահովման մշակող և ներկայումս լրիվ դրույքով աշխատում է եվրոպական խոշոր ՏՏ կորպորացիայի մեջ: Երբ նա բլոգ չի գրում, նա իր ազատ ժամանակն անցկացնում է հետաքրքրությունների, հոբբիների և գործունեության լայն շրջանակի վրա, որոնք որոշ չափով կարող են արտացոլվել այս կայքում ընդգրկված թեմաների բազմազանության մեջ: