Miklix

Nelepon AIF Document Services Langsung ti X++ dina Dynamics AX 2012

Diterbitkeun: 16 Pébruari 2025 jam 11.25.05 UTC
Panungtungan diropéa: 12 Januari 2026 jam 8.55.41 UTC

Dina tulisan ieu, kuring ngajelaskeun kumaha cara nelepon layanan dokumén Application Integration Framework dina Dynamics AX 2012 langsung tina kode X++, nirukeun telepon asup sareng kaluar, anu tiasa ngagampangkeun sacara signifikan pikeun mendakan sareng ngadebug kasalahan dina kode AIF.


Kaca ieu ditarjamahkeun ku mesin tina basa Inggris supados tiasa diaksés ku saloba-lobana jalma. Hanjakalna, tarjamahan mesin henteu acan janten téknologi anu sampurna, janten kasalahan tiasa lumangsung. Upami anjeun hoyong, anjeun tiasa ningali versi Inggris asli di dieu:

Calling AIF Document Services Directly from X++ in Dynamics AX 2012

Inpormasi dina tulisan ieu dumasar kana Dynamics AX 2012 R3. Éta tiasa valid atanapi henteu pikeun vérsi anu sanés.

Kuring nembe ngabantosan palanggan nerapkeun port inbound Application Integration Framework (AIF) pikeun nyiptakeun palanggan dumasar kana data anu ditampi ti sistem sanés. Kusabab Dynamics AX parantos nyayogikeun layanan dokumén CustCustomer, anu nerapkeun logika pikeun ieu, kami mutuskeun pikeun tetep saderhana sareng nganggo solusi standar.

Nanging, teu lami deui tétéla aya seueur masalah pikeun ngajantenkeun sistem éksternal ngahasilkeun XML anu bakal ditampi ku Dynamics AX. Skéma XML anu dihasilkeun ku Dynamics AX mangrupikeun anu rada rumit sareng sigana ogé aya sababaraha bug dina Dynamics AX anu kadang-kadang nyababkeun éta nolak XML anu valid skéma numutkeun alat sanés, janten sacara umum, éta kabuktian kirang saderhana tibatan anu kuring pikirkeun.

Salila usaha éta, kuring sering hésé pikeun mikanyaho naon masalahna dina file XML anu tangtu sabab pesen kasalahan anu disayogikeun ku AIF kirang informatif. Éta ogé ngabosenkeun, sabab kuring kedah ngantosan sistem éksternal ngirim pesen énggal ngalangkungan MSMQ teras deui ka AIF pikeun ngajemput pesen éta sareng ngolahna sateuacan kuring tiasa ningali kasalahan.

Ku kituna kuring nalungtik naha mungkin pikeun nelepon kode layanan langsung nganggo file XML lokal pikeun uji coba anu langkung gancang sareng tétéla leres - sareng henteu ngan éta, éta gampang pisan dilakukeun sareng leres-leres nyayogikeun pesen kasalahan anu langkung bermakna.

Conto padamelan di handap ieu maca file XML lokal sareng nyobian nganggo éta sareng kelas AxdCustomer (anu mangrupikeun kelas dokumén anu dianggo ku layanan CustCustomer) pikeun nyiptakeun palanggan. Anjeun tiasa ngadamel padamelan anu sami pikeun sadaya kelas dokumén anu sanés, contona AxdSalesOrder, upami anjeun peryogi.

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 anu dipulangkeun ku metode customer.create() (anu pakait sareng operasi layanan "create" dina AIF) ngandung inpormasi ngeunaan konsumén mana anu didamel, diantarana RecId tina rékaman CustTable anu didamel.

Upami anu anjeun badé uji nyaéta port Outbound atanapi upami anjeun ngan ukur peryogi conto kumaha XML kedah katingali dina port Inbound, anjeun ogé tiasa nganggo kelas dokumén pikeun ngékspor palanggan ka file ku cara nyauran metode read() (anu saluyu sareng operasi layanan "baca"), sapertos kieu:

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

Tangtosna anjeun kedah ngagentos '123456' ku nomer rekening palanggan anu anjeun hoyong baca.

Bacaan salajengna

Upami anjeun resep kana tulisan ieu, anjeun ogé tiasa resep saran ieu:


Bagikeun on BlueskyBagikeun dina FacebookBagikeun on LinkedInBagikeun dina TumblrBagikeun harga XBagikeun on LinkedInPin on Pinterest

Mikkel Christensen

Ngeunaan Pangarang

Mikkel Christensen
Mikkel mangrupikeun panyipta sareng pamilik miklix.com. Anjeunna gaduh pangalaman langkung ti 20 taun salaku programmer komputer / pamekar software profésional sareng ayeuna padamelan full-time pikeun korporasi IT Éropa anu ageung. Nalika henteu ngeblog, anjeunna nyéépkeun waktos luangna dina sajumlah ageung minat, hobi, sareng kagiatan, anu tiasa ditingali dina rupa-rupa topik anu aya dina halaman wéb ieu.