Miklix

Dynamics AX 2012 में SysOperation डेटा कॉन्ट्रैक्ट क्लास में क्वेरी का उपयोग करना

प्रकाशित: 16 फ़रवरी 2025 को 1:23:14 am UTC बजे
आखरी अपडेट: 12 जनवरी 2026 को 8:47:24 am UTC बजे

यह आर्टिकल Dynamics AX 2012 (और Dynamics 365 for Operations) में SysOperation डेटा कॉन्ट्रैक्ट क्लास में यूज़र-कॉन्फ़िगरेबल और फ़िल्टरेबल क्वेरी जोड़ने के तरीके के बारे में डिटेल्स बताता है।


इस पृष्ठ को अंग्रेजी से मशीन द्वारा अनुवादित किया गया है ताकि इसे अधिक से अधिक लोगों तक पहुँचाया जा सके। दुर्भाग्य से, मशीन अनुवाद अभी तक एक पूर्ण तकनीक नहीं है, इसलिए त्रुटियाँ हो सकती हैं। यदि आप चाहें, तो आप मूल अंग्रेजी संस्करण यहाँ देख सकते हैं:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

इस पोस्ट में दी गई जानकारी Dynamics AX 2012 R3 पर आधारित है। यह दूसरे वर्शन के लिए वैलिड हो भी सकती है और नहीं भी। (अपडेट: मैं कन्फर्म कर सकता हूँ कि यह Dynamics 365 for Operations पर भी काम करता है)

मैं हमेशा SysOperation फ्रेमवर्क में क्वेरी को कैसे स्पेसिफाई और इनिशियलाइज़ करना है, इसकी डिटेल्स भूल जाता हूँ। मुझे लगता है कि मैं जो ज़्यादातर बैच जॉब्स बना रहा हूँ, वे यूज़र-कॉन्फ़िगरेबल क्वेरीज़ पर बेस्ड नहीं हैं, लेकिन कभी-कभी मुझे ऐसा बैच जॉब बनाने की ज़रूरत पड़ती है, इसलिए यह पोस्ट मेरे अपने रेफरेंस के लिए भी है।

सबसे पहले, डेटा कॉन्ट्रैक्ट क्लास में, क्वेरी को एक स्ट्रिंग में पैक करके स्टोर किया जाएगा। इसके parm मेथड को AifQueryTypeAttribute एट्रिब्यूट से डेकोरेट किया जाना चाहिए, जैसे कि (इस उदाहरण में मैंने SalesUpdate क्वेरी का इस्तेमाल किया है, लेकिन आप इसे किसी भी AOT क्वेरी से बदल सकते हैं):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

अगर आप चाहते हैं कि क्वेरी कंट्रोलर क्लास से तय हो, तो आप एक खाली स्ट्रिंग का भी इस्तेमाल कर सकते हैं। उस मामले में, आपको कुछ हेल्पर मेथड भी इम्प्लीमेंट करने होंगे (जिन्हें आपको शायद अपनी सुविधा के लिए तब भी इम्प्लीमेंट करना चाहिए जब आपको क्वेरी को एक्सेस करने की ज़रूरत हो):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

अगर आपको क्वेरी को इनिशियलाइज़ करने की ज़रूरत है (जैसे, रेंज जोड़ना), तो आपको initQuery मेथड इम्प्लीमेंट करना चाहिए:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

आपको यह पक्का करना होगा कि आप इस मेथड को कंट्रोलर क्लास से कॉल करें।

अग्रिम पठन

यदि आपको यह पोस्ट पसंद आई हो, तो आपको ये सुझाव भी पसंद आ सकते हैं:


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

मिकेल क्रिस्टेंसन

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

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