Miklix

Dynamics AX 2012 дээрх X++ кодоос дугаарын элементүүдийг хэрхэн давтах вэ

Нийтэлсэн: 2025 оны гуравдугаар сарын 19 21:32:54 (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 дээр үндэслэсэн болно. Энэ нь бусад хувилбаруудад зөв эсвэл буруу байж магадгүй.

Саяхан би enum-ийн бүртгэлийн утгуудыг харуулах шаардлагатай байсан маягт үүсгэж байлаа. Маягтыг гар аргаар үүсгэх (мөн enum-ийг хэзээ нэгэн цагт өөрчлөгдсөн бол маягтыг хадгалахад шаардлагатай болох) орны оронд, би үүнийг динамик байдлаар хэрэгжүүлэхээр шийдсэн бөгөөд ингэснээр энэ нь run time үед дизайнд талбаруудыг автоматаар нэмэх болно.

Гэхдээ би удахгүй enum-ийн утгуудыг давтаж үзэх нь хэрхэн хийхээ мэдэхэд амархан ч, жаахан будилсан гэдгийг олж мэдсэн.

Та тодорхой гэж хэлэх ёстой анхны DictEnum классаар эхлэх хэрэгтэй. Та харах болно, энэ класс нь нэр болон шошго мэдээллийг индекс болон утгаас авах хэд хэдэн аргыг агуулдаг.

Индекс болон утгын ялгаа нь индекс нь enum-ийн элементийн дугаар бөгөөд эдгээр элементүүдийг 0-оос эхлэн дараалалтайгаар тоолж байгаа бол утга нь элементийн бодит "утга" шинж чанар юм. Ихэнх enum-ууд нь 0-оос эхлэн дараалалтайгаар утгуудтай байдаг тул элементүүдийн индекс болон утга нь олон удаа адил байх боловч бүр ч үргэлж адил биш юм.

Гэхдээ хэрхэн мэдэх вэ, enum ямар утгуудтай вэ? Энэ нь будилсан хэсэг юм. DictEnum класс нь values() гэж нэрлэсэн арга агуулдаг. Та энэ аргыг enum-ийн утгуудын жагсаалтыг буцаах гэж бодож болох ч энэ нь мэдээж хялбар болох байсан тул оронд нь энэ нь enum-д агуулагдах утгуудын тоо -г буцаадаг. Гэхдээ утгуудын тоо нь бодит утгуудтай хамааралгүй тул та энэ тоог индекс суурьтай аргуудыг дуудлах үндэс болгон ашиглах хэрэгтэй, утга суурьтай аргуудыг биш.

Тэд энэ аргыг indexes() гэж нэрлэсэн бол сайн байсан байх ;-)

Мөн анхаарах хэрэгтэй зүйл бол enum-ийн утгууд (мөн эдгээр "индексүүд") 0-оос эхэлдэг бөгөөд энэ нь 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)));
}

Энэ нь инфолог дээр enum-ийн бүртгэлийн бүх элементүүдийн тэмдэгт болон шошгыг гаргах болно.

Bluesky дээр хуваалцаарайFacebook дээр хуваалцахLinkedIn дээр хуваалцахTumblr дээр хуваалцахX дээр хуваалцаарайLinkedIn дээр хуваалцахPinterest дээрх пин

Миккел Кристенсен

Зохиогчийн тухай

Миккел Кристенсен
Миккел бол miklix.com сайтыг бүтээгч, эзэмшигч юм. Тэрээр мэргэжлийн компьютерийн программист/програм хангамж хөгжүүлэгчээр 20 гаруй жил ажилласан туршлагатай бөгөөд одоогоор Европын томоохон мэдээллийн технологийн корпорацид бүтэн цагаар ажиллаж байна. Блог хөтлөөгүй үедээ тэрээр чөлөөт цагаа олон төрлийн сонирхол, хобби, үйл ажиллагаанд зарцуулдаг бөгөөд энэ нь энэ вэб сайтад багтсан олон янзын сэдвүүдэд тодорхой хэмжээгээр тусгагдсан байж магадгүй юм.