डायनेमिक्स AX 2012 में X++ कोड से Enum के तत्वों पर पुनरावृति कैसे करें
प्रकाशित: 15 फ़रवरी 2025 को 11:11:07 pm UTC बजे
आखरी अपडेट: 12 जनवरी 2026 को 8:42:09 am UTC बजे
यह आर्टिकल बताता है कि Dynamics AX 2012 में बेस एनम के एलिमेंट्स को कैसे एन्यूमरेट और लूप किया जाए, जिसमें X++ कोड का उदाहरण भी शामिल है।
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
इस पोस्ट में दी गई जानकारी Dynamics AX 2012 R3 पर आधारित है। यह दूसरे वर्शन के लिए वैलिड हो भी सकती है और नहीं भी।
मैं हाल ही में एक फ़ॉर्म बना रहा था जिसमें एनम में हर एलिमेंट के लिए एक वैल्यू दिखानी थी। फ़ील्ड्स को मैन्युअली बनाने के बजाय (और फिर अगर एनम में कभी बदलाव होता है तो फ़ॉर्म को मेंटेन करने की ज़रूरत नहीं पड़ती), मैंने इसे डायनामिकली इम्प्लीमेंट करने का फ़ैसला किया ताकि यह रन टाइम पर डिज़ाइन में फ़ील्ड्स को ऑटोमैटिकली जोड़ दे।
लेकिन, मुझे जल्द ही पता चला कि असल में एक enum में वैल्यूज़ को इटरेट करना, एक बार पता चल जाने पर काफी आसान तो है, लेकिन थोड़ा कन्फ्यूजिंग है।
आपको ज़ाहिर है DictEnum क्लास से शुरू करना होगा। जैसा कि आप देखेंगे, इस क्लास में इंडेक्स और वैल्यू दोनों से नाम और लेबल जैसी जानकारी पाने के कई तरीके हैं।
इंडेक्स और वैल्यू में फ़र्क यह है कि इंडेक्स एनम में एलिमेंट का नंबर होता है, अगर एनम के एलिमेंट को ज़ीरो से शुरू करके एक के बाद एक नंबर दिया गया हो, जबकि वैल्यू एलिमेंट की असली "वैल्यू" प्रॉपर्टी होती है। क्योंकि ज़्यादातर एनम में वैल्यू 0 से एक के बाद एक नंबर पर होती हैं, इसलिए एलिमेंट का इंडेक्स और वैल्यू अक्सर एक ही होंगे, लेकिन हमेशा नहीं।
लेकिन आपको कैसे पता चलेगा कि किसी एनम में कौन सी वैल्यू हैं? यहीं पर बात कन्फ्यूजिंग हो जाती है। DictEnum क्लास में values() नाम का एक मेथड होता है। आप उम्मीद कर सकते हैं कि यह मेथड एनम की वैल्यू की एक लिस्ट रिटर्न करेगा, लेकिन यह साफ तौर पर बहुत आसान होगा, इसलिए इसके बजाय यह एनम में मौजूद वैल्यू की संख्या रिटर्न करता है। हालांकि, वैल्यू की संख्या का असली वैल्यू से कोई लेना-देना नहीं है, इसलिए आपको इंडेक्स-बेस्ड मेथड को कॉल करने के लिए इस संख्या का इस्तेमाल करना होगा, न कि वैल्यू-बेस्ड मेथड को।
काश उन्होंने इस मेथड का नाम indexes() रखा होता, तो यह कम कन्फ्यूजिंग होता ;-)
यह भी ध्यान रखें कि enum वैल्यू (और ज़ाहिर है ये "इंडेक्स") 0 से शुरू होते हैं, X++ में ऐरे और कंटेनर इंडेक्स के उलट, जो 1 से शुरू होते हैं, इसलिए enum में एलिमेंट्स पर लूप करने के लिए आप कुछ ऐसा कर सकते हैं:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
यह इनम में हर एलिमेंट का सिंबल और लेबल इन्फोलॉग में आउटपुट करेगा।
अग्रिम पठन
यदि आपको यह पोस्ट पसंद आई हो, तो आपको ये सुझाव भी पसंद आ सकते हैं:
- Dynamics AX 2012 में data() और buf2Buf() के बीच अंतर
- Dynamics AX 2012 में SysOperation डेटा कॉन्ट्रैक्ट क्लास में क्वेरी का उपयोग करना
- डायनेमिक्स AX 2012 सिस्टमऑपरेशन फ्रेमवर्क त्वरित अवलोकन
