Miklix

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

Δημοσιεύθηκε: 16 Φεβρουαρίου 2025 στις 12:48:22 π.μ. 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- itemIdlineNum" αν έκανα).

Για να χρησιμοποιήσετε πραγματικά μια μακροεντολή ως συμβολοσειρά μορφοποίησης με 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

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

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

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