Miklix

डायनेमिक्स AX 2012 सिस्टमऑपरेशन फ्रेमवर्क त्वरित अवलोकन

प्रकाशित: 15 फ़रवरी 2025 को 10:35:52 pm UTC बजे
आखरी अपडेट: 12 जनवरी 2026 को 8:39:17 am 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 फ्रेमवर्क में नए हैं, तो मेरा सुझाव है कि आप इस विषय पर माइक्रोसॉफ्ट का व्हाइट पेपर भी पढ़ें। अगर आपको इस फ्रेमवर्क के साथ ऑपरेशन डेवलप करने में शामिल अलग-अलग क्लास के बारे में बस एक क्विक ब्रश अप चाहिए, तो यहां दी गई जानकारी काम आ सकती है।

इसमें वेरिएशन हैं, लेकिन जब मैं फ्रेमवर्क का इस्तेमाल करता हूं तो मैं आमतौर पर तीन क्लास इम्प्लीमेंट करता हूं:

  • डेटा कॉन्ट्रैक्ट (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 से अधिक वर्षों का अनुभव है और वर्तमान में वे एक बड़े यूरोपीय आईटी निगम के लिए पूर्णकालिक रूप से कार्यरत हैं। जब वे ब्लॉगिंग नहीं करते हैं, तो वे अपना खाली समय विभिन्न प्रकार की रुचियों, शौक और गतिविधियों में बिताते हैं, जो कुछ हद तक इस वेबसाइट पर शामिल किए गए विषयों की विविधता में परिलक्षित हो सकते हैं।