Dynamics AX 2012 में SysOperation डेटा कॉन्ट्रैक्ट क्लास में क्वेरी का उपयोग करना
प्रकाशित: 16 फ़रवरी 2025 को 1:23:14 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;
}
यदि आप चाहते हैं कि क्वेरी को कंट्रोलर क्लास द्वारा तय किया जाए, तो आप खाली स्ट्रिंग का भी उपयोग कर सकते हैं। उस स्थिति में, आपको कुछ सहायक विधियों को भी लागू करना होगा (जिन्हें आपको क्वेरी तक पहुँचने की आवश्यकता होने पर अपनी सुविधा के लिए वैसे भी लागू करना चाहिए):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
यदि आपको क्वेरी आरंभ करने की आवश्यकता है (उदाहरण के लिए, श्रेणियाँ जोड़ना), तो आपको initQuery विधि लागू करनी चाहिए:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
आपको यह सुनिश्चित करना होगा कि आप इस विधि को नियंत्रक वर्ग से कॉल करें।