Dynamics AX 2012 တွင် X++ ကုဒ်မှ Enum ၏ဒြပ်စင်များကို မည်သို့ပြန်ဆိုရမည်နည်း။
ထုတ်ဝေသည်- ၂၀၂၅၊ ဖေဖော်ဝါရီ ၁၅ UTC ၂၃:၁၈:၃၁
နောက်ဆုံး မွမ်းမံပြင်ဆင်သည်- ၂၀၂၆၊ ဇန်နဝါရီ ၁၂ UTC ၀၈:၄၂:၃၀
ဤဆောင်းပါးသည် X++ ကုဒ်ဥပမာအပါအဝင် Dynamics AX 2012 တွင် base enum ၏ element များကို မည်သို့ enum လုပ်ရမည်နှင့် loop လုပ်ရမည်ကို ရှင်းပြထားသည်။
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
ဤပို့စ်ရှိ အချက်အလက်များသည် Dynamics AX 2012 R3 ကို အခြေခံထားသည်။ အခြားဗားရှင်းများအတွက် မှန်ကန်နိုင်သည် သို့မဟုတ် မမှန်ကန်နိုင်ပါ။
မကြာသေးခင်က enum ထဲက element တစ်ခုချင်းစီအတွက် တန်ဖိုးတစ်ခုပြသဖို့ လိုအပ်တဲ့ form တစ်ခု ဖန်တီးနေခဲ့ပါတယ်။ field တွေကို ကိုယ်တိုင်ဖန်တီးပြီး (enum ကို ပြုပြင်မွမ်းမံမယ်ဆိုရင် form ကို ထိန်းသိမ်းဖို့) မလိုအပ်ဘဲ run time မှာ design ထဲကို field တွေကို အလိုအလျောက်ထည့်ပေးနိုင်အောင် dynamically implement လုပ်ဖို့ ဆုံးဖြတ်ခဲ့ပါတယ်။
ဒါပေမယ့် မကြာခင်မှာပဲ enum ထဲက တန်ဖိုးတွေကို တကယ် iterating လုပ်တာက သိသွားတဲ့အခါ လွယ်ကူပေမယ့် နည်းနည်းရှုပ်ထွေးတယ်ဆိုတာ ကျွန်တော် တွေ့ရှိခဲ့ပါတယ်။
DictEnum class ကနေစရပါမယ်။ မြင်တွေ့ရမယ့်အတိုင်း ဒီ class မှာ index နဲ့ value နှစ်ခုလုံးကနေ name နဲ့ label လိုမျိုး အချက်အလက်တွေကို ရယူနိုင်တဲ့ နည်းလမ်းတွေ အများကြီးရှိပါတယ်။
index နဲ့ value ရဲ့ ကွာခြားချက်ကတော့ enum ရဲ့ element တွေကို သုညကနေစပြီး အစဉ်လိုက် နံပါတ်တပ်ထားရင် index ဆိုတာ enum ထဲက element ရဲ့ နံပါတ်ဖြစ်ပြီး value ကတော့ element ရဲ့ တကယ့် "value" property ပါ။ enum အများစုမှာ 0 ကနေ အစဉ်လိုက် နံပါတ်တပ်ထားတဲ့ တန်ဖိုးတွေ ရှိတာကြောင့် element ရဲ့ index နဲ့ value တွေက အတူတူပဲ ဖြစ်လေ့ရှိပေမယ့် အမြဲတမ်းတော့ မဟုတ်ပါဘူး။
ဒါပေမယ့် enum မှာ ဘယ်တန်ဖိုးတွေရှိလဲဆိုတာ ဘယ်လိုသိနိုင်မလဲ။ ဒီနေရာမှာ ရှုပ်ထွေးသွားပါတယ်။ DictEnum class မှာ values() လို့ခေါ်တဲ့ method တစ်ခုပါ။ ဒီ method မှာ enum ရဲ့ value စာရင်းကို ပြန်ပေးမယ်လို့ မျှော်လင့်နိုင်ပေမယ့် အဲဒါက အရမ်းလွယ်လွန်းတာကြောင့် enum မှာပါဝင်တဲ့ value အရေအတွက်ကို ပြန်ပေးပါတယ်။ ဒါပေမယ့် value အရေအတွက်က တကယ့် value တွေနဲ့ ဘာမှမဆိုင်ပါဘူး။ ဒါကြောင့် ဒီနံပါတ်ကို value-based method တွေကို မဟုတ်ဘဲ index-based method တွေကို ခေါ်ဖို့အတွက် အခြေခံအဖြစ် အသုံးပြုရပါမယ်။
ဒီ method ကို indexes() လို့ နာမည်ပေးခဲ့မယ်ဆိုရင် ပိုရှုပ်ထွေးမှာ မဟုတ်ပါဘူး ;-)
X++ ရှိ array နှင့် container index များနှင့်မတူဘဲ enum တန်ဖိုးများ (နှင့် ဤ "indexes" များ) သည် 0 မှစတင်ကြောင်း သတိရပါ၊ ထို့ကြောင့် enum ရှိ element များကို loop over လုပ်ရန် သင်ဤကဲ့သို့ လုပ်ဆောင်နိုင်သည်-
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
၎င်းသည် enum ရှိ element တစ်ခုစီ၏ symbol နှင့် label ကို infolog သို့ output ထုတ်ပေးလိမ့်မည်။
နောက်ထပ်စာဖတ်ခြင်း။
ဤပို့စ်ကို သင်နှစ်သက်ပါက၊ ဤအကြံပြုချက်များကို သင်လည်း နှစ်သက်နိုင်ပါသည်-
- Dynamics AX 2012 SysOperation Framework အမြန်ခြုံငုံသုံးသပ်ချက်
- Dynamics AX 2012 တွင် တရားဝင်အဖွဲ့အစည်း (ကုမ္ပဏီအကောင့်များ) ကို ဖျက်ပါ။
- AIF Document Services ကို Dynamics AX 2012 တွင် X++ မှ တိုက်ရိုက်ခေါ်ဆိုခြင်း။
