AIF-i dokumenditeenustele helistamine otse rakendusest X++ rakenduses Dynamics AX 2012
Avaldatud: 16. veebruar 2025, kell 11:22:56 UTC
Viimati uuendatud: 12. jaanuar 2026, kell 08:55:13 UTC
Selles artiklis selgitan, kuidas kutsuda Dynamics AX 2012-s rakenduste integreerimise raamistiku dokumenditeenuseid otse X++ koodist, emuleerides nii sissetulevaid kui ka väljaminevaid kõnesid, mis võib oluliselt lihtsustada AIF-koodi vigade leidmist ja silumist.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Selle postituse teave põhineb Dynamics AX 2012 R3-l. See ei pruugi kehtida teiste versioonide puhul.
Hiljuti aitasin ühel kliendil rakendada rakenduste integreerimise raamistiku (AIF) sissetulevat porti klientide loomiseks andmete põhjal, mida nad teisest süsteemist said. Kuna Dynamics AX pakub juba CustCustomeri dokumenditeenust, mis rakendab selle loogikat, otsustasime hoida selle lihtsana ja kasutada standardlahendust.
Peagi selgus aga, et välise süsteemi abil Dynamics AX-i poolt aktsepteeritava XML-i genereerimisega oli palju probleeme. Dynamics AX-i genereeritud XML-skeem on üsna keeruline ja tundub, et Dynamics AX-is on ka paar viga, mis mõnikord panevad selle teiste tööriistade järgi skeemikohase XML-i tagasi lükkama, seega osutus see kokkuvõttes vähem lihtsaks, kui ma arvasin.
Selle käigus oli mul tihti raskusi teatud XML-failide täpse probleemi väljaselgitamisega, kuna AIF-i edastatud veateated pole just kõige informatiivsemad. See oli ka tüütu, sest pidin ootama, kuni väline süsteem saadab MSMQ kaudu uue teate ja seejärel uuesti, kuni AIF teate vastu võtab ja töötleb, enne kui ma veateadet nägin.
Seetõttu uurisin, kas teenusekoodi on võimalik kohaliku XML-failiga otse kutsuda, et testimist mõnevõrra kiiremini teha, ja selgus, et see on võimalik – ja lisaks sellele on see väga lihtne ning annab tegelikult palju sisukamaid veateateid.
Allolev näidisülesanne loeb kohalikku XML-faili ja proovib seda kasutada koos AxdCustomer klassiga (mis on CustCustomer teenuse poolt kasutatav dokumendiklass) kliendi loomiseks. Vajadusel saate luua sarnaseid töid kõigi teiste dokumendiklasside, näiteks AxdSalesOrderi jaoks.
{
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');
}
Meetodi customer.create() tagastatud AifEntityKey objekt (mis vastab AIF-i teenuse "create" toimingule) sisaldab teavet selle kohta, milline klient loodi, muu hulgas loodud CustTable kirje RecId.
Kui proovite testida hoopis väljaminevat porti või vajate lihtsalt näidet, kuidas XML peaks sissetuleva pordi puhul välja nägema, saate kliendi faili eksportimiseks kasutada ka dokumendiklassi, kutsudes välja meetodi read() (mis vastab teenuse "read" toimingule), näiteks nii:
{
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');
}
Loomulikult peaksite numbri „123456” asendama kliendi kontonumbriga, kelle andmeid soovite lugeda.
Lisalugemist
Kui see postitus teile meeldis, võivad teile meeldida ka need soovitused:
- Päringu kasutamine SysOperationi andmelepinguklassis Dynamics AX-i 2012-s
- Dynamics AX-i 2012 SysOperation Frameworki kiirülevaade
- Kuidas itereerida X++ koodi enumi elemente rakenduses Dynamics AX 2012
