Miklix

Dynamics AX २०१२ मा X++ बाट सिधै AIF कागजात सेवाहरू कल गर्दै

प्रकाशित: २०२५ फेब्रुअरी १६: ११:२५:२३ UTC

यस लेखमा, म Dynamics AX २०१२ मा अनुप्रयोग एकीकरण फ्रेमवर्क कागजात सेवाहरूलाई X++ कोडबाट सिधै कसरी कल गर्ने भनेर व्याख्या गर्छु, जसले इनबाउन्ड र आउटबाउन्ड कलहरू दुवैको अनुकरण गर्दछ, जसले AIF कोडमा त्रुटिहरू फेला पार्न र डिबग गर्न धेरै सजिलो बनाउन सक्छ।


यो पृष्ठलाई सकेसम्म धेरै मानिसहरूको पहुँचयोग्य बनाउनको लागि अंग्रेजीबाट मेसिन अनुवाद गरिएको थियो। दुर्भाग्यवश, मेसिन अनुवाद अझै पूर्ण प्रविधि होइन, त्यसैले त्रुटिहरू हुन सक्छन्। यदि तपाईं चाहनुहुन्छ भने, तपाईं यहाँ मूल अंग्रेजी संस्करण हेर्न सक्नुहुन्छ:

Calling AIF Document Services Directly from X++ in Dynamics AX 2012

यस पोस्टमा भएको जानकारी Dynamics AX २०१२ R3 मा आधारित छ। यो अन्य संस्करणहरूको लागि मान्य हुन पनि सक्छ वा नहुन पनि सक्छ।

म हालसालै एक ग्राहकलाई अर्को प्रणालीबाट प्राप्त गरिरहेको डेटाको आधारमा ग्राहकहरू सिर्जना गर्न एप्लिकेसन इन्टिग्रेसन फ्रेमवर्क (AIF) इनबाउन्ड पोर्ट कार्यान्वयन गर्न मद्दत गरिरहेको थिएँ। Dynamics AX ले पहिले नै CustCustomer कागजात सेवा प्रदान गर्दछ, जसले यसको लागि तर्क लागू गर्दछ, हामीले यसलाई सरल राख्ने र मानक समाधान प्रयोग गर्ने निर्णय गर्यौं।

यद्यपि, चाँडै नै यो पत्ता लाग्यो कि Dynamics AX ले स्वीकार गर्ने XML उत्पन्न गर्न बाह्य प्रणाली प्राप्त गर्न धेरै समस्याहरू थिए। Dynamics AX द्वारा उत्पन्न XML स्कीमा एकदम जटिल छ र यो पनि देखिन्छ कि Dynamics AX मा केही बगहरू छन् जसले कहिलेकाहीं यसलाई अन्य उपकरणहरू अनुसार स्कीमा-मान्य XML अस्वीकार गर्न बाध्य पार्छ, त्यसैले समग्रमा, यो मैले सोचेभन्दा कम सरल साबित भयो।

प्रयासको क्रममा, AIF द्वारा प्रदान गरिएका त्रुटि सन्देशहरू जानकारीमूलक भन्दा कम भएकाले केही XML फाइलहरूमा वास्तवमा के समस्या थियो भनेर पत्ता लगाउन म प्रायः संघर्ष गर्थें। यो पनि थकाइलाग्दो थियो, किनकि मलाई बाह्य प्रणालीले 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() विधि (जुन AIF मा "create" सेवा सञ्चालनसँग मेल खान्छ) द्वारा फिर्ता गरिएको AifEntityKey वस्तुमा सिर्जना गरिएको CustTable रेकर्डको RecId सहित कुन ग्राहक सिर्जना गरिएको थियो भन्ने बारे जानकारी समावेश हुन्छ।

यदि तपाईंले परीक्षण गर्न खोजिरहनुभएको कुरा आउटबाउन्ड पोर्ट हो वा तपाईंलाई इनबाउन्ड पोर्टमा XML कस्तो देखिनुपर्छ भन्ने उदाहरण चाहिन्छ भने, तपाईंले read() विधि ("read" सेवा सञ्चालनसँग सम्बन्धित) कल गरेर ग्राहकलाई फाइलमा निर्यात गर्न document class प्रयोग गर्न सक्नुहुन्छ, जस्तै:

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');
}

तपाईंले अवश्य पनि '१२३४५६' लाई तपाईंले पढ्न चाहनुभएको ग्राहकको खाता नम्बरले बदल्नुपर्छ।

ब्लुस्कीमा सेयर गर्नुहोस्फेसबुक मा शेयर गर्नुहोस्लिंक्डइनमा सेयर गर्नुहोस्Tumblr मा सेयर गर्नुहोस्X मा सेयर गर्नुहोस्लिंक्डइनमा सेयर गर्नुहोस्Pinterest मा पिन गर्नुहोस्

मिकेल बाङ क्रिस्टेनसेन

लेखकको बारेमा

मिकेल बाङ क्रिस्टेनसेन
मिकेल miklix.com का निर्माता र मालिक हुन्। उनीसँग एक पेशेवर कम्प्युटर प्रोग्रामर/सफ्टवेयर विकासकर्ताको रूपमा २० वर्ष भन्दा बढीको अनुभव छ र हाल उनी एक ठूलो युरोपेली आईटी निगममा पूर्ण-समय कार्यरत छन्। ब्लगिङ नगर्दा, उनी आफ्नो खाली समय विभिन्न रुचि, शौक र गतिविधिहरूमा बिताउँछन्, जुन केही हदसम्म यस वेबसाइटमा समेटिएका विषयहरूको विविधतामा प्रतिबिम्बित हुन सक्छ।