Miklix

როგორ გავამეოროთ 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-ში ელემენტების ციკლისთვის შეგიძლიათ გააკეთოთ შემდეგი:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

ეს enum-ში თითოეული ელემენტის სიმბოლოს და იარლიყს ინფოლოგში გამოიტანს.

დამატებითი საკითხავი

თუ ეს პოსტი მოგეწონათ, შეიძლება ეს რჩევებიც მოგეწონოთ:


გააზიარე Bluesky-ზეგააზიარეთ Facebook-ზეგააზიარეთ LinkedIn-ზეგააზიარეთ Tumblr-ზეგააზიარეთ X-ზეგააზიარეთ LinkedIn-ზეPinterest-ზე დამაგრება

მიკელ კრისტენსენი

ავტორის შესახებ

მიკელ კრისტენსენი
მაიკლ არის miklix.com-ის შემქმნელი და მფლობელი. მას აქვს 20 წელზე მეტი გამოცდილება, როგორც პროფესიონალი კომპიუტერული პროგრამისტი/პროგრამული უზრუნველყოფის შემქმნელი და ამჟამად მუშაობს სრულ განაკვეთზე დიდ ევროპულ IT კორპორაციაში. როდესაც ბლოგს არ წერს, თავისუფალ დროს ატარებს ინტერესების, ჰობიებისა და აქტივობების უზარმაზარ სპექტრზე, რაც შეიძლება გარკვეულწილად აისახოს ამ ვებსაიტზე გაშუქებულ თემებზე.