Miklix

Μορφοποίηση συμβολοσειρών με Macro και strFmt στο Dynamics AX 2012

Δημοσιεύθηκε: 16 Φεβρουαρίου 2025 στις 12:48:22 π.μ. UTC
Τελευταία ενημέρωση: 12 Ιανουαρίου 2026 στις 8:44:23 π.μ. UTC

Αυτό το άρθρο περιγράφει κάποια ιδιόμορφη συμπεριφορά στο Dynamics AX 2012 κατά τη χρήση μιας μακροεντολής ως συμβολοσειράς μορφοποίησης στο strFmt, καθώς και παραδείγματα για το πώς να την αντιμετωπίσετε.


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

String Formatting with Macro and strFmt in Dynamics AX 2012

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

Πρόσφατα αντιμετώπισα ένα πρόβλημα με τη συνάρτηση strFmt που με μπέρδεψε λίγο. Το πιο περίεργο ήταν ότι, κατά κάποια περίεργη σύμπτωση, δεν την είχα ξανασυναντήσει στα πολλά χρόνια που εργάζομαι ως προγραμματιστής Axapta/Dynamics AX.

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

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

Βασικά, κάτι σαν αυτό

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

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

Κάτι σαν αυτό:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

Θα λειτουργήσει, αλλά πιθανώς όχι με τον τρόπο που θέλετε. Αντί να εμφανίζει τις τιμές των τριών μεταβλητών, θα εμφανίζει τα ονόματα των μεταβλητών, σε αυτήν την περίπτωση "salesId-itemId-lineNum". (Παρατηρήστε ότι δεν έβαλα κενά μετά τα κόμματα κατά τη διαβίβαση παραμέτρων στη μακροεντολή, όπως συνήθως κάνω στις κλήσεις μεθόδων. Αυτό συμβαίνει επειδή η μακροεντολή θα χρησιμοποιήσει και τέτοια κενά, επομένως η έξοδος θα ήταν "salesId-itemId-lineNum" αν το έκανα).

Για να χρησιμοποιήσετε μια μακροεντολή ως συμβολοσειρά μορφοποίησης με strFmt, πρέπει να διαφύγετε των συμβόλων ποσοστού με ανάστροφες καθέτους, ως εξής:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Αυτό θα λειτουργήσει σαν να είχατε παράσχει απευθείας τη συμβολοσειρά μορφοποίησης.

Αυτή η μικρή εργασία παρουσιάζει τα παρακάτω παραδείγματα:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}

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

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


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

Mikkel Christensen

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

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