როგორ გავამეოროთ Enum ელემენტები X++ კოდიდან Dynamics AX 2012-ში
გამოქვეყნებულია: 15 თებერვალი, 2025, 23:16:04 UTC
ამ სტატიაში ახსნილია, თუ როგორ უნდა ჩამოთვლის და მარყუჟის ელემენტების ბაზის ჩამოთვლის Dynamics AX 2012, მათ შორის X++ კოდი მაგალითი.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
ამ პოსტში ინფორმაცია Dynamics AX 2012 R3-ს ეფუძნება. ეს შეიძლება იყოს ან არ იყოს მოქმედი სხვა ვერსიებისთვის.
მე ცოტა ხნის წინ შევქმენი ფორმა, რომელიც საჭიროა თითოეული ელემენტისთვის მნიშვნელობის საჩვენებლად. იმის ნაცვლად, რომ ხელით შევქმნათ ველები (და შემდეგ საჭიროა ფორმის შენარჩუნება, თუ ენა ოდესმე შეცვლილია), მე გადავწყვიტე მისი დინამიურად განხორციელება ისე, რომ იგი ავტომატურად დაამატებდა ველებს დიზაინს გაშვების დროს.
თუმცა, მალევე აღმოვაჩინე, რომ რეალურად მნიშვნელობების გადამეტება, ხოლო საკმარისად მარტივია, როდესაც იცით როგორ, ცოტა დამაბნეველია.
თქვენ აშკარად უნდა დაიწყოთ DictEnum კლასით. როგორც ხედავთ, ამ კლასს აქვს რამდენიმე მეთოდი ინფორმაციის მისაღებად, როგორიცაა სახელი და ეტიკეტი როგორც ინდექსიდან, ასევე ღირებულებიდან.
ინდექსსა და მნიშვნელობას შორის განსხვავება ისაა, რომ ინდექსი არის ელემენტის რიცხვი რიცხვში, თუ მონათეს ელემენტები დანომრილი იყო თანმიმდევრულად ნულიდან, ხოლო მნიშვნელობა არის ელემენტის რეალური "ღირებულების" თვისება. იმის გამო, რომ ჩამოთვლების უმეტესობას აქვს მნიშვნელობები თანმიმდევრულად 0-დან, ელემენტის ინდექსი და მნიშვნელობა ხშირად იგივე იქნება, მაგრამ, რა თქმა უნდა, ყოველთვის არ არის.
მაგრამ როგორ იცით, რომელი ფასეულობები აქვს ნურს? ეს არის ის, სადაც ის დამაბნეველია. DictEnum კლასს აქვს მეთოდი, რომელსაც ეწოდება ღირებულებები (). თქვენ შეიძლება ელოდოთ, რომ ეს მეთოდი დააბრუნებს ჩამოსასხმელ მნიშვნელობებს, მაგრამ ეს აშკარად ძალიან ადვილი იქნება, ასე რომ, სამაგიეროდ ის უბრუნებს იმ ღირებულებების რაოდენობას , რომელსაც შეიცავს ენა. ამასთან, მნიშვნელობების რაოდენობას არაფერი აქვს საერთო რეალურ მნიშვნელობებთან, ასე რომ თქვენ უნდა გამოიყენოთ ეს რიცხვი, როგორც ინდექსზე დაფუძნებული მეთოდების გამოძახების საფუძველი და არა მნიშვნელობაზე დაფუძნებული.
თუ მხოლოდ მათ დაარქვეს ეს მეთოდის ინდექსები () ამის ნაცვლად, ეს ნაკლებად დამაბნეველი იქნებოდა;-)
ასევე გაითვალისწინეთ, რომ enum ღირებულებები (და, როგორც ჩანს, ეს "ინდექსები") იწყება 0-ზე, განსხვავებით მასივისა და კონტეინერის ინდექსებისგან X++- ში, რომელიც იწყება 1-დან, ასე რომ, რომ ჩამოთვალზე ელემენტების გადაფარვა შეგიძლიათ გააკეთოთ მსგავსი რამ:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
ეს გამოიყვანს თითოეული ელემენტის სიმბოლოს და ეტიკეტს ინფოლოგში.