Miklix

ડાયનેમિક્સ 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.

static void CustomerCreate(Args _args)
{
    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() પદ્ધતિ ("રીડ" સર્વિસ ઓપરેશનને અનુરૂપ) ને કૉલ કરીને ગ્રાહકને ફાઇલમાં નિકાસ કરવા માટે દસ્તાવેજ વર્ગનો ઉપયોગ પણ કરી શકો છો, જેમ કે:

static void CustomerRead(Args _args)
{
    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');
}

અલબત્ત, તમારે '૧૨૩૪૫૬' ને તમે જે ગ્રાહકને વાંચવા માંગો છો તેના એકાઉન્ટ નંબરથી બદલવું જોઈએ.

વધુ વાંચન

જો તમને આ પોસ્ટ ગમી હોય, તો તમને આ સૂચનો પણ ગમશે:


બ્લુસ્કી પર શેર કરોફેસબુક પર શેર કરોLinkedIn પર શેર કરોટમ્બલર પર શેર કરોX પર શેર કરોLinkedIn પર શેર કરોPinterest પર પિન કરો

મિકેલ ક્રિસ્ટેનસેન

લેખક વિશે

મિકેલ ક્રિસ્ટેનસેન
મિકેલ miklix.com ના સર્જક અને માલિક છે. તેમને એક વ્યાવસાયિક કમ્પ્યુટર પ્રોગ્રામર/સોફ્ટવેર ડેવલપર તરીકે 20 વર્ષથી વધુનો અનુભવ છે અને હાલમાં તેઓ એક મોટા યુરોપિયન IT કોર્પોરેશનમાં પૂર્ણ-સમય કાર્યરત છે. જ્યારે તેઓ બ્લોગિંગ કરતા નથી, ત્યારે તેઓ પોતાનો ફાજલ સમય વિવિધ રુચિઓ, શોખ અને પ્રવૃત્તિઓ પર વિતાવે છે, જે આ વેબસાઇટ પર આવરી લેવામાં આવેલા વિવિધ વિષયોમાં પ્રતિબિંબિત થઈ શકે છે.