ડાયનેમિક્સ AX 2012 માં X++ માંથી સીધેસીધી એઆઈએફ દસ્તાવેજ સેવાઓને કોલ કરી રહ્યા છે
પ્રકાશિત: 16 ફેબ્રુઆરી, 2025 એ 11:24:34 AM UTC વાગ્યે
છેલ્લે અપડેટ કરેલ: 12 જાન્યુઆરી, 2026 એ 08:55:38 AM UTC વાગ્યે
આ લેખમાં, હું સમજાવું છું કે ડાયનેમિક્સ AX 2012 માં એપ્લિકેશન ઇન્ટિગ્રેશન ફ્રેમવર્ક ડોક્યુમેન્ટ સેવાઓને સીધા X++ કોડથી કેવી રીતે કૉલ કરવી, જે ઇનબાઉન્ડ અને આઉટબાઉન્ડ બંને કોલ્સનું અનુકરણ કરે છે, જે AIF કોડમાં ભૂલો શોધવા અને ડીબગ કરવાનું નોંધપાત્ર રીતે સરળ બનાવી શકે છે.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
આ પોસ્ટમાં આપેલી માહિતી ડાયનેમિક્સ AX 2012 R3 પર આધારિત છે. તે અન્ય સંસ્કરણો માટે માન્ય હોઈ શકે છે અથવા ન પણ હોઈ શકે.
હું તાજેતરમાં એક ગ્રાહકને એપ્લિકેશન ઇન્ટિગ્રેશન ફ્રેમવર્ક (AIF) ઇનબાઉન્ડ પોર્ટ લાગુ કરવામાં મદદ કરી રહ્યો હતો જેથી તેઓ બીજી સિસ્ટમમાંથી મેળવતા ડેટાના આધારે ગ્રાહકો બનાવી શકે. ડાયનેમિક્સ AX પહેલાથી જ CustCustomer દસ્તાવેજ સેવા પ્રદાન કરે છે, જે આ માટે તર્ક લાગુ કરે છે, તેથી અમે તેને સરળ રાખવાનું અને માનક ઉકેલનો ઉપયોગ કરવાનું નક્કી કર્યું.
જોકે, ટૂંક સમયમાં જ એવું બહાર આવ્યું કે ડાયનેમિક્સ AX દ્વારા સ્વીકારવામાં આવતી XML જનરેટ કરવા માટે બાહ્ય સિસ્ટમને ઘણી સમસ્યાઓ હતી. ડાયનેમિક્સ AX દ્વારા જનરેટ કરાયેલ XML સ્કીમા ખૂબ જટિલ છે અને એવું પણ લાગે છે કે ડાયનેમિક્સ AX માં થોડા બગ્સ છે જે ક્યારેક તેને XML ને નકારવાનું કારણ બને છે જે અન્ય ટૂલ્સ અનુસાર સ્કીમા-માન્ય છે, તેથી એકંદરે, તે મેં વિચાર્યું હતું તેના કરતાં ઓછું સરળ સાબિત થયું.
આ પ્રયાસ દરમિયાન, મને ઘણીવાર એ સમજવામાં મુશ્કેલી પડતી હતી કે ચોક્કસ XML ફાઇલોમાં ખરેખર શું સમસ્યા છે કારણ કે AIF દ્વારા આપવામાં આવતા ભૂલ સંદેશાઓ માહિતીપ્રદ નથી. તે કંટાળાજનક પણ હતું, કારણ કે મારે બાહ્ય સિસ્ટમ દ્વારા MSMQ પર નવો સંદેશ મોકલવાની રાહ જોવી પડતી હતી અને પછી AIF દ્વારા સંદેશ લેવામાં આવે અને મને ભૂલ દેખાય તે પહેલાં તેને પ્રક્રિયા કરવામાં આવે.
તેથી મેં તપાસ કરી કે શું સ્થાનિક XML ફાઇલ સાથે સેવા કોડને સીધો કૉલ કરવો શક્ય છે કે કેમ જેથી પરીક્ષણ વધુ ઝડપી બને અને તે બહાર આવ્યું કે તે શક્ય છે - અને એટલું જ નહીં, તે કરવું ખરેખર સરળ છે અને વાસ્તવમાં ઘણા વધુ અર્થપૂર્ણ ભૂલ સંદેશાઓ પ્રદાન કરે છે.
નીચે આપેલ ઉદાહરણ જોબ સ્થાનિક XML ફાઇલ વાંચે છે અને ગ્રાહક બનાવવા માટે AxdCustomer ક્લાસ (જે CustCustomer સેવા દ્વારા ઉપયોગમાં લેવાતો દસ્તાવેજ વર્ગ છે) સાથે તેનો ઉપયોગ કરવાનો પ્રયાસ કરે છે. જો તમને જરૂર હોય તો, તમે અન્ય તમામ દસ્તાવેજ વર્ગો માટે સમાન જોબ્સ બનાવી શકો છો, ઉદાહરણ તરીકે 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');
}
customer.create() પદ્ધતિ દ્વારા પરત કરાયેલ AifEntityKey ઑબ્જેક્ટ (જે AIF માં "create" સેવા કામગીરીને અનુરૂપ છે) માં કયા ગ્રાહકને બનાવવામાં આવ્યો હતો તે વિશેની માહિતી શામેલ છે, જેમાં બનાવેલ CustTable રેકોર્ડનો RecId પણ શામેલ છે.
જો તમે જે ચકાસવાનો પ્રયાસ કરી રહ્યા છો તે આઉટબાઉન્ડ પોર્ટ છે અથવા જો તમને ઇનબાઉન્ડ પોર્ટ પર XML કેવું દેખાવું જોઈએ તેનું ઉદાહરણ જોઈતું હોય, તો તમે read() પદ્ધતિ ("રીડ" સર્વિસ ઓપરેશનને અનુરૂપ) ને કૉલ કરીને ગ્રાહકને ફાઇલમાં નિકાસ કરવા માટે દસ્તાવેજ વર્ગનો ઉપયોગ પણ કરી શકો છો, જેમ કે:
{
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');
}
અલબત્ત, તમારે '૧૨૩૪૫૬' ને તમે જે ગ્રાહકને વાંચવા માંગો છો તેના એકાઉન્ટ નંબરથી બદલવું જોઈએ.
વધુ વાંચન
જો તમને આ પોસ્ટ ગમી હોય, તો તમને આ સૂચનો પણ ગમશે:
- ડાયનેમિક્સ AX 2012 માં મેક્રો અને strFmt સાથે શબ્દમાળા બંધારણ
- ડાયનેમિક્સ એએક્સ 2012 માં કયા પેટા વર્ગને પ્રારંભ કરવો તે શોધવા માટે SysExtension ફ્રેમવર્કનો ઉપયોગ કરીને
- ડાયનેમિક્સ AX 2012 માં ભૂલ "માહિતી કરાર ઑબ્જેક્ટ માટે વ્યાખ્યાયિત થયેલ મેટાડેટા વર્ગ નથી"
