Miklix

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

Diterbitkeun: 16 Pébruari 2025 jam 11.25.05 UTC

Dina artikel ieu, kuring ngajelaskeun kumaha carana nelepon jasa dokumén Aplikasi Integration Framework dina Dinamika AX 2012 langsung ti X ++ kode, emulating duanana telepon asup jeung kaluar, nu bisa nyieun nyata gampang manggihan tur debug 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. Ieu bisa atawa bisa jadi teu valid pikeun vérsi séjén.

Kuring nembe nulungan hiji customer nerapkeun hiji Aplikasi Integration Framework (AIF) port inbound pikeun konsumén nyieun dumasar kana data aranjeunna nampi ti sistem sejen. Kusabab Dynamics AX parantos nyayogikeun jasa dokumén CustCustomer, anu ngalaksanakeun logika pikeun ieu, kami mutuskeun pikeun tetep saderhana sareng nganggo solusi standar.

Tapi, geura-giru tétéla yén aya loba masalah meunang sistem éksternal keur ngahasilkeun XML nu Dynamics AX bakal nampa. Skéma XML anu dihasilkeun ku Dynamics AX mangrupikeun anu rada rumit sareng éta ogé katingalina aya sababaraha bug dina Dynamics AX anu kadang-kadang nyababkeun éta nampik XML anu skéma-valid numutkeun alat-alat anu sanés, janten sadayana, éta kabuktosan kirang saderhana tibatan anu disangka.

Salila usaha, kuring sering bajoang pikeun terang naon masalahna sareng file XML anu tangtu sabab pesen kasalahan anu disayogikeun ku AIF kirang informatif. Éta ogé pikaboseneun, sabab kuring kedah ngantosan sistem éksternal ngirim pesen anyar dina MSMQ teras deui pikeun AIF nyandak pesen sareng ngolah éta sateuacan kuring ningali kasalahan.

Ku kituna kuring nalungtik naha kasebut nyaéta dimungkinkeun pikeun nelepon kodeu jasa langsung kalayan file XML lokal pikeun nguji rada speedier tur tétéla yén éta téh - teu ngan éta, éta bener basajan pikeun ngalakukeun tur sabenerna nyadiakeun pesen kasalahan beuki loba bermakna.

Proyék conto di handap maca file XML lokal sarta nyoba make eta kalawan kelas AxdCustomer (nu kelas dokumen dipaké ku layanan CustCustomer) pikeun nyieun customer a. 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');
}

Obyék AifEntityKey balik ku customer.create () métode (nu pakait jeung "nyieun" operasi jasa di AIF) ngandung émbaran ngeunaan nu customer dijieun, diantara hal séjén RecId tina rékaman CustTable dijieun.

Upami anjeun badé nguji mangrupikeun port Outbound atanapi upami anjeun peryogi conto kumaha XML kedah katingali dina port Inbound, anjeun ogé tiasa nganggo kelas dokumen pikeun ngékspor palanggan kana file ku cara nelepon metode baca () (cocog sareng operasi jasa "baca"), sapertos:

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

Anjeun tangtosna kedah ngagentos '123456' sareng nomer rekening nasabah anu anjeun hoyong baca.

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

Mikkel Bang Christensen

Ngeunaan Pangarang

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