Az AIF-dokumentumszolgáltatások közvetlen hívása az X++-ból a Dynamics AX 2012-ben
Megjelent: 2025. február 16. 11:22:59 UTC
Utolsó frissítés: 2026. január 12. 8:55:15 UTC
Ebben a cikkben elmagyarázom, hogyan hívhatók meg az Application Integration Framework dokumentumszolgáltatásai a Dynamics AX 2012-ben közvetlenül az X++ kódból, mind a bejövő, mind a kimenő hívásokat emulálva, ami jelentősen megkönnyítheti az AIF kód hibáinak megtalálását és hibakeresését.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
A bejegyzésben található információk a Dynamics AX 2012 R3 verzión alapulnak. Előfordulhat, hogy más verziókra nem érvényesek.
Nemrég segítettem egy ügyfélnek egy alkalmazásintegrációs keretrendszer (AIF) bejövő portjának megvalósításában, amely egy másik rendszerből kapott adatok alapján hozhat létre ügyfeleket. Mivel a Dynamics AX már biztosítja a CustCustomer dokumentumszolgáltatást, amely megvalósítja ennek a logikáját, úgy döntöttünk, hogy egyszerűen kezeljük a dolgot, és a standard megoldást használjuk.
Azonban hamarosan kiderült, hogy sok probléma van azzal, hogy a külső rendszer olyan XML-t generáljon, amelyet a Dynamics AX elfogad. A Dynamics AX által generált XML-séma meglehetősen összetett, és úgy tűnik, hogy a Dynamics AX-ben van néhány hiba, amelyek miatt néha elutasítja a más eszközök szerint sémaérvényes XML-t, így összességében kevésbé egyszerűnek bizonyult, mint gondoltam.
Próbálkozás során gyakran nehezen tudtam kitalálni, hogy pontosan mi is a probléma bizonyos XML fájlokkal, mivel az AIF által küldött hibaüzenetek nem túl informatívak. Fárasztó is volt, mert meg kellett várnom, hogy a külső rendszer küldjön egy új üzenetet MSMQ-n keresztül, majd ismét, hogy az AIF fogadja és feldolgozza az üzenetet, mielőtt hibát látnék.
Ezért megvizsgáltam, hogy lehetséges-e a szolgáltatáskódot közvetlenül egy helyi XML fájllal meghívni a gyorsabb tesztelés érdekében, és kiderült, hogy igen – és nem csak ez, nagyon egyszerűen megtehető, és valójában sokkal értelmesebb hibaüzeneteket ad.
Az alábbi példafeladat egy helyi XML fájlt olvas be, és megpróbálja azt az AxdCustomer osztállyal (amelyet a CustCustomer szolgáltatás használ) felhasználni egy ügyfél létrehozásához. Hasonló feladatokat hozhat létre az összes többi dokumentumosztályhoz, például az AxdSalesOrderhez, ha szükséges.
{
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() metódus által visszaadott AifEntityKey objektum (amely az AIF „create” szolgáltatásműveletének felel meg) információkat tartalmaz arról, hogy melyik ügyfél jött létre, többek között a létrehozott CustTable rekord RecId-jét.
Ha ehelyett egy kimenő portot próbálsz tesztelni, vagy csak egy példára van szükséged arra, hogy hogyan kellene kinéznie az XML-nek a bejövő porton, akkor a document osztályt is használhatod az ügyfél fájlba exportálására a read() metódus meghívásával (ami a "read" szolgáltatásműveletnek felel meg), így:
{
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');
}
Természetesen az „123456” számot annak az ügyfélnek a számlaszámával kell helyettesítenie, akit le szeretne olvasni.
További olvasmányok
Ha tetszett ez a bejegyzés, akkor ezek a javaslatok is érdekelhetik:
- Az AIF-szolgáltatás dokumentumosztályának és lekérdezésének azonosítása a Dynamics AX 2012-ben
- A Dynamics AX 2012 SysOperation Framework gyors áttekintése
- Töröljön egy jogi személyt (vállalati fiókokat) a Dynamics AX 2012-ben
