Dynamics AX 2012 में X++ से सीधे AIF दस्तावेज़ सेवाएँ कॉल करना
प्रकाशित: 16 फ़रवरी 2025 को 11:23:27 am UTC बजे
आखरी अपडेट: 12 जनवरी 2026 को 8:55:27 am UTC बजे
इस आर्टिकल में, मैं समझाता हूँ कि Dynamics AX 2012 में X++ कोड से सीधे Application Integration Framework डॉक्यूमेंट सर्विस को कैसे कॉल करें, इनबाउंड और आउटबाउंड दोनों कॉल को एम्युलेट करके, जिससे AIF कोड में एरर को ढूंढना और डीबग करना काफी आसान हो सकता है।
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
इस पोस्ट में दी गई जानकारी Dynamics AX 2012 R3 पर आधारित है। यह दूसरे वर्शन के लिए वैलिड हो भी सकती है और नहीं भी।
मैं हाल ही में एक कस्टमर को दूसरे सिस्टम से मिले डेटा के आधार पर कस्टमर बनाने के लिए एप्लीकेशन इंटीग्रेशन फ्रेमवर्क (AIF) इनबाउंड पोर्ट इम्प्लीमेंट करने में मदद कर रहा था। क्योंकि Dynamics AX पहले से ही CustCustomer डॉक्यूमेंट सर्विस देता है, जो इसके लिए लॉजिक इम्प्लीमेंट करता है, इसलिए हमने इसे सिंपल रखने और स्टैंडर्ड सॉल्यूशन इस्तेमाल करने का फैसला किया।
लेकिन, जल्द ही पता चला कि एक्सटर्नल सिस्टम से XML जेनरेट करने में बहुत सारी दिक्कतें थीं, जिसे Dynamics AX एक्सेप्ट कर सके। Dynamics AX से जेनरेट किया गया XML स्कीमा काफी कॉम्प्लेक्स है और ऐसा भी लगता है कि Dynamics 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() मेथड (जो AIF में "create" सर्विस ऑपरेशन से जुड़ा है) से लौटाए गए AifEntityKey ऑब्जेक्ट में यह जानकारी होती है कि कौन सा कस्टमर बनाया गया था, और दूसरी चीज़ों के साथ, बनाए गए CustTable रिकॉर्ड का RecId भी होता है।
अगर आप आउटबाउंड पोर्ट को टेस्ट करने की कोशिश कर रहे हैं या आपको बस यह उदाहरण चाहिए कि इनबाउंड पोर्ट पर XML कैसा दिखना चाहिए, तो आप इसके बजाय read() मेथड ("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');
}
आपको '123456' की जगह उस कस्टमर का अकाउंट नंबर डालना चाहिए जिसे आप पढ़ना चाहते हैं।
अग्रिम पठन
यदि आपको यह पोस्ट पसंद आई हो, तो आपको ये सुझाव भी पसंद आ सकते हैं:
- Dynamics AX 2012 में किस उपवर्ग को तत्काल बनाना है, यह जानने के लिए SysExtension फ्रेमवर्क का उपयोग करना
- डायनेमिक्स AX 2012 सिस्टमऑपरेशन फ्रेमवर्क त्वरित अवलोकन
- Dynamics AX 2012 में AIF सेवा के लिए दस्तावेज़ वर्ग और क्वेरी की पहचान करना
