Miklix

Ինչպե՞ս իտերացնել Էնումի տարրերը X++ կոդից Դինամիկայում AX 2012

Հրապարակվել է՝ 15 փետրվարի, 2025 թ., 23:15:35 UTC
Վերջին թարմացումը՝ 12 հունվարի, 2026 թ., 08:42:24 UTC

Այս հոդվածը բացատրում է, թե ինչպես թվարկել և ցիկլով անցկացնել բազային թվարկման տարրերը Dynamics AX 2012-ում, ներառյալ X++ կոդի օրինակ։


Այս էջը ավտոմատ կերպով թարգմանվել է անգլերենից՝ հնարավորինս շատ մարդկանց համար հասանելի դարձնելու համար: Ցավոք, մեքենայական թարգմանությունը դեռ կատարելագործված տեխնոլոգիա չէ, ուստի կարող են սխալներ առաջանալ: Եթե ​​նախընտրում եք, կարող եք դիտել բնօրինակ անգլերեն տարբերակը այստեղ.

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

Այս գրառման մեջ տեղեկատվությունը հիմնված է Dynamics AX 2012 R3-ի վրա: Այն կարող է վավեր լինել կամ չլինել այլ տարբերակների համար:

Վերջերս ես ստեղծում էի մի ձև, որը պետք է ցուցադրեր թվարկման մեջ յուրաքանչյուր տարրի արժեքը։ Դաշտերը ձեռքով ստեղծելու (և այնուհետև թվարկման փոփոխության դեպքում ձևը պահպանելու անհրաժեշտության) փոխարեն որոշեցի այն իրականացնել դինամիկ կերպով, որպեսզի այն ավտոմատ կերպով դաշտերը ավելացնի դիզայնին՝ աշխատանքի ժամանակ։

Այնուամենայնիվ, շուտով ես հայտնաբերեցի, որ թվարկման մեջ արժեքների կրկնությունը, չնայած բավականին հեշտ է, երբ գիտես, թե ինչպես դա անել, մի փոքր շփոթեցնող է։

Ակնհայտ է, որ դուք պետք է սկսեք DictEnum դասից։ Ինչպես կտեսնեք, այս դասն ունի մի քանի մեթոդներ ինդեքսից և արժեքից անուն և պիտակ ստանալու համար։

Ինդեքսի և արժեքի միջև տարբերությունն այն է, որ ինդեքսը տարրի համարն է թվարկման մեջ, եթե թվարկման տարրերը համարակալված են հաջորդաբար՝ սկսած զրոյից, մինչդեռ արժեքը տարրի իրական «արժեք» հատկությունն է: Քանի որ թվարկումների մեծ մասն ունի արժեքներ, որոնք համարակալված են հաջորդաբար՝ սկսած 0-ից, տարրի ինդեքսը և արժեքը հաճախ նույնը կլինեն, բայց ոչ միշտ:

Բայց ինչպե՞ս իմանալ, թե ինչ արժեքներ ունի համարակալումը։ Ահա թե որտեղ է ամեն ինչ շփոթեցնող դառնում։ DictEnum դասն ունի values() անունով մեթոդ։ Դուք կարող եք ակնկալել, որ այս մեթոդը կվերադարձնի համարակալման արժեքների ցանկը, բայց դա ակնհայտորեն չափազանց հեշտ կլինի, ուստի փոխարենը այն վերադարձնում է համարակալման մեջ պարունակվող արժեքների քանակը։ Սակայն արժեքների քանակը ոչ մի կապ չունի իրական արժեքների հետ, ուստի դուք պետք է օգտագործեք այս թիվը որպես հիմք ինդեքսի վրա հիմնված մեթոդները կանչելու համար, այլ ոչ թե արժեքի վրա հիմնվածները։

Եթե այս մեթոդը անվանեին indexes(), ապա այն ավելի քիչ շփոթեցնող կլիներ ;-)

Հաշվի առեք նաև, որ համարակալման արժեքները (և, ակնհայտորեն, այս «ինդեքսները») սկսվում են 0-ից, ի տարբերություն X++-ում զանգվածների և կոնտեյներների ինդեքսների, որոնք սկսվում են 1-ից, ուստի համարակալման տարրերի վրայով ցիկլ անցկացնելու համար կարող եք անել հետևյալը.

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 տարվա աշխատանքային փորձ՝ որպես պրոֆեսիոնալ համակարգչային ծրագրավորող/ծրագրային ապահովման մշակող և ներկայումս լրիվ դրույքով աշխատում է եվրոպական խոշոր ՏՏ կորպորացիայի մեջ: Երբ նա բլոգ չի գրում, նա իր ազատ ժամանակն անցկացնում է հետաքրքրությունների, հոբբիների և գործունեության լայն շրջանակի վրա, որոնք որոշ չափով կարող են արտացոլվել այս կայքում ընդգրկված թեմաների բազմազանության մեջ: