AIF փաստաթղթային ծառայությունների կանչը անմիջապես X++ -ից Դինամիկայում AX 2012
Հրապարակվել է՝ 16 փետրվարի, 2025 թ., 11:24:24 UTC
Վերջին թարմացումը՝ 12 հունվարի, 2026 թ., 08:55:37 UTC
Այս հոդվածում ես բացատրում եմ, թե ինչպես կանչել Dynamics AX 2012-ում Application Integration Framework փաստաթղթային ծառայությունները անմիջապես X++ կոդից՝ նմանակելով ինչպես մուտքային, այնպես էլ ելքային զանգերը, ինչը կարող է զգալիորեն հեշտացնել AIF կոդում սխալների որոնումը և վրիպազերծումը։
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Այս գրառման մեջ տեղեկատվությունը հիմնված է Dynamics AX 2012 R3-ի վրա: Այն կարող է վավեր լինել կամ չլինել այլ տարբերակների համար:
Վերջերս ես օգնում էի մի հաճախորդի ներդնել Application Integration Framework (AIF) մուտքային պորտ՝ մեկ այլ համակարգից ստացվող տվյալների հիման վրա հաճախորդներ ստեղծելու համար: Քանի որ Dynamics AX-ն արդեն իսկ տրամադրում է CustCustomer փաստաթղթային ծառայությունը, որն իրականացնում է այս տրամաբանությունը, մենք որոշեցինք այն պարզ պահել և օգտագործել ստանդարտ լուծումը:
Սակայն շուտով պարզվեց, որ արտաքին համակարգի կողմից Dynamics AX-ի կողմից ընդունվող XML ստեղծելու հարցում բազմաթիվ խնդիրներ կան։ Dynamics AX-ի կողմից ստեղծված XML սխեման բավականին բարդ է, և, կարծես, Dynamics AX-ում կան նաև մի քանի սխալներ, որոնք երբեմն ստիպում են նրան մերժել XML-ը, որը սխեմատիկորեն վավեր է այլ գործիքների համաձայն, ուստի ընդհանուր առմամբ, այն ավելի պարզ չէր, քան ես կարծում էի։
Աշխատանքի ընթացքում ես հաճախ դժվարանում էի հասկանալ, թե կոնկրետ ինչ խնդիր կար որոշակի XML ֆայլերի հետ, քանի որ AIF-ի կողմից տրամադրված սխալի հաղորդագրությունները բավարար չափով տեղեկատվական չէին։ Դա նաև ձանձրալի էր, քանի որ ես պետք է սպասեի, մինչև արտաքին համակարգը 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 պորտը, կամ եթե ձեզ պարզապես անհրաժեշտ է XML-ի տեսքի օրինակ մուտքային պորտում, կարող եք նաև օգտագործել document դասը՝ հաճախորդին ֆայլ արտահանելու համար՝ փոխարենը կանչելով read() մեթոդը (համապատասխանում է «read» ծառայության գործողությանը), հետևյալ կերպ՝
{
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»-ը այն հաճախորդի հաշվի համարով, որը ցանկանում եք կարդալ։
Լրացուցիչ ընթերցանություն
Եթե ձեզ դուր եկավ այս գրառումը, ձեզ կարող են նաև դուր գալ այս առաջարկները.
- Փոխարկել իրականը լարում բոլոր decimals հետ Դինամիկայում AX 2012
- Օգտագործումը հարցումը SysOperation Data Contract Class in Dynamics AX 2012
- Ջնջել իրավաբանական անձը (ընկերության հաշիվները) Dynamics AX 2012-ում
