Miklix

डायनेमिक्स 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 में एलिमेंट्स पर लूप करने के लिए आप कुछ ऐसा कर सकते हैं:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

यह इनम में हर एलिमेंट का सिंबल और लेबल इन्फोलॉग में आउटपुट करेगा।

अग्रिम पठन

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


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

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

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

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