AIF-asiakirjapalveluiden soittaminen suoraan X++:sta Dynamics AX 2012:ssa
Julkaistu: 16. helmikuuta 2025 klo 11.22.57 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.55.13 UTC
Tässä artikkelissa selitän, miten Application Integration Framework -asiakirjapalveluita kutsutaan Dynamics AX 2012:ssa suoraan X++-koodista emuloimalla sekä saapuvia että lähteviä kutsuja, mikä voi helpottaa huomattavasti virheiden löytämistä ja korjaamista AIF-koodissa.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Tämän viestin tiedot perustuvat Dynamics AX 2012 R3 -versioon. Ne eivät välttämättä päde muihin versioihin.
Autoin hiljattain asiakasta toteuttamaan Application Integration Frameworkin (AIF) saapuvan liikenteen portin asiakkaiden luomiseksi heidän toisesta järjestelmästä vastaanottamiensa tietojen perusteella. Koska Dynamics AX tarjoaa jo CustCustomer-asiakirjapalvelun, joka toteuttaa tämän logiikan, päätimme pitää sen yksinkertaisena ja käyttää vakioratkaisua.
Pian kuitenkin kävi ilmi, että ulkoisen järjestelmän saamisessa luomaan Dynamics AX:n hyväksymää XML-koodia oli paljon ongelmia. Dynamics AX:n luoma XML-skeema on melko monimutkainen, ja näyttää myös olevan muutamia virheitä, jotka joskus saavat sen hylkäämään muiden työkalujen mukaan skeemavalidin XML-koodin, joten kaiken kaikkiaan se osoittautui vähemmän yksinkertaiseksi kuin olin luullut.
Työn aikana minulla oli usein vaikeuksia selvittää, mikä tiettyjen XML-tiedostojen ongelma tarkalleen ottaen oli, koska AIF:n antamat virheilmoitukset eivät ole kovin informatiivisia. Se oli myös työlästä, koska minun piti odottaa, että ulkoinen järjestelmä lähettää uuden viestin MSMQ:n kautta ja sitten uudelleen, että AIF poimii viestin ja käsittelee sen, ennen kuin näin virheen.
Siksi tutkin, onko mahdollista kutsua palvelukoodia suoraan paikallisella XML-tiedostolla testauksen nopeuttamiseksi, ja osoittautui, että se on mahdollista – eikä siinä kaikki, se on todella helppo tehdä ja antaa itse asiassa paljon merkityksellisempiä virheilmoituksia.
Alla oleva esimerkkityö lukee paikallisen XML-tiedoston ja yrittää käyttää sitä AxdCustomer-luokan (joka on CustCustomer-palvelun käyttämä dokumenttiluokka) kanssa asiakkaan luomiseen. Voit tarvittaessa tehdä vastaavia töitä kaikille muille dokumenttiluokille, esimerkiksi AxdSalesOrder-luokalle.
{
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');
}
Customer.create()-metodin palauttama AifEntityKey-objekti (joka vastaa AIF:n "create"-palveluoperaatiota) sisältää tietoja siitä, mikä asiakas luotiin, muun muassa luodun CustTable-tietueen RecId-tunnuksen.
Jos testaat lähtevän liikenteen porttia tai tarvitset vain esimerkin siitä, miltä XML:n pitäisi näyttää saapuvan liikenteen portissa, voit myös käyttää document-luokkaa asiakkaan viemiseen tiedostoon kutsumalla read()-metodia (joka vastaa "read"-palveluoperaatiota) seuraavasti:
{
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');
}
Sinun tulee tietenkin korvata '123456' sen asiakkaan tilinumerolla, jonka haluat lukea.
Lisälukemista
Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:
- Poista oikeushenkilö (yritystilit) Dynamics AX 2012:ssa
- Enumin elementtien toistaminen X++-koodista Dynamics AX 2012:ssa
- Merkkijonojen muotoilu makrolla ja strFmt:llä Dynamics AX 2012:ssa
