டைனமிக்ஸ் AX 2012 இல் X++ குறியீட்டிலிருந்து ஒரு Enum இன் கூறுகளை எவ்வாறு மறுபரிசீலனை செய்வது
வெளியிடப்பட்டது: 15 பிப்ரவரி, 2025 அன்று பிற்பகல் 11:11:20 UTC
இந்த கட்டுரை ஒரு X++ குறியீடு உதாரணம் உட்பட Dynamics AX 2012 இல் ஒரு அடிப்படை enum இன் கூறுகளை எவ்வாறு கணக்கிடுவது மற்றும் லூப் செய்வது என்பதை விளக்குகிறது.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
இந்த இடுகையில் உள்ள தகவல்கள் Dynamics AX 2012 R3 ஐ அடிப்படையாகக் கொண்டவை. இது மற்ற பதிப்புகளுக்கு செல்லுபடியாகலாம் அல்லது செல்லுபடியாகாமல் இருக்கலாம்.
நான் சமீபத்தில் ஒரு படிவத்தை உருவாக்கிக் கொண்டிருந்தேன், அது ஒரு enum இல் உள்ள ஒவ்வொரு உறுப்புக்கும் ஒரு மதிப்பைக் காட்ட வேண்டும். புலங்களை கைமுறையாக உருவாக்குவதை விட (பின்னர் எனம் எப்போதாவது மாற்றியமைக்கப்பட்டால் படிவத்தை பராமரிக்க வேண்டும்), அதை மாறும் வகையில் செயல்படுத்த முடிவு செய்தேன், இதனால் அது இயக்க நேரத்தில் வடிவமைப்பில் புலங்களை தானாகவே சேர்க்கும்.
இருப்பினும், உண்மையில் ஒரு எனுமில் உள்ள மதிப்புகளை மீண்டும் செய்வது, எப்படி என்று உங்களுக்குத் தெரிந்தவுடன் போதுமானதாக இருந்தாலும், சற்று குழப்பமானது என்பதை நான் விரைவில் கண்டுபிடித்தேன்.
நீங்கள் வெளிப்படையாக DictEnum வகுப்புடன் தொடங்க வேண்டும். நீங்கள் காண்பது போல, இந்த வகுப்பில் பெயர் மற்றும் லேபிள் போன்ற தகவல்களைப் பெறுவதற்கு பல முறைகள் உள்ளன.
குறியீட்டிற்கும் மதிப்பிற்கும் இடையிலான வேறுபாடு என்னவென்றால், ஈனத்தின் உறுப்புகள் பூச்சியத்திலிருந்து தொடங்கி வரிசையாக எண்ணிடப்பட்டால், குறியீட்டு என்பது ஈனத்தில் உள்ள ஒரு தனிமத்தின் எண்ணாகும், அதே நேரத்தில் மதிப்பு என்பது தனிமத்தின் உண்மையான "மதிப்பு" பண்பாகும். பெரும்பாலான ஈனம்கள் 0 இலிருந்து வரிசையாக எண்ணிடப்பட்ட மதிப்புகளைக் கொண்டிருப்பதால், ஒரு தனிமத்தின் குறியீட்டு மற்றும் மதிப்பு பெரும்பாலும் ஒரே மாதிரியாக இருக்கும், ஆனால் நிச்சயமாக எப்போதும் இருக்காது.
ஆனால் ஒரு ஈனத்திற்கு எந்த மதிப்புகள் உள்ளன என்பதை நீங்கள் எவ்வாறு அறிவீர்கள்? இங்குதான் குழப்பம் ஏற்படுகிறது. DictEnum class, மதிப்புகள் () எனப்படும் ஒரு முறையைக் கொண்டுள்ளது. இந்த முறை enum இன் மதிப்புகளின் பட்டியலைத் தரும் என்று நீங்கள் எதிர்பார்க்கலாம், ஆனால் அது வெளிப்படையாக மிகவும் எளிதானது, எனவே அதற்கு பதிலாக இது enum கொண்டிருக்கும் மதிப்புகளின் எண்ணிக்கையைத் தருகிறது. இருப்பினும், மதிப்புகளின் எண்ணிக்கைக்கு உண்மையான மதிப்புகளுடன் எந்த தொடர்பும் இல்லை, எனவே குறியீட்டு அடிப்படையிலான முறைகளை அழைப்பதற்கான அடிப்படையாக இந்த எண்ணை நீங்கள் பயன்படுத்த வேண்டும், மதிப்பு அடிப்படையிலானவை அல்ல.
அதற்கு பதிலாக இந்த முறைக்கு குறியீடுகள்() என்று பெயரிட்டிருந்தால் குழப்பம் குறைவாக இருந்திருக்கும் ;-)
ஈனம் மதிப்புகள் (மற்றும் வெளிப்படையாக இந்த "குறியீடுகள்") 0 இல் தொடங்குகின்றன என்பதை நினைவில் கொள்ளுங்கள், எக்ஸ் ++ இல் உள்ள வரிசை மற்றும் கொள்கலன் குறியீடுகளைப் போலல்லாமல், அவை 1 இல் தொடங்குகின்றன, எனவே ஒரு ஈனத்தில் உள்ள உறுப்புகளின் மீது சுழல நீங்கள் இதைப் போன்ற ஒன்றைச் செய்யலாம்:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
இது enum இல் உள்ள ஒவ்வொரு உறுப்பின் குறியீடு மற்றும் லேபிளை இன்ஃபோலாக்கிற்கு வெளியிடும்.