ડાયનેમિક્સ AX 2012 માં X++ માંથી સીધેસીધી એઆઈએફ દસ્તાવેજ સેવાઓને કોલ કરી રહ્યા છે
પ્રકાશિત: 16 ફેબ્રુઆરી, 2025 એ 11:24:34 AM UTC વાગ્યે
આ લેખમાં, હું સમજાવું છું કે કેવી રીતે ડાયનેમિક્સ AX 2012 માં એપ્લિકેશન ઇન્ટિગ્રેશન ફ્રેમવર્ક ડોક્યુમેન્ટ સર્વિસીસને X++ કોડથી સીધેસીધું કોલ કરવું, ઇનબાઉન્ડ અને આઉટબાઉન્ડ કોલ્સનું અનુકરણ કરવું, જે એઆઇએફ કોડમાં ભૂલો શોધવા અને ડિબગ કરવાનું નોંધપાત્ર રીતે સરળ બનાવી શકે છે.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
આ પોસ્ટમાંની માહિતી ડાયનેમિક્સ એએક્સ ૨૦૧૨ આર ૩ પર આધારિત છે. તે અન્ય સંસ્કરણો માટે માન્ય હોઈ શકે છે અથવા ન પણ હોઈ શકે.
તાજેતરમાં હું એક ગ્રાહકને એપ્લિકેશન ઇન્ટિગ્રેશન ફ્રેમવર્ક (એઆઇએફ) ઇનબાઉન્ડ પોર્ટ અમલમાં મૂકવામાં મદદ કરી રહ્યો હતો, જેથી ગ્રાહકોને અન્ય સિસ્ટમમાંથી મળતા ડેટાના આધારે ગ્રાહકો તૈયાર કરી શકાય. ડાયનેમિક્સ AX પહેલેથી જ કસ્ટક્યુસ્ટોમર ડોક્યુમેન્ટ સર્વિસ પૂરી પાડે છે, જે આ માટેના તર્કને અમલમાં મૂકે છે, તેથી અમે તેને સરળ રાખવાનું અને સ્ટાન્ડર્ડ સોલ્યુશનનો ઉપયોગ કરવાનું નક્કી કર્યું છે.
જો કે, તે ટૂંક સમયમાં જ બહાર આવ્યું છે કે એક્સએમએલ જનરેટ કરવા માટે બાહ્ય સિસ્ટમ મેળવવામાં ઘણી સમસ્યાઓ છે જે ડાયનેમિક્સ એએક્સ સ્વીકારશે. ડાયનેમિક્સ એએક્સ (AX) દ્વારા જનરેટ કરવામાં આવેલી XML યોજના તદ્દન જટિલ છે અને એવું પણ જણાય છે કે ડાયનેમિક્સ એએક્સ (AX) માં કેટલીક ભૂલો છે જે કેટલીક વાર તેને XML ને નકારવાનું કારણ બને છે જે અન્ય સાધનો અનુસાર યોજના-માન્ય છે, તેથી એકંદરે, તે મેં વિચાર્યું હતું તેના કરતા ઓછું સરળ સાબિત થયું.
આ પ્રયાસ દરમિયાન, હું ઘણી વખત એ જાણવા માટે સંઘર્ષ કરતો હતો કે ચોક્કસ XML ફાઇલોમાં ખરેખર શું સમસ્યા છે કારણ કે AIF દ્વારા પૂરા પાડવામાં આવેલા ભૂલ સંદેશાઓ માહિતીપ્રદ કરતા ઓછા છે. તે કંટાળાજનક પણ હતું, કારણ કે મારે એમએસએમક્યુ પર એક નવો સંદેશો મોકલવા માટે બાહ્ય સિસ્ટમની રાહ જોવી પડી હતી અને પછી ફરીથી એઆઈએફ દ્વારા કોઈ ભૂલ દેખાય તે પહેલાં જ સંદેશો પસંદ કરી લે અને તેની પ્રક્રિયા કરે તેની રાહ જોવી પડતી હતી.
તેથી મેં તપાસ કરી કે કંઈક અંશે ઝડપી પરીક્ષણ માટે સ્થાનિક એક્સએમએલ ફાઇલ સાથે સર્વિસ કોડને સીધો કોલ કરવો શક્ય છે કે કેમ અને તે તારણ આપે છે કે તે છે - અને એટલું જ નહીં, તે કરવાનું ખરેખર સરળ છે અને ખરેખર ઘણા વધુ અર્થપૂર્ણ ભૂલ સંદેશા પ્રદાન કરે છે.
નીચે આપેલ ઉદાહરણ જોબ સ્થાનિક XML ફાઇલને વાંચે છે અને ગ્રાહક બનાવવા માટે AxdCustomer વર્ગ (જે કસ્ટક્યુસ્ટોમર સેવા દ્વારા ઉપયોગમાં લેવામાં આવતો દસ્તાવેજ વર્ગ છે) સાથે તેનો ઉપયોગ કરવાનો પ્રયાસ કરે છે. તમે અન્ય તમામ દસ્તાવેજ વર્ગો માટે સમાન જોબ કરી શકો છો, ઉદાહરણ તરીકે જો તમને જરૂર હોય તો AxdSalesOrder.
{
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');
}
ગ્રાહક.create() પદ્ધતિ (જે AIF)માં "create" સેવા કામગીરીને અનુરૂપ હોય છે) દ્વારા પરત કરવામાં આવેલી AifEntityKey ઓબ્જેક્ટમાં કયા ગ્રાહકનું સર્જન થયું હતું તેની માહિતી નો સમાવેશ થાય છે, અન્ય બાબતો ઉપરાંત સર્જેલા કસ્ટટેબલ રેકોર્ડની રીસીડી.
જો તમે જે ચકાસવાનો પ્રયાસ કરી રહ્યા છો તે આઉટબાઉન્ડ પોર્ટ છે અથવા જો તમારે ઇનબાઉન્ડ પોર્ટ પર XML કેવું હોવું જોઈએ તેના ઉદાહરણની જરૂર હોય, તો તમે તેના બદલે રીડ () પદ્ધતિ ("રીડ" સર્વિસ ઓપરેશનને અનુલક્ષીને) કોલ કરીને ફાઇલમાં ગ્રાહકને નિકાસ કરવા માટે દસ્તાવેજ વર્ગનો ઉપયોગ પણ કરી શકો છો, તેના બદલે, જેમ કે:
{
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');
}
તમે જે ગ્રાહકને વાંચવા માંગો છો તેના એકાઉન્ટ નંબર સાથે તમારે '123456' ને અલબત્ત બદલવું જોઈએ.