डायनामिक्स एएक्स 2012 मा एक्स ++ कोडबाट गणनको तत्वहरूमा कसरी पुनरावृत्ति गर्ने
प्रकाशित: २०२५ फेब्रुअरी १५: २३:१६:०७ UTC
पछिल्लो पटक अद्यावधिक गरिएको: २०२६ जनवरी १२: ०८:४२:२८ UTC
यस लेखले X++ कोड उदाहरण सहित Dynamics AX २०१२ मा आधार enum को तत्वहरूलाई कसरी गणना गर्ने र लुप गर्ने भनेर वर्णन गर्दछ।
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
यस पोस्टमा भएको जानकारी Dynamics AX २०१२ R3 मा आधारित छ। यो अन्य संस्करणहरूको लागि मान्य हुन पनि सक्छ वा नहुन पनि सक्छ।
म हालसालै एउटा फारम सिर्जना गर्दै थिएँ जसमा एनममा प्रत्येक तत्वको लागि मान प्रदर्शन गर्न आवश्यक थियो। म्यानुअल रूपमा फिल्डहरू सिर्जना गर्नुको सट्टा (र यदि एनम कहिल्यै परिमार्जन गरिएको छ भने फारम कायम राख्न आवश्यक छ), मैले यसलाई गतिशील रूपमा कार्यान्वयन गर्ने निर्णय गरें ताकि यसले रन टाइममा डिजाइनमा फिल्डहरू स्वचालित रूपमा थप्नेछ।
यद्यपि, मैले चाँडै नै पत्ता लगाएँ कि वास्तवमा enum मा मानहरू दोहोर्याउनु, जबकि तपाईंलाई कसरी थाहा भएपछि पर्याप्त सजिलो छ, अलि भ्रमित छ।
तपाईंले स्पष्ट रूपमा DictEnum कक्षाबाट सुरु गर्नुपर्छ। तपाईंले देख्नुहुनेछ, यस कक्षामा अनुक्रमणिका र मान दुवैबाट नाम र लेबल जस्ता जानकारी प्राप्त गर्ने धेरै विधिहरू छन्।
अनुक्रमणिका र मान बीचको भिन्नता यो हो कि अनुक्रमणिका भनेको एनममा रहेको तत्वको संख्या हो, यदि एनमका तत्वहरूलाई शून्यबाट सुरु गरेर क्रमिक रूपमा अंकित गरिएको थियो भने, मान भनेको तत्वको वास्तविक "मान" गुण हो। धेरैजसो एनमहरूमा ० बाट क्रमिक रूपमा अंकित गरिएको मानहरू भएको हुनाले, तत्वको अनुक्रमणिका र मान प्रायः समान हुनेछ, तर निश्चित रूपमा सधैं होइन।
तर तपाईंलाई कसरी थाहा हुन्छ कि enum मा कुन मानहरू छन्? यो त्यहिँबाट भ्रमित हुन्छ। DictEnum वर्गमा values() नामक विधि छ। तपाईंले यो विधिले enum को मानहरूको सूची फिर्ता गर्ने अपेक्षा गर्न सक्नुहुन्छ, तर त्यो स्पष्ट रूपमा धेरै सजिलो हुनेछ, त्यसैले यसको सट्टा यसले enum मा समावेश मानहरूको संख्या फिर्ता गर्छ। यद्यपि, मानहरूको संख्याको वास्तविक मानहरूसँग कुनै सम्बन्ध छैन, त्यसैले तपाईंले यो संख्यालाई अनुक्रमणिका-आधारित विधिहरू कल गर्न आधारको रूपमा प्रयोग गर्न आवश्यक छ, मान-आधारित विधिहरू होइन।
यदि उनीहरूले यो विधिलाई index() नाम दिएको भए, यो कम भ्रमित हुने थियो ;-)
यो पनि ध्यानमा राख्नुहोस् कि enum मानहरू (र स्पष्ट रूपमा यी "अनुक्रमणिकाहरू") ० बाट सुरु हुन्छन्, X++ मा array र कन्टेनर अनुक्रमणिकाहरू भन्दा फरक, जुन १ बाट सुरु हुन्छन्, त्यसैले enum मा तत्वहरू लुप गर्न तपाईंले यस्तो केहि गर्न सक्नुहुन्छ:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
यसले enum मा रहेको प्रत्येक तत्वको प्रतीक र लेबललाई infolog मा आउटपुट गर्नेछ।
थप पढाइ
यदि तपाईंलाई यो पोस्ट मन पर्यो भने, तपाईंलाई यी सुझावहरू पनि मन पर्न सक्छन्:
- Dynamics AX २०१२ मा SysOperation डेटा अनुबंध कक्षामा क्वेरी प्रयोग गर्दै
- डाइनामिक्स एएक्स २०१२ मा डेटा () र बुफ २ बुफ () बीचको भिन्नता
- Dynamics AX २०१२ मा कानूनी संस्था (कम्पनी खाताहरू) मेटाउनुहोस्
