Miklix

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.


Kaca iki diterjemahake mesin saka basa Inggris supaya bisa diakses dening akeh wong. Sayange, terjemahan mesin durung dadi teknologi sing sampurna, mula kesalahan bisa kedadeyan. Yen sampeyan seneng, sampeyan bisa ndeleng versi Inggris asli ing kene:

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.

static void CustomerCreate(Args _args)
{
    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:

static void CustomerRead(Args _args)
{
    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:


Nuduhake ing BlueskyNuduhake ing FacebookNuduhake ing LinkedInNuduhake ing TumblrNuduhake ing XNuduhake ing LinkedInPin ing Pinterest

Mikkel Christensen

Babagan Penulis

Mikkel Christensen
Mikkel minangka pencipta lan pemilik miklix.com. Dheweke duwe pengalaman luwih saka 20 taun minangka programmer komputer / pangembang piranti lunak profesional lan saiki kerja full-time kanggo perusahaan IT Eropa sing gedhe. Nalika ora ngeblog, dheweke mbuwang wektu luang kanggo macem-macem minat, hobi, lan kegiatan, sing bisa uga katon ing macem-macem topik sing dibahas ing situs web iki.