Miklix

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

Δημοσιεύθηκε: 15 Φεβρουαρίου 2025 στις 11:10:05 μ.μ. UTC
Τελευταία ενημέρωση: 12 Ιανουαρίου 2026 στις 8:41:54 π.μ. 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. Όπως θα δείτε, αυτή η κλάση έχει αρκετές μεθόδους για την απόκτηση πληροφοριών όπως όνομα και ετικέτα τόσο από τον δείκτη όσο και από την τιμή.

Η διαφορά μεταξύ index και value είναι ότι το index είναι ο αριθμός ενός στοιχείου στο enum, εάν τα στοιχεία του enum αριθμήθηκαν διαδοχικά ξεκινώντας από το μηδέν, ενώ το value είναι η πραγματική ιδιότητα "value" του στοιχείου. Καθώς τα περισσότερα enum έχουν τιμές αριθμημένες διαδοχικά από το 0, ο index και η value ενός στοιχείου θα είναι συχνά οι ίδιες, αλλά σίγουρα όχι πάντα.

Αλλά πώς ξέρετε ποιες τιμές έχει μια απαρίθμηση; Εδώ είναι που αρχίζει να μπερδεύεται το θέμα. Η κλάση DictEnum έχει μια μέθοδο που ονομάζεται values(). Μπορεί να περιμένετε ότι αυτή η μέθοδος θα επιστρέψει μια λίστα με τις τιμές της απαρίθμησης, αλλά αυτό προφανώς θα ήταν πολύ εύκολο, οπότε αντ' αυτού επιστρέφει τον αριθμό των τιμών που περιέχει η απαρίθμηση. Ωστόσο, ο αριθμός των τιμών δεν έχει καμία σχέση με τις πραγματικές τιμές, επομένως πρέπει να χρησιμοποιήσετε αυτόν τον αριθμό ως βάση για την κλήση των μεθόδων που βασίζονται σε ευρετήρια, όχι αυτών που βασίζονται σε τιμές.

Μακάρι να είχαν ονομάσει αυτήν τη μέθοδο 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)));
}

Αυτό θα εμφανίσει το σύμβολο και την ετικέτα κάθε στοιχείου στην απαρίθμηση στο infolog.

Περαιτέρω ανάγνωση

Αν σας άρεσε αυτή η ανάρτηση, ίσως σας αρέσουν και αυτές οι προτάσεις:


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

Mikkel Christensen

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

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