ਡਾਇਨਾਮਿਕਸ AX 2012 ਵਿੱਚ X++ ਕੋਡ ਤੋਂ ਇੱਕ Enum ਦੇ ਤੱਤਾਂ ਨੂੰ ਕਿਵੇਂ ਦੁਹਰਾਇਆ ਜਾਵੇ
ਪ੍ਰਕਾਸ਼ਿਤ: 19 ਮਾਰਚ 2025 9:32:55 ਬਾ.ਦੁ. UTC
ਇਹ ਲੇਖ ਦੱਸਦਾ ਹੈ ਕਿ ਡਾਇਨਾਮਿਕਸ AX 2012 ਵਿੱਚ ਇੱਕ ਬੇਸ ਐਨਮ ਦੇ ਤੱਤਾਂ ਨੂੰ ਕਿਵੇਂ ਗਿਣਨਾ ਹੈ ਅਤੇ ਲੂਪ ਕਰਨਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਇੱਕ X++ ਕੋਡ ਉਦਾਹਰਣ ਵੀ ਸ਼ਾਮਲ ਹੈ।
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
ਇਸ ਪੋਸਟ ਵਿਚ ਦਿੱਤੀ ਜਾਣਕਾਰੀ ਡਾਈਨਾਮਿਕਸ ਏਐਕਸ 2012 ਆਰ3 'ਤੇ ਆਧਾਰਿਤ ਹੈ। ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜੇ ਵਰਜਨ ਲਈ ਸਹੀ ਨਾ ਹੋਵੇ।
ਮੈਂ ਹਾਲ ਹੀ ਵਿੱਚ ਇੱਕ ਫਾਰਮ ਬਣਾਉਂਦਾ ਸੀ ਜਿਸ ਨੂੰ ਹਰ ਐਨਮ ਦੇ ਤੱਤ ਲਈ ਇੱਕ ਮੁੱਲ ਦਰਸਾਉਣਾ ਸੀ। ਫੀਲਡਸ ਨੂੰ ਮੈਨੁਅਲੀ ਬਣਾਉਣ ਦੀ ਬਜਾਏ (ਅਤੇ ਫਿਰ ਜੇ ਐਨਮ ਵਿਚ ਕਦੇ ਵੀ ਤਬਦੀਲੀ ਆਏ ਤਾਂ ਫਾਰਮ ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਜਰੂਰਤ ਹੋਵੇ), ਮੈਂ ਇਸ ਨੂੰ ਡਾਇਨਾਮਿਕ ਤਰੀਕੇ ਨਾਲ ਲਾਗੂ ਕਰਨ ਦਾ ਫੈਸਲਾ ਕੀਤਾ ਤਾਂ ਜੋ ਇਹ ਡਿਜ਼ਾਈਨ ਵਿੱਚ ਰਨ ਟਾਈਮ 'ਤੇ ਫੀਲਡਸ ਨੂੰ ਆਪਣੇ ਆਪ ਸ਼ਾਮਲ ਕਰ ਲਵੇ।
ਹਾਲਾਂਕਿ, ਮੈਨੂੰ ਜਲਦ ਹੀ ਇਹ ਪਤਾ ਲੱਗਾ ਕਿ ਐਨਮ ਵਿਚ ਮੁੱਲਾਂ 'ਤੇ ਇਟਰੇਟ ਕਰਨਾ, ਜਦੋਂ ਤੁਸੀਂ ਇਹ ਜਾਣ ਲੈਂਦੇ ਹੋ ਕਿ ਕਿਵੇਂ, ਕੁਝ ਹਦ ਤੱਕ ਕਨਫਿਊਜ਼ਿੰਗ ਹੁੰਦਾ ਹੈ।
ਤੁਹਾਨੂੰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ DictEnum ਕਲਾਸ ਨਾਲ ਸ਼ੁਰੂ ਕਰਨਾ ਪਵੇਗਾ। ਜਿਵੇਂ ਤੁਸੀਂ ਦੇਖੋਂਗੇ, ਇਸ ਕਲਾਸ ਵਿੱਚ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਕਈ ਢੰਗ ਹਨ, ਜਿਵੇਂ ਨਾਮ ਅਤੇ ਲੇਬਲ ਨੂੰ ਇੰਡੈਕਸ ਅਤੇ ਮੁੱਲ ਦੋਹਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ।
ਇੰਡੈਕਸ ਅਤੇ ਮੁੱਲ ਵਿਚ ਅੰਤਰ ਇਹ ਹੈ ਕਿ ਇੰਡੈਕਸ ਇੱਕ ਤੱਤ ਦਾ ਨੰਬਰ ਹੈ ਐਨਮ ਵਿੱਚ, ਜੇਕਰ ਐਨਮ ਦੇ ਤੱਤ ਜ਼ੀਰੋ ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹੋਏ ਕ੍ਰਮਵਾਰ ਨੰਬਰਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, ਜਦਕਿ ਮੁੱਲ ਉਸ ਤੱਤ ਦੀ ਅਸਲ "ਮੁੱਲ" ਸੰਪਤੀ ਹੈ। ਜਿਵੇਂ ਕਿ ਜ਼ਿਆਦਾਤਰ ਐਨਮ ਦੇ ਮੁੱਲ ਕ੍ਰਮਵਾਰ 0 ਤੋਂ ਨੰਬਰਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, ਇਸ ਲਈ ਇੱਕ ਤੱਤ ਦਾ ਇੰਡੈਕਸ ਅਤੇ ਮੁੱਲ ਅਕਸਰ ਇਕੱਠੇ ਹੁੰਦੇ ਹਨ, ਪਰ ਬਿਲਕੁਲ ਹਮੇਸ਼ਾ ਨਹੀਂ।
ਪਰ ਤੁਸੀਂ ਕਿਵੇਂ ਜਾਣੋਗੇ ਕਿ ਕਿਸ ਕਿਸਮ ਦੇ ਮੁੱਲ ਐਨਮ ਵਿੱਚ ਹਨ? ਇੱਥੇ ਇਹ ਕੁਝ ਕਨਫਿਊਜ਼ਿੰਗ ਹੋ ਜਾਂਦਾ ਹੈ। DictEnum ਕਲਾਸ ਵਿੱਚ ਇੱਕ ਢੰਗ ਹੈ ਜਿਸਨੂੰ values() ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਤੁਸੀਂ ਇਸ ਢੰਗ ਤੋਂ ਉਮੀਦ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਇਹ ਐਨਮ ਦੇ ਮੁੱਲਾਂ ਦੀ ਸੂਚੀ ਵਾਪਸ ਕਰੇਗਾ, ਪਰ ਇਹ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਬਹੁਤ ਆਸਾਨ ਹੁੰਦਾ, ਇਸ ਲਈ ਇਸ ਦੇ ਬਦਲੇ ਇਹ ਐਨਮ ਵਿੱਚ ਮੌਜੂਦ ਮੁੱਲਾਂ ਦੀ ਸੰਖਿਆ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਮੁੱਲਾਂ ਦੀ ਸੰਖਿਆ ਦਾ ਅਸਲ ਮੁੱਲਾਂ ਨਾਲ ਕੋਈ ਸੰਬੰਧ ਨਹੀਂ ਹੈ, ਇਸ ਲਈ ਤੁਹਾਨੂੰ ਇਸ ਸੰਖਿਆ ਨੂੰ ਇੰਡੈਕਸ-ਅਧਾਰਿਤ ਢੰਗ ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਬੇਸਿਕ ਸਮਝਣਾ ਪਵੇਗਾ, ਨਾ ਕਿ ਮੁੱਲ-ਅਧਾਰਿਤ ਢੰਗ ਨੂੰ।
ਜੇਕਰ ਉਨ੍ਹਾਂ ਨੇ ਇਸ ਢੰਗ ਨੂੰ indexes() ਨਾਮ ਨਹੀਂ ਦਿੱਤਾ ਹੁੰਦਾ, ਤਾਂ ਇਹ ਘੱਟ ਕਨਫਿਊਜ਼ਿੰਗ ਹੁੰਦਾ ;-)
ਇਹ ਵੀ ਧਿਆਨ ਵਿੱਚ ਰੱਖੋ ਕਿ ਐਨਮ ਮੁੱਲ (ਅਤੇ ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ "ਇੰਡੈਕਸ") 0 ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ ਐਰੇ ਅਤੇ ਕੰਟੇਨਰ ਇੰਡੈਕਸ X++ ਵਿੱਚ 1 ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਐਨਮ ਵਿੱਚ ਤੱਤਾਂ 'ਤੇ ਲੂਪ ਕਰਨ ਲਈ ਤੁਸੀਂ ਇਸ ਤਰ੍ਹਾਂ ਕੁਝ ਕਰ ਸਕਦੇ ਹੋ:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
ਇਹ ਐਨਮ ਵਿੱਚ ਹਰ ਤੱਤ ਦੇ ਚਿੰਨ੍ਹ ਅਤੇ ਲੇਬਲ ਨੂੰ ਇਨਫੋਲਾਗ ਵਿੱਚ ਆਉਟਪੁੱਟ ਕਰੇਗਾ।