Miklix

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.


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 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.

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');
}

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:

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 akun pelanggan sing pengin diwaca.

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

Mikkel Bang Christensen

Babagan Penulis

Mikkel Bang 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.