डायनेमिक्स AX 2012 सिस्टमऑपरेशन फ्रेमवर्क त्वरित अवलोकन
प्रकाशित: 15 फ़रवरी 2025 को 10:35:52 pm UTC बजे
यह आलेख Dynamics AX 2012 और Dynamics 365 for Operations में SysOperation फ्रेमवर्क में प्रोसेसिंग क्लासेस और बैच जॉब्स को क्रियान्वित करने के तरीके पर एक त्वरित अवलोकन (या चीट शीट) प्रदान करता है।
Dynamics AX 2012 SysOperation Framework Quick Overview
इस पोस्ट में दी गई जानकारी Dynamics AX 2012 R3 पर आधारित है। यह अन्य संस्करणों के लिए मान्य हो भी सकती है और नहीं भी। (अपडेट: मैं पुष्टि कर सकता हूँ कि इस लेख में दी गई जानकारी Dynamics 365 for Operations के लिए भी मान्य है)
यह पोस्ट सिर्फ़ एक त्वरित अवलोकन और चीट शीट के रूप में है। यदि आप SysOperation फ़्रेमवर्क के लिए नए हैं, तो मेरा दृढ़ता से सुझाव है कि आप इस विषय पर Microsoft का श्वेत पत्र भी पढ़ें। यदि आपको इस फ़्रेमवर्क के साथ संचालन विकसित करने में शामिल विभिन्न वर्गों पर त्वरित ब्रश की आवश्यकता है, तो यहाँ दी गई जानकारी उपयोगी हो सकती है।
इसमें भिन्नताएं हैं, लेकिन जब मैं फ्रेमवर्क का उपयोग करता हूं तो मैं आमतौर पर तीन वर्गों को लागू करता हूं:
- डेटा अनुबंध (SysOperationDataContractBase का विस्तार करना चाहिए)
- सेवा (SysOperationServiceBase का विस्तार होना चाहिए)
- नियंत्रक (SysOperationServiceController का विस्तार करना होगा )
इसके अतिरिक्त, मैं UIBuilder क्लास भी क्रियान्वित कर सकता हूँ (SysOperationUIBuilder को विस्तारित करना होगा ), लेकिन यह केवल तभी आवश्यक है जब किसी कारण से संवाद को फ्रेमवर्क द्वारा स्वचालित रूप से उत्पन्न संवाद से अधिक उन्नत होना पड़े।
डेटा अनुबंध
डेटा अनुबंध आपके ऑपरेशन के लिए आवश्यक डेटा सदस्यों को रखता है। इसकी तुलना RunBase फ्रेमवर्क में परिभाषित सामान्य CurrentList मैक्रो से की जा सकती है, लेकिन इसके बजाय इसे एक क्लास के रूप में लागू किया जाता है। डेटा अनुबंध को SysOperationDataContractBase का विस्तार करना चाहिए, लेकिन अगर ऐसा नहीं होता है तो भी यह काम करेगा। सुपर क्लास का विस्तार करने का लाभ यह है कि यह कुछ सत्र जानकारी प्रदान करता है जो काम आ सकती है।
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
इस उदाहरण में, itemId एक डेटा सदस्य है। आपको प्रत्येक डेटा सदस्य के लिए एक parm विधि लागू करने और उसे DataMemberAttribute के साथ टैग करने की आवश्यकता है ताकि फ़्रेमवर्क को पता चले कि यह क्या है। यह फ़्रेमवर्क को आपके लिए स्वचालित रूप से संवाद बनाने में सक्षम बनाता है।
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
सेवा
सर्विस क्लास वह क्लास है जिसमें वास्तविक व्यावसायिक तर्क होता है। यह डायलॉग दिखाने, बैच प्रोसेसिंग या इस तरह की किसी भी चीज़ से संबंधित नहीं है - यह नियंत्रक वर्ग की ज़िम्मेदारी है। इसे अलग करके, आप अपने कोड को अच्छी तरह से डिज़ाइन करने और अधिक पुन: प्रयोज्य कोड बनाने की अधिक संभावना रखते हैं।
डेटा कॉन्ट्रैक्ट क्लास की तरह, सर्विस क्लास को किसी खास चीज़ से इनहेरिट करने की ज़रूरत नहीं है, लेकिन इसे SysOperationServiceBase क्लास से इनहेरिट करना चाहिए, कम से कम अगर आप उम्मीद करते हैं कि सर्विस को बैच जॉब के तौर पर चलाया जाएगा, क्योंकि सुपर क्लास बैच कॉन्टेक्स्ट के बारे में कुछ जानकारी देता है। ऑपरेशन शुरू करने वाली विधि (यानी बिजनेस लॉजिक को चलाना) को आपके डेटा कॉन्ट्रैक्ट क्लास के ऑब्जेक्ट को इनपुट के तौर पर लेना चाहिए और उसे [SysEntryPointAttribute] से सजाया जाना चाहिए। उदाहरण के लिए:
{
}
रन नामक विधि के साथ:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
नियंत्रक
नियंत्रक वर्ग आपके ऑपरेशन के निष्पादन और बैच प्रोसेसिंग को संभालता है। यह यह भी सुनिश्चित करता है कि अधिकतम प्रदर्शन के लिए कोड को CIL में निष्पादित किया जाए। नियंत्रक वर्ग आमतौर पर SysOperationServiceController वर्ग से विरासत में मिलता है, हालाँकि अन्य विकल्प भी हैं।
{
}
सुपर क्लास का कंस्ट्रक्टर पैरामीटर के रूप में क्लास का नाम, मेथड का नाम और (वैकल्पिक रूप से) निष्पादन मोड लेता है। क्लास और मेथड का नाम आपकी सर्विस क्लास का नाम और उस पर चलने वाली मेथड का नाम होना चाहिए। तो, आप अपने कंट्रोलर की कंस्ट्रक्ट विधि को इस तरह लागू कर सकते हैं:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
तब MyController वर्ग की मुख्य विधि इतनी सरल हो सकती है
{
;
MyController::construct().startOperation();
}
और आपका मूल रूप से काम पूरा हो गया। ऊपर दिया गया उदाहरण स्पष्ट रूप से एक बहुत ही सरल उदाहरण है और फ्रेमवर्क में अन्य विकल्पों और संभावनाओं की भरमार है, लेकिन यह एक त्वरित अवलोकन के रूप में कार्य करता है यदि आपको कुछ समय के लिए फ्रेमवर्क का उपयोग नहीं करने पर ब्रश अप की आवश्यकता है।