डायनॅमिक्स एएक्स 2012 मध्ये एक्स ++ वरून थेट एआयएफ दस्तऐवज सेवांवर कॉल करणे
प्रकाशित: १६ फेब्रुवारी, २०२५ रोजी ११:२३:३८ AM UTC
शेवटचे अपडेट केलेले: १२ जानेवारी, २०२६ रोजी ८:५५:३२ AM UTC
या लेखात, मी डायनॅमिक्स AX २०१२ मध्ये अॅप्लिकेशन इंटिग्रेशन फ्रेमवर्क डॉक्युमेंट सर्व्हिसेसना X++ कोडवरून थेट कसे कॉल करायचे ते स्पष्ट करतो, जे इनबाउंड आणि आउटबाउंड दोन्ही कॉलचे अनुकरण करते, ज्यामुळे AIF कोडमधील त्रुटी शोधणे आणि डीबग करणे लक्षणीयरीत्या सोपे होऊ शकते.
Calling AIF Document Services Directly from X++ in Dynamics AX 2012
या पोस्टमधील माहिती डायनॅमिक्स AX २०१२ R3 वर आधारित आहे. ती इतर आवृत्त्यांसाठी वैध असू शकते किंवा नसू शकते.
मी अलिकडेच एका ग्राहकांना दुसऱ्या सिस्टमकडून मिळणाऱ्या डेटावर आधारित ग्राहक तयार करण्यासाठी अॅप्लिकेशन इंटिग्रेशन फ्रेमवर्क (AIF) इनबाउंड पोर्ट लागू करण्यास मदत करत होतो. डायनॅमिक्स AX आधीच CustCustomer डॉक्युमेंट सेवा प्रदान करत असल्याने, जी यासाठी लॉजिक लागू करते, आम्ही ते सोपे ठेवण्याचा आणि मानक उपाय वापरण्याचा निर्णय घेतला.
तथापि, लवकरच असे दिसून आले की डायनॅमिक्स AX स्वीकारेल अशा बाह्य प्रणालीला XML जनरेट करण्यात अनेक समस्या येत होत्या. डायनॅमिक्स AX द्वारे जनरेट केलेला XML स्कीमा खूपच गुंतागुंतीचा आहे आणि असेही दिसते की डायनॅमिक्स AX मध्ये काही बग आहेत ज्यामुळे कधीकधी ते इतर साधनांनुसार स्कीमा-वैध असलेल्या XML ला नाकारते, त्यामुळे एकंदरीत, ते माझ्या विचारापेक्षा कमी सोपे असल्याचे सिद्ध झाले.
या प्रयत्नादरम्यान, AIF द्वारे प्रदान केलेले त्रुटी संदेश माहितीपूर्ण नसल्यामुळे, काही XML फायलींमध्ये नेमकी समस्या काय आहे हे शोधण्यासाठी मला अनेकदा संघर्ष करावा लागला. ते देखील कंटाळवाणे होते, कारण मला बाह्य प्रणाली 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');
}
अर्थात, तुम्ही ज्या ग्राहकाचे खाते क्रमांक वाचू इच्छिता त्याचा खाते क्रमांक '१२३४५६' ने बदलला पाहिजे.
पुढील वाचन
जर तुम्हाला ही पोस्ट आवडली असेल, तर तुम्हाला हे सूचना देखील आवडतील:
- डायनॅमिक्स एएक्स 2012 मध्ये एआयएफ सेवेसाठी दस्तऐवज वर्ग आणि क्वेरी ओळखणे
- डायनॅमिक्स एएक्स 2012 मध्ये सिसऑपरेशन डेटा कॉन्ट्रॅक्ट क्लासमध्ये क्वेरी वापरणे
- डायनॅमिक्स AX २०१२ मध्ये "डेटा कॉन्ट्रॅक्ट ऑब्जेक्टसाठी कोणताही मेटाडेटा वर्ग परिभाषित केलेला नाही" ही त्रुटी आली.
