ડાયનેમિક્સ AX 2012 માં X++ કોડમાંથી એનમના તત્વો પર કેવી રીતે પુનરાવર્તિત કરવું
પ્રકાશિત: 15 ફેબ્રુઆરી, 2025 એ 11:15:38 PM UTC વાગ્યે
છેલ્લે અપડેટ કરેલ: 12 જાન્યુઆરી, 2026 એ 08:42:25 AM UTC વાગ્યે
આ લેખ સમજાવે છે કે ડાયનેમિક્સ AX 2012 માં બેઝ એનમના તત્વોની ગણતરી અને લૂપ કેવી રીતે કરવી, જેમાં X++ કોડ ઉદાહરણનો સમાવેશ થાય છે.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
આ પોસ્ટમાં આપેલી માહિતી ડાયનેમિક્સ AX 2012 R3 પર આધારિત છે. તે અન્ય સંસ્કરણો માટે માન્ય હોઈ શકે છે અથવા ન પણ હોઈ શકે.
હું તાજેતરમાં એક ફોર્મ બનાવી રહ્યો હતો જેમાં enum માં દરેક એલિમેન્ટ માટે મૂલ્ય દર્શાવવાની જરૂર હતી. ફીલ્ડ્સ મેન્યુઅલી બનાવવાને બદલે (અને પછી જો enum ક્યારેય સંશોધિત થાય તો ફોર્મ જાળવવાની જરૂર), મેં તેને ગતિશીલ રીતે અમલમાં મૂકવાનું નક્કી કર્યું જેથી તે રન ટાઈમ પર ડિઝાઇનમાં આપમેળે ફીલ્ડ્સ ઉમેરે.
જોકે, મને ટૂંક સમયમાં જ ખબર પડી કે ખરેખર enum માં મૂલ્યો પર પુનરાવર્તન કરવું, જ્યારે તમે જાણો છો કે કેવી રીતે કરવું તે પૂરતું સરળ છે, તે થોડું ગૂંચવણભર્યું છે.
તમારે સ્પષ્ટપણે DictEnum ક્લાસથી શરૂઆત કરવાની જરૂર છે. જેમ તમે જોશો, આ ક્લાસમાં ઇન્ડેક્સ અને મૂલ્ય બંનેમાંથી નામ અને લેબલ જેવી માહિતી મેળવવા માટે ઘણી પદ્ધતિઓ છે.
ઇન્ડેક્સ અને વેલ્યુ વચ્ચેનો તફાવત એ છે કે ઇન્ડેક્સ એ એનમમાં એક એલિમેન્ટનો નંબર છે, જો એનમના એલિમેન્ટને શૂન્યથી શરૂ કરીને ક્રમિક રીતે ક્રમાંકિત કરવામાં આવ્યા હોય, જ્યારે વેલ્યુ એ એલિમેન્ટનો વાસ્તવિક "મૂલ્ય" ગુણધર્મ છે. મોટાભાગના એનમમાં 0 થી ક્રમિક રીતે ક્રમાંકિત મૂલ્યો હોવાથી, એલિમેન્ટનો ઇન્ડેક્સ અને મૂલ્ય ઘણીવાર સમાન હશે, પરંતુ ચોક્કસપણે હંમેશા નહીં.
પણ તમે કેવી રીતે જાણો છો કે enum માં કયા મૂલ્યો છે? અહીં વાત ગૂંચવણમાં મૂકે છે. DictEnum ક્લાસમાં values() નામની એક પદ્ધતિ છે. તમે આ પદ્ધતિથી enum ના મૂલ્યોની યાદી પરત કરવાની અપેક્ષા રાખી શકો છો, પરંતુ તે સ્પષ્ટપણે ખૂબ સરળ હશે, તેથી તે enum માં રહેલા મૂલ્યોની સંખ્યા પરત કરે છે. જો કે, મૂલ્યોની સંખ્યાનો વાસ્તવિક મૂલ્યો સાથે કોઈ સંબંધ નથી, તેથી તમારે આ સંખ્યાનો ઉપયોગ ઇન્ડેક્સ-આધારિત પદ્ધતિઓને કૉલ કરવા માટે આધાર તરીકે કરવાની જરૂર છે, મૂલ્ય-આધારિત પદ્ધતિઓને નહીં.
જો તેઓએ આ પદ્ધતિને index() નામ આપ્યું હોત, તો તે ઓછી ગૂંચવણભરી હોત ;-)
એ પણ ધ્યાનમાં રાખો કે enum મૂલ્યો (અને દેખીતી રીતે આ "ઇન્ડેક્સ") 0 થી શરૂ થાય છે, X++ માં એરે અને કન્ટેનર ઇન્ડેક્સ 1 થી શરૂ થાય છે તેનાથી વિપરીત, તેથી enum માં તત્વોને લૂપ કરવા માટે તમે કંઈક આ રીતે કરી શકો છો:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
આ enum માં દરેક એલિમેન્ટના સિમ્બોલ અને લેબલને ઇન્ફોલોગમાં આઉટપુટ કરશે.
વધુ વાંચન
જો તમને આ પોસ્ટ ગમી હોય, તો તમને આ સૂચનો પણ ગમશે:
- ડાયનેમિક્સ એએક્સ 2012 માં SysOperation Data કોન્ટ્રાક્ટ ક્લાસમાં ક્વેરીનો ઉપયોગ કરીને
- ડાયનેમિક્સ એએક્સ 2012 માં કયા પેટા વર્ગને પ્રારંભ કરવો તે શોધવા માટે SysExtension ફ્રેમવર્કનો ઉપયોગ કરીને
- ડાયનેમિક્સ AX 2012 માં ડેટા () અને buf2Buf() વચ્ચેનો તફાવત
