როგორ გავამეოროთ Enum ელემენტები X++ კოდიდან Dynamics AX 2012-ში
გამოქვეყნებულია: 15 თებერვალი, 2025, 23:16:04 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:42:26 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-დან თანმიმდევრულად აქვს დანომრილი, ელემენტის ინდექსი და მნიშვნელობა ხშირად ერთნაირი იქნება, მაგრამ რა თქმა უნდა არა ყოველთვის.
მაგრამ როგორ გავიგოთ, რომელი მნიშვნელობები აქვს enum-ს? სწორედ აქ ხდება ყველაფერი დამაბნეველი. DictEnum კლასს აქვს მეთოდი, სახელწოდებით values(). შეიძლება ველოდოთ, რომ ეს მეთოდი დააბრუნებს enum-ის მნიშვნელობების სიას, მაგრამ ეს აშკარად ძალიან მარტივი იქნება, ამიტომ ის აბრუნებს enum-ში შემავალი მნიშვნელობების რაოდენობას. თუმცა, მნიშვნელობების რაოდენობას არაფერი აქვს საერთო რეალურ მნიშვნელობებთან, ამიტომ ეს რიცხვი უნდა გამოიყენოთ ინდექსზე დაფუძნებული მეთოდების გამოძახების საფუძვლად და არა მნიშვნელობებზე დაფუძნებული მეთოდების.
ამ მეთოდს indexes() რომ დაერქვათ, ნაკლებად დამაბნეველი იქნებოდა ;-)
ასევე გაითვალისწინეთ, რომ 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-ში თითოეული ელემენტის სიმბოლოს და იარლიყს ინფოლოგში გამოიტანს.
დამატებითი საკითხავი
თუ ეს პოსტი მოგეწონათ, შეიძლება ეს რჩევებიც მოგეწონოთ:
- SysExtension ჩარჩოს გამოყენებით იმის გასარკვევად, თუ რომელი ქვეკლასი უნდა იყოს მყისიერი Dynamics AX 2012-ში
- მოთხოვნის გამოყენება SysOperation მონაცემთა კონტრაქტის კლასში Dynamics AX 2012-ში
- Dynamics AX 2012 SysOperation Framework სწრაფი მიმოხილვა
