Nelpon Layanan Dokumen AIF Langsung saka X++ ing Dynamics AX 2012
Diterbitake: 16 Februari 2025 ing 11:23:43 UTC
Dianyari pungkasan: 12 Januari 2026 ing 08:55:34 UTC
Ing artikel iki, aku nerangake carane nelpon layanan dokumen Application Integration Framework ing Dynamics AX 2012 langsung saka kode X++, niru panggilan mlebu lan metu, sing bisa nggampangake nemokake lan debug kesalahan ing kode AIF.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Informasi ing kiriman iki adhedhasar Dynamics AX 2012 R3. Iki bisa uga valid utawa ora valid kanggo versi liyane.
Aku bubar mbantu pelanggan ngleksanakake port mlebu Application Integration Framework (AIF) kanggo nggawe pelanggan adhedhasar data sing ditampa saka sistem liya. Amarga Dynamics AX wis nyedhiyakake layanan dokumen CustCustomer, sing ngleksanakake logika kanggo iki, kita mutusake kanggo njaga supaya tetep prasaja lan nggunakake solusi standar.
Nanging, jebul ana akeh masalah nalika sistem eksternal ngasilake XML sing ditampa Dynamics AX. Skema XML sing digawe dening Dynamics AX cukup rumit lan uga katon ana sawetara bug ing Dynamics AX sing kadhangkala nyebabake nolak XML sing valid skema miturut alat liyane, mula sakabèhé, iki kabukten kurang prasaja tinimbang sing dakkira.
Sajrone usaha iki, aku kerep kesulitan ngerteni apa sejatine masalah karo file XML tartamtu amarga pesen kesalahan sing diwenehake dening AIF kurang informatif. Iku uga mboseni, amarga aku kudu ngenteni sistem eksternal ngirim pesen anyar liwat MSMQ lan banjur maneh supaya AIF njupuk pesen kasebut lan ngolah sadurunge aku bisa ndeleng kesalahan.
Mulane aku nyelidiki apa bisa nelpon kode layanan langsung nganggo file XML lokal kanggo uji coba sing luwih cepet lan jebul pancen bisa - lan ora mung kuwi, iki gampang banget ditindakake lan nyatane menehi pesen kesalahan sing luwih migunani.
Conto proyek ing ngisor iki maca file XML lokal lan nyoba nggunakake karo kelas AxdCustomer (yaiku kelas dokumen sing digunakake dening layanan CustCustomer) kanggo nggawe pelanggan. Sampeyan bisa nggawe proyek sing padha kanggo kabeh kelas dokumen liyane, contone AxdSalesOrder, yen prelu.
{
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');
}
Objek AifEntityKey sing dibalekake dening metode customer.create() (sing cocog karo operasi layanan "create" ing AIF) ngemot informasi babagan pelanggan endi sing digawe, antara liya RecId saka rekaman CustTable sing digawe.
Yen sing sampeyan coba uji yaiku port Outbound utawa yen sampeyan mung butuh conto kepiye XML kudune katon ing port Inbound, sampeyan uga bisa nggunakake kelas document kanggo ngekspor pelanggan menyang file kanthi nelpon metode read() (sing cocog karo operasi layanan "read"), kaya iki:
{
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 rekening pelanggan sing pengin diwaca.
Wacan Salajengipun
Yen sampeyan seneng karo kiriman iki, sampeyan bisa uga seneng saran iki:
- Ngonversi Real menyang String karo Kabeh Desimal ing Dynamics AX 2012
- Nggunakake Kueri ing Kelas Kontrak Data SysOperation ing Dynamics AX 2012
- Kesalahan "Ora ana kelas metadata sing ditetepake kanggo obyek kontrak data" ing Dynamics AX 2012
