AIF Document Services ကို Dynamics AX 2012 တွင် X++ မှ တိုက်ရိုက်ခေါ်ဆိုခြင်း။
ထုတ်ဝေသည်- ၂၀၂၅၊ ဖေဖော်ဝါရီ ၁၆ UTC ၁၁:၂၆:၂၄
ဤဆောင်းပါးတွင်၊ ကျွန်ုပ်သည် Dynamics AX 2012 ရှိ အက်ပလီကေးရှင်းပေါင်းစည်းမှုဘောင် စာရွက်စာတမ်းဝန်ဆောင်မှုများကို X++ ကုဒ်မှ တိုက်ရိုက်ခေါ်ဆိုပုံ၊ အဝင်နှင့်အထွက်ခေါ်ဆိုမှုများကို အတုယူကာ AIF ကုဒ်တွင် အမှားအယွင်းများကို ရှာဖွေရန်နှင့် အမှားရှာရန် သိသိသာသာပိုမိုလွယ်ကူစေမည့် အဝင်နှင့်အထွက်ခေါ်ဆိုမှုများကို အတုယူဖော်ပြပါသည်။
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
ဤပို့စ်ရှိ အချက်အလက်သည် Dynamics AX 2012 R3 ကို အခြေခံထားသည်။ ၎င်းသည် အခြားဗားရှင်းများအတွက် တရားဝင်နိုင်သည် သို့မဟုတ် မမှန်နိုင်ပါ။
ကျွန်ုပ်သည် မကြာသေးမီက ဖောက်သည်တစ်ဦးအား အခြားစနစ်မှရရှိသည့် ဒေတာအပေါ်အခြေခံ၍ ဖောက်သည်များဖန်တီးရန်အတွက် Application Inboundration Framework (AIF) inbound port တစ်ခုကို အကောင်အထည်ဖော်ရန် ကူညီနေပါသည်။ Dynamics AX သည် ဤအတွက် ယုတ္တိဗေဒကို အကောင်အထည်ဖော်ပေးသည့် CustCustomer စာရွက်စာတမ်းဝန်ဆောင်မှုကို ပေးထားပြီးဖြစ်သောကြောင့်၊ ကျွန်ုပ်တို့သည် ၎င်းကို ရိုးရိုးရှင်းရှင်းထား၍ စံဖြေရှင်းချက်ကို အသုံးပြုရန် ဆုံးဖြတ်ခဲ့သည်။
သို့သော်၊ မကြာမီတွင် Dynamics AX လက်ခံမည့် XML ကိုထုတ်လုပ်ရန် ပြင်ပစနစ်အား ရရှိရန် ပြဿနာများစွာရှိခဲ့ကြောင်း မကြာမီတွေ့ရှိခဲ့ရသည်။ Dynamics AX မှထုတ်လုပ်သော XML schema သည်အတော်လေးရှုပ်ထွေးပြီး Dynamics AX တွင် ချို့ယွင်းချက်အနည်းငယ်ရှိပုံပေါ်ပြီး ၎င်းသည် တစ်ခါတစ်ရံတွင် အခြားသောကိရိယာများအတိုင်း XML ကို schema-valid ဖြစ်သည့်အတိုင်း ငြင်းပယ်စေသည့်အတွက် အားလုံးကို ခြုံငုံကြည့်လျှင် ၎င်းသည် ထင်ထားသည်ထက်ရိုးရှင်းကြောင်း သက်သေပြခဲ့သည်။
ကြိုးပမ်းနေစဉ်အတွင်း၊ အချို့သော XML ဖိုင်များတွင် ပြဿနာသည် အတိအကျ သိရှိနိုင်ရန် AIF မှ ပေးသော error message များသည် အချက်အလက်ထက်နည်းသောကြောင့် မကြာခဏ ရုန်းကန်ခဲ့ရပါသည်။ MSMQ မှတစ်ဆင့် မက်ဆေ့ခ်ျအသစ်တစ်ခု ပေးပို့ရန် ပြင်ပစနစ်မှ မက်ဆေ့ချ်အသစ်တစ်ခု ပေးပို့ရန် စောင့်ဆိုင်းရပြီးနောက် AIF သည် အမှားအယွင်းတစ်ခုကို မတွေ့မီ ၎င်းကို ကောက်ယူပြီး စီမံဆောင်ရွက်ရန်အတွက်လည်း ပျင်းသောကြောင့် ဖြစ်ပါသည်။
ထို့ကြောင့် ဝန်ဆောင်မှုကုဒ်ကို ပြည်တွင်း XML ဖိုင်တစ်ခုဖြင့် တိုက်ရိုက်ခေါ်ဆိုရန် ဖြစ်နိုင်ခြေရှိမရှိ စုံစမ်းစစ်ဆေးခဲ့ပြီး ၎င်းသည် လုပ်ဆောင်ရန် အလွန်ရိုးရှင်းပြီး အဓိပ္ပာယ်ပိုရှိသော အမှားမက်ဆေ့ချ်များကို အမှန်တကယ် ပေးဆောင်နိုင်သည်ဆိုသည်ကို ကျွန်ုပ် စုံစမ်းစစ်ဆေးခဲ့သည်။
အောက်ပါနမူနာအလုပ်သည် ဒေသခံ XML ဖိုင်ကိုဖတ်ပြီး ဖောက်သည်တစ်ဦးဖန်တီးရန်အတွက် AxdCustomer အတန်းအစား (CustCustomer ဝန်ဆောင်မှုမှအသုံးပြုသည့် စာရွက်စာတမ်းအတန်းအစားဖြစ်သည်) နှင့် ၎င်းကိုအသုံးပြုရန် ကြိုးစားသည်။ သင်လိုအပ်ပါက အခြားစာရွက်စာတမ်းအတန်းများအားလုံးအတွက် အလားတူအလုပ်များကို သင်လုပ်နိုင်သည်၊ ဥပမာ AxdSalesOrder။
{
FileNameOpen fileName = @'C:\\TestCustomerCreate.xml';
AxdCustomer customer;
AifEntityKey key;
#File
;
new FileIoPermission(fileName, #IO_Read).assert();
customer = new AxdCustomer();
key = customer.create( XmlDocument::newFile(fileName).xml(),
new AifEndpointActionPolicyInfo(),
new AifConstraintList());
CodeAccessPermission::revertAssert();
info('Done');
}
customer.create() နည်းလမ်းဖြင့် ပြန်ပေးသော AifEntityKey အရာဝတ္တုတွင် (AIF ရှိ "ဖန်တီး" ဝန်ဆောင်မှုလုပ်ငန်းဆောင်ရွက်မှုနှင့် သက်ဆိုင်သည်)၊ ဖန်တီးထားသော CustTable မှတ်တမ်း၏ RecId နှင့် အခြားအရာများထဲတွင် မည်သည့်ဖောက်သည်ဖန်တီးထားသည်နှင့်ပတ်သက်သည့် အချက်အလက်ပါရှိသည်။
သင်စမ်းသပ်ရန်ကြိုးစားနေသည့်အရာမှာ Outbound port အစား သို့မဟုတ် XML ၏ Inbound port တွင် ပုံသဏ္ဌာန်ရှိသင့်သည်ဆိုပါက၊ ထိုအစား read() method ("read" service operation နှင့် သက်ဆိုင်သော) ကိုခေါ်ဆိုခြင်းဖြင့် စာရွက်စာတမ်းအမျိုးအစားကို အသုံးပြု၍ ဝယ်ယူသူအား ဖိုင်တစ်ခုသို့တင်ပို့ရန် စာရွက်စာတမ်းအတန်းအစားကိုလည်း အသုံးပြုနိုင်ပါသည်။
{
FileNameSave fileName = @'C:\\TestCustomerRead.xml';
Map map = new Map( Types::Integer,
Types::Container);
AxdCustomer customer;
AifEntityKey key;
XMLDocument xmlDoc;
XML xml;
AifPropertyBag bag;
#File
;
map.insert(fieldNum(CustTable, AccountNum), ['123456']);
key = new AifEntityKey();
key.parmTableId(tableNum(CustTable));
key.parmKeyDataMap(map);
customer = new AxdCustomer();
xml = customer.read(key,
null,
new AifEndpointActionPolicyInfo(),
new AifConstraintList(),
bag);
new FileIoPermission(fileName, #IO_Write).assert();
xmlDoc = XmlDocument::newXml(xml);
xmlDoc.save(fileName);
CodeAccessPermission::revertAssert();
info('Done');
}
သင်ဖတ်လိုသော ဝယ်ယူသူ၏ အကောင့်နံပါတ်ဖြင့် '123456' ကို အစားထိုးသင့်ပါသည်။