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