Μορφοποίηση συμβολοσειρών με 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 και απλά δεν λειτούργησε. Αγνόησε εντελώς τις παραμέτρους % και επέστρεψε μόνο το υπόλοιπο της συμβολοσειράς.
Αφού το εξέτασα, ανακάλυψα ότι οι ίδιες οι μακροεντολές μπορούν να χρησιμοποιηθούν για τη μορφοποίηση συμβολοσειρών, κάτι που επίσης δεν γνώριζα. Τέλος πάντων, είναι πάντα καλό να μαθαίνεις κάτι καινούργιο, αλλά παρόλα αυτά με εξέπληξε πολύ το γεγονός ότι δεν το είχα ξανασυναντήσει.
Βασικά, κάτι σαν αυτό
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Δεν θα λειτουργήσει επειδή τα σύμβολα % στη μακροεντολή χρησιμοποιούνται στην πραγματικότητα για τις δικές της λειτουργίες μορφοποίησης συμβολοσειρών της μακροεντολής. Σε αυτήν την περίπτωση, η συνάρτηση strFmt θα δει τη συμβολοσειρά μορφοποίησης ως "--" και επομένως θα επιστρέψει μόνο αυτό.
Κάτι σαν αυτό:
info(#FormatMacro(salesId,itemId,lineNum));
Θα λειτουργήσει, αλλά πιθανώς όχι με τον τρόπο που θέλετε. Αντί να εμφανίζει τις τιμές των τριών μεταβλητών, θα εμφανίζει τα ονόματα των μεταβλητών, σε αυτήν την περίπτωση "salesId-itemId-lineNum". (Παρατηρήστε ότι δεν έβαλα κενά μετά τα κόμματα κατά τη διαβίβαση παραμέτρων στη μακροεντολή, όπως συνήθως κάνω στις κλήσεις μεθόδων. Αυτό συμβαίνει επειδή η μακροεντολή θα χρησιμοποιήσει και τέτοια κενά, επομένως η έξοδος θα ήταν "salesId-itemId-lineNum" αν το έκανα).
Για να χρησιμοποιήσετε μια μακροεντολή ως συμβολοσειρά μορφοποίησης με strFmt, πρέπει να διαφύγετε των συμβόλων ποσοστού με ανάστροφες καθέτους, ως εξής:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Αυτό θα λειτουργήσει σαν να είχατε παράσχει απευθείας τη συμβολοσειρά μορφοποίησης.
Αυτή η μικρή εργασία παρουσιάζει τα παρακάτω παραδείγματα:
{
#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));
}
Περαιτέρω ανάγνωση
Αν σας άρεσε αυτή η ανάρτηση, ίσως σας αρέσουν και αυτές οι προτάσεις:
- Κλήση υπηρεσιών εγγράφων AIF απευθείας από την X++ στο Dynamics AX 2012
- Πώς να επαναλάβετε τα στοιχεία ενός Enum από κώδικα X ++ στο Dynamics AX 2012
- Χρήση του πλαισίου SysExtension για να μάθετε ποια δευτερεύουσα κλάση για να ξεκινήσετε στο Dynamics AX 2012
