Miklix

Πώς να επαναλάβετε τα στοιχεία ενός Enum από κώδικα X ++ στο Dynamics AX 2012

Δημοσιεύθηκε: 15 Φεβρουαρίου 2025 στις 11:10:05 μ.μ. UTC

Αυτό το άρθρο εξηγεί τον τρόπο απαρίθμησης και βρόχου πάνω από τα στοιχεία μιας βάσης enum στο Dynamics AX 2012, συμπεριλαμβανομένου ενός παραδείγματος κώδικα X ++.


Αυτή η σελίδα μεταφράστηκε μηχανικά από τα αγγλικά, προκειμένου να είναι προσβάσιμη σε όσο το δυνατόν περισσότερους ανθρώπους. Δυστυχώς, η αυτόματη μετάφραση δεν είναι ακόμη μια τελειοποιημένη τεχνολογία, οπότε μπορεί να προκύψουν λάθη. Αν προτιμάτε, μπορείτε να δείτε την πρωτότυπη αγγλική έκδοση εδώ:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

Οι πληροφορίες σε αυτήν την καταχώρηση βασίζεται στο Dynamics AX 2012 R3. Μπορεί να ισχύει ή να μην ισχύει για άλλες εκδόσεις.

Πρόσφατα δημιούργησα μια φόρμα που έπρεπε να εμφανίζει μια τιμή για κάθε στοιχείο σε ένα enum. Αντί να δημιουργήσω χειροκίνητα τα πεδία (και στη συνέχεια να χρειαστεί να διατηρήσω τη φόρμα εάν το enum τροποποιηθεί ποτέ), αποφάσισα να το υλοποιήσω δυναμικά, ώστε να προσθέτει αυτόματα τα πεδία στο σχέδιο κατά το χρόνο εκτέλεσης.

Ωστόσο, σύντομα ανακάλυψα ότι η επανάληψη των τιμών σε ένα enum, ενώ είναι αρκετά εύκολη μόλις μάθετε πώς, είναι λίγο συγκεχυμένη.

Προφανώς πρέπει να ξεκινήσετε με την κλάση DictEnum. Όπως θα δείτε, αυτή η τάξη έχει διάφορες μεθόδους για τη λήψη πληροφοριών όπως το όνομα και η ετικέτα τόσο από το ευρετήριο όσο και από την τιμή.

Η διαφορά μεταξύ δείκτη και τιμής είναι ότι ο δείκτης είναι ο αριθμός ενός στοιχείου στο enum, εάν τα στοιχεία του enum αριθμήθηκαν διαδοχικά ξεκινώντας από το μηδέν, ενώ η τιμή είναι η πραγματική ιδιότητα "value" του στοιχείου. Καθώς τα περισσότερα enums έχουν τιμές που αριθμούνται διαδοχικά από το 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 στο infolog.

Μοιραστείτε το στο BlueskyΚοινή χρήση στο FacebookΚοινοποίηση στο LinkedInΜοιραστείτε το στο TumblrΚοινοποίηση στο XΚοινοποίηση στο LinkedInΚαρφιτσώστε στο Pinterest

Μίκελ Μπανγκ Κρίστενσεν

Σχετικά με τον συγγραφέα

Μίκελ Μπανγκ Κρίστενσεν
Ο Μιχαήλ είναι ο δημιουργός και ιδιοκτήτης του miklix.com. Έχει πάνω από 20 χρόνια εμπειρίας ως επαγγελματίας προγραμματιστής υπολογιστών/προγραμματιστής λογισμικού και σήμερα εργάζεται με πλήρη απασχόληση σε μια μεγάλη ευρωπαϊκή εταιρεία πληροφορικής. Όταν δεν ασχολείται με το ιστολόγιο, αφιερώνει τον ελεύθερο χρόνο του σε ένα ευρύ φάσμα ενδιαφερόντων, χόμπι και δραστηριοτήτων, τα οποία μπορεί σε κάποιο βαθμό να αντικατοπτρίζονται στην ποικιλία των θεμάτων που καλύπτονται σε αυτόν τον ιστότοπο.