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-ийн элементийн давталтыг хийхийн тулд та дараах байдлаар хийх боломжтой:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Энэ нь инфолог дээр enum-ийн бүртгэлийн бүх элементүүдийн тэмдэгт болон шошгыг гаргах болно.