Nelpon Layanan Dokumen AIF Langsung saka X++ ing Dynamics AX 2012
Diterbitake: 16 Februari 2025 ing 11:23:43 UTC
Ing artikel iki, aku nerangake carane nelpon layanan dokumen Framework Integrasi Aplikasi ing Dynamics AX 2012 langsung saka X++ kode, emulating loro mlebu lan metu telpon, kang bisa Ngartekno luwih gampang kanggo nemokake lan debug kasalahan ing kode AIF.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Informasi ing kirim iki adhedhasar Dynamics AX 2012 R3. Bisa uga ora bener kanggo versi liyane.
Aku bubar mbantu pelanggan ngleksanakake port inbound Application Integration Framework (AIF) kanggo nggawe pelanggan adhedhasar data sing ditampa saka sistem liyane. Amarga Dynamics AX wis nyedhiyakake layanan dokumen CustCustomer, sing ngetrapake logika kanggo iki, kita mutusake supaya tetep gampang lan nggunakake solusi standar.
Nanging, rauh ternyata ana akeh masalah njupuk sistem njaba kanggo generate XML sing Dynamics AX bakal nampa. Skema XML sing digawe dening Dynamics AX cukup rumit lan uga katon ana sawetara kewan omo ing Dynamics AX sing kadhangkala nyebabake nolak XML sing cocog karo skema miturut alat liyane, saengga kabeh, mbuktekake kurang prasaja tinimbang sing dakkira.
Sajrone usaha, aku kerep berjuang kanggo ngerteni apa persis masalah karo file XML tartamtu amarga pesen kesalahan sing diwenehake dening AIF kurang informatif. Iku uga mboseni, amarga aku kudu ngenteni sistem njaba kanggo ngirim pesen anyar liwat MSMQ lan banjur maneh kanggo AIF njupuk pesen lan proses sadurunge aku bisa ndeleng kesalahan.
Mulane aku nyelidiki apa iku bisa kanggo nelpon kode layanan langsung karo file XML lokal kanggo testing Luwih cepet lan ternyata iku - lan ora mung iku, iku pancene prasaja kanggo nindakake lan bener menehi kathah pesen kesalahan liyane migunani.
Conto proyek ing ngisor iki maca file XML lokal lan nyoba kanggo nggunakake karo kelas AxdCustomer (kang kelas document digunakake dening layanan CustCustomer) kanggo nggawe customer. Sampeyan bisa nggawe proyek padha kanggo kabeh kelas document liyane, contone, AxdSalesOrder, yen perlu.
{
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');
}
AifEntityKey obyek bali dening customer.create () cara (sing cocog karo "nggawe" operasi layanan ing AIF) ngandhut informasi bab kang customer digawe, antarane liyane RecId saka rekaman CustTable digawe.
Yen sampeyan nyoba nyoba minangka port Outbound utawa yen sampeyan mung mbutuhake conto XML kaya ing port Inbound, sampeyan uga bisa nggunakake kelas dokumen kanggo ngekspor pelanggan menyang file kanthi nelpon metode maca () (cocog karo operasi layanan "maca"), kaya mangkene:
{
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');
}
Sampeyan mesthi kudu ngganti '123456' karo nomer akun pelanggan sing pengin diwaca.