Formatage de chaîne avec macro et strFmt dans Dynamics AX 2012
Publié : 16 février 2025 à 00:48:26 UTC
Dernière mise à jour : 12 janvier 2026 à 08:44:25 UTC
Cet article décrit un comportement particulier de Dynamics AX 2012 lors de l'utilisation d'une macro comme chaîne de format dans strFmt, ainsi que des exemples de solutions pour contourner ce problème.
String Formatting with Macro and strFmt in Dynamics AX 2012
Les informations contenues dans cet article sont basées sur Dynamics AX 2012 R3. Elles peuvent ne pas être valides pour d'autres versions.
J'ai récemment rencontré un problème avec la fonction strFmt qui m'a un peu déconcerté. Le plus étrange, c'est que, par une drôle de coïncidence, je ne l'avais jamais rencontré auparavant en tant que développeur Axapta/Dynamics AX depuis de nombreuses années.
Le problème venait du fait que j'essayais d'utiliser une macro comme chaîne de format pour la fonction strFmt, et ça ne fonctionnait pas. Elle ignorait complètement les paramètres % et ne renvoyait que le reste de la chaîne.
Après quelques recherches, j'ai découvert que les macros pouvaient servir à formater des chaînes de caractères, ce que j'ignorais également. Tant pis, c'est toujours bon d'apprendre quelque chose de nouveau, mais j'étais tout de même très surpris de ne pas y avoir pensé plus tôt.
En gros, quelque chose comme ça
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Cela ne fonctionnera pas car les signes % dans la macro servent en réalité à la mise en forme des chaînes de caractères propres à la macro. Dans ce cas, la fonction strFmt interprétera la chaîne de mise en forme comme « -- » et ne renverra donc que cela.
Quelque chose comme ceci :
info(#FormatMacro(salesId,itemId,lineNum));
Cela fonctionnera, mais probablement pas comme vous le souhaitez. Au lieu d'afficher les valeurs des trois variables, cela affichera leurs noms, ici « salesId-itemId-lineNum ». (Notez que je n'ai pas ajouté d'espaces après les virgules lors du passage des paramètres à la macro, contrairement à ce que je fais habituellement dans les appels de méthode. En effet, la macro utilise également ces espaces ; le résultat serait donc « salesId-itemId-lineNum » si je les avais ajoutés.)
Pour utiliser une macro comme chaîne de formatage avec strFmt, vous devez échapper les signes de pourcentage avec des barres obliques inverses, comme ceci :
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Cela fonctionnera exactement comme si vous aviez fourni directement la chaîne de format.
Ce petit projet illustre les exemples suivants :
{
#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));
}
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Appel des services de documents AIF directement depuis X++ dans Dynamics AX 2012
- Erreur "Aucune classe de métadonnées définie pour l'objet contrat de données" dans Dynamics AX 2012
- La différence entre data() et buf2Buf() dans Dynamics AX 2012
