Miklix

डायनेमिक्स 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 का विस्तार करना चाहिए, लेकिन अगर ऐसा नहीं होता है तो भी यह काम करेगा। सुपर क्लास का विस्तार करने का लाभ यह है कि यह कुछ सत्र जानकारी प्रदान करता है जो काम आ सकती है।

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

इस उदाहरण में, itemId एक डेटा सदस्य है। आपको प्रत्येक डेटा सदस्य के लिए एक parm विधि लागू करने और उसे DataMemberAttribute के साथ टैग करने की आवश्यकता है ताकि फ़्रेमवर्क को पता चले कि यह क्या है। यह फ़्रेमवर्क को आपके लिए स्वचालित रूप से संवाद बनाने में सक्षम बनाता है।

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


सेवा

सर्विस क्लास वह क्लास है जिसमें वास्तविक व्यावसायिक तर्क होता है। यह डायलॉग दिखाने, बैच प्रोसेसिंग या इस तरह की किसी भी चीज़ से संबंधित नहीं है - यह नियंत्रक वर्ग की ज़िम्मेदारी है। इसे अलग करके, आप अपने कोड को अच्छी तरह से डिज़ाइन करने और अधिक पुन: प्रयोज्य कोड बनाने की अधिक संभावना रखते हैं।

डेटा कॉन्ट्रैक्ट क्लास की तरह, सर्विस क्लास को किसी खास चीज़ से इनहेरिट करने की ज़रूरत नहीं है, लेकिन इसे SysOperationServiceBase क्लास से इनहेरिट करना चाहिए, कम से कम अगर आप उम्मीद करते हैं कि सर्विस को बैच जॉब के तौर पर चलाया जाएगा, क्योंकि सुपर क्लास बैच कॉन्टेक्स्ट के बारे में कुछ जानकारी देता है। ऑपरेशन शुरू करने वाली विधि (यानी बिजनेस लॉजिक को चलाना) को आपके डेटा कॉन्ट्रैक्ट क्लास के ऑब्जेक्ट को इनपुट के तौर पर लेना चाहिए और उसे [SysEntryPointAttribute] से सजाया जाना चाहिए। उदाहरण के लिए:

class MyService extends SysOperationServiceBase
{
}

रन नामक विधि के साथ:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


नियंत्रक

नियंत्रक वर्ग आपके ऑपरेशन के निष्पादन और बैच प्रोसेसिंग को संभालता है। यह यह भी सुनिश्चित करता है कि अधिकतम प्रदर्शन के लिए कोड को CIL में निष्पादित किया जाए। नियंत्रक वर्ग आमतौर पर SysOperationServiceController वर्ग से विरासत में मिलता है, हालाँकि अन्य विकल्प भी हैं।

class MyController extends SysOperationServiceController
{
}

सुपर क्लास का कंस्ट्रक्टर पैरामीटर के रूप में क्लास का नाम, मेथड का नाम और (वैकल्पिक रूप से) निष्पादन मोड लेता है। क्लास और मेथड का नाम आपकी सर्विस क्लास का नाम और उस पर चलने वाली मेथड का नाम होना चाहिए। तो, आप अपने कंट्रोलर की कंस्ट्रक्ट विधि को इस तरह लागू कर सकते हैं:

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

तब MyController वर्ग की मुख्य विधि इतनी सरल हो सकती है

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

और आपका मूल रूप से काम पूरा हो गया। ऊपर दिया गया उदाहरण स्पष्ट रूप से एक बहुत ही सरल उदाहरण है और फ्रेमवर्क में अन्य विकल्पों और संभावनाओं की भरमार है, लेकिन यह एक त्वरित अवलोकन के रूप में कार्य करता है यदि आपको कुछ समय के लिए फ्रेमवर्क का उपयोग नहीं करने पर ब्रश अप की आवश्यकता है।

ब्लूस्काई पर साझा करेंफेसबुक पर सांझा करेंलिंक्डइन पर साझा करेंटम्बलर पर साझा करेंX पर साझा करेंलिंक्डइन पर साझा करेंPinterest पर पिन करें

मिकेल बैंग क्रिस्टेंसन

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

मिकेल बैंग क्रिस्टेंसन
मिकेल miklix.com के निर्माता और मालिक हैं। उन्हें पेशेवर कंप्यूटर प्रोग्रामर/सॉफ्टवेयर डेवलपर के रूप में 20 से अधिक वर्षों का अनुभव है और वर्तमान में वे एक बड़े यूरोपीय आईटी निगम के लिए पूर्णकालिक रूप से कार्यरत हैं। जब वे ब्लॉगिंग नहीं करते हैं, तो वे अपना खाली समय विभिन्न प्रकार की रुचियों, शौक और गतिविधियों में बिताते हैं, जो कुछ हद तक इस वेबसाइट पर शामिल किए गए विषयों की विविधता में परिलक्षित हो सकते हैं।