Kuita Huduma za Hati za AIF moja kwa moja kutoka X++ katika Dynamics AX 2012
Iliyochapishwa: 16 Februari 2025, 11:23:33 UTC
Katika makala hii, ninaelezea jinsi ya kupiga simu Huduma za Hati ya Ushirikiano wa Maombi katika Dynamics AX 2012 moja kwa moja kutoka kwa nambari ya X++, kuiga simu zinazoingia na zinazotoka, ambazo zinaweza kufanya iwe rahisi sana kupata na kutatua makosa katika msimbo wa AIF.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
Habari katika chapisho hili inategemea Dynamics AX 2012 R3. Inaweza au haiwezi kuwa halali kwa matoleo mengine.
Hivi karibuni nilikuwa nikimsaidia mteja kutekeleza Mfumo wa Ushirikiano wa Maombi (AIF) bandari ya ndani kwa kuunda wateja kulingana na data waliyokuwa wakipokea kutoka kwa mfumo mwingine. Kama Dynamics AX tayari hutoa huduma ya hati ya CustCustomer, ambayo inatekeleza mantiki ya hii, tuliamua kuiweka rahisi na kutumia suluhisho la kawaida.
Hata hivyo, hivi karibuni ikawa kwamba kulikuwa na matatizo mengi kupata mfumo wa nje wa kuzalisha XML ambayo Dynamics AX ingekubali. Muundamano wa XML unaozalishwa na Dynamics AX ni ngumu sana na pia inaonekana kuna mende chache katika Dynamics AX ambayo wakati mwingine husababisha kukataa XML ambayo ni ya muundamano-valid kulingana na zana zingine, kwa hivyo yote kwa yote, imeonekana kuwa rahisi zaidi kuliko nilivyofikiria.
Wakati wa jitihada, mara nyingi nilijitahidi kujua tatizo lilikuwa nini hasa na faili fulani za XML kwa sababu ujumbe wa hitilafu uliotolewa na AIF ni mdogo kuliko kuelimisha. Pia ilikuwa ya kuchosha, kwa sababu ilibidi nisubiri mfumo wa nje kutuma ujumbe mpya juu ya MSMQ na kisha tena kwa AIF kuchukua ujumbe na kuichakata kabla sijaona kosa.
Kwa hivyo nilichunguza ikiwa inawezekana kupiga nambari ya huduma moja kwa moja na faili ya XML ya ndani kwa upimaji wa haraka na inageuka kuwa ni - na sio hiyo tu, ni rahisi sana kufanya na kwa kweli hutoa ujumbe mwingi wa makosa zaidi.
Kazi ya mfano hapa chini inasoma faili ya XML ya ndani na inajaribu kuitumia na darasa la AxdCustomer (ambayo ni darasa la hati linalotumiwa na huduma ya CustCustomer) kuunda mteja. Unaweza kufanya kazi sawa kwa madarasa mengine yote ya hati, kwa mfano AxdSalesOrder, ikiwa unahitaji.
{
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');
}
Kitu cha AifEntityKey kilichorejeshwa na njia ya mteja.create() (ambayo inalingana na operesheni ya huduma ya "kuunda" katika AIF) ina habari kuhusu mteja gani aliundwa, kati ya mambo mengine RecId ya rekodi ya CustTable iliyoundwa.
Ikiwa unachojaribu kujaribu ni bandari ya nje badala yake au ikiwa unahitaji tu mfano wa jinsi XML inapaswa kuonekana kama kwenye bandari inayoingia, unaweza pia kutumia darasa la hati kusafirisha mteja kwenye faili badala yake kwa kupiga simu kwa njia ya kusoma() (kulingana na operesheni ya huduma ya "kusoma") badala yake, Kama hivyo:
{
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');
}
Unapaswa kubadilisha '123456' na nambari ya akaunti ya mteja unayetaka kusoma.