Thirrja e Shërbimeve të Dokumenteve AIF direkt nga X++ në Dynamics AX 2012
Publikuar: 16 shkurt 2025 në 11:23:46 e paradites, UTC
Përditësimi i fundit: 12 janar 2026 në 8:55:35 e paradites, UTC
Në këtë artikull, unë shpjegoj se si të thirren shërbimet e dokumenteve të Kornizës së Integrimit të Aplikacioneve në Dynamics AX 2012 direkt nga kodi X++, duke imituar thirrjet hyrëse dhe dalëse, të cilat mund ta bëjnë shumë më të lehtë gjetjen dhe debugimin e gabimeve në kodin AIF.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Informacioni në këtë postim bazohet në Dynamics AX 2012 R3. Mund të jetë ose jo i vlefshëm për versione të tjera.
Kohët e fundit po ndihmoja një klient të implementonte një port hyrës të Kornizës së Integrimit të Aplikacioneve (AIF) për krijimin e klientëve bazuar në të dhënat që ata merrnin nga një sistem tjetër. Meqenëse Dynamics AX tashmë ofron shërbimin e dokumentit CustCustomer, i cili implementon logjikën për këtë, vendosëm ta mbanim të thjeshtë dhe të përdornim zgjidhjen standarde.
Megjithatë, shpejt doli se kishte shumë probleme për ta bërë sistemin e jashtëm të gjeneronte XML që Dynamics AX do ta pranonte. Skema XML e gjeneruar nga Dynamics AX është mjaft komplekse dhe gjithashtu duket se ka disa gabime në Dynamics AX që ndonjëherë bëjnë që ajo të refuzojë XML që është i vlefshëm për skemën sipas mjeteve të tjera, kështu që në përgjithësi, doli të ishte më pak e thjeshtë nga sa kisha menduar.
Gjatë kësaj përpjekjeje, shpesh e kisha të vështirë të kuptoja saktësisht se cili ishte problemi me disa skedarë XML, sepse mesazhet e gabimit të ofruara nga AIF nuk ishin shumë informuese. Ishte gjithashtu e lodhshme, sepse më duhej të prisja që sistemi i jashtëm të dërgonte një mesazh të ri nëpërmjet MSMQ dhe pastaj përsëri që AIF ta kapte mesazhin dhe ta përpunonte atë përpara se të shihja një gabim.
Prandaj, hetova nëse është e mundur të thirret kodi i shërbimit direkt me një skedar XML lokal për një testim disi më të shpejtë dhe doli që është - dhe jo vetëm kaq, është shumë e thjeshtë për t’u bërë dhe në fakt ofron mesazhe gabimi shumë më kuptimplote.
Shembulli i punës më poshtë lexon një skedar XML lokal dhe përpiqet ta përdorë atë me klasën AxdCustomer (e cila është klasa e dokumentit e përdorur nga shërbimi CustCustomer) për të krijuar një klient. Ju mund të bëni punë të ngjashme për të gjitha klasat e tjera të dokumenteve, për shembull AxdSalesOrder, nëse është e nevojshme.
{
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');
}
Objekti AifEntityKey i kthyer nga metoda customer.create() (që korrespondon me operacionin e shërbimit "krijo" në AIF) përmban informacion në lidhje me klientin që është krijuar, ndër të tjera RecId e regjistrimit të krijuar CustTable.
Nëse ajo që po përpiqeni të testoni është një port Dalës ose nëse ju nevojitet vetëm një shembull se si duhet të duket XML në portin Hyrës, mund të përdorni edhe klasën dokument për të eksportuar një klient në një skedar duke thirrur metodën read() (që korrespondon me operacionin e shërbimit "lexo"), si më poshtë:
{
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');
}
Sigurisht, duhet ta zëvendësoni '123456' me numrin e llogarisë së klientit që dëshironi të lexoni.
Lexime të mëtejshme
Nëse ju pëlqeu ky postim, mund t'ju pëlqejnë edhe këto sugjerime:
- Përdorimi i një pyetjeje në një klasë të kontratës së të dhënave SysOperation në Dynamics AX 2012
- Fshini një ent juridik (llogaritë e kompanisë) në Dynamics AX 2012
- Formatimi i fijeve me Macro dhe strFmt në Dynamics AX 2012
