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