Mise en forme des chaînes avec Macro et strFmt dans Dynamics AX 2012
Publié : 16 février 2025 à 00 h 53 min 06 s UTC
Cet article décrit un comportement particulier dans Dynamics AX 2012 lors de l’utilisation d’une macro comme chaîne de format dans strFmt, ainsi que des exemples sur la façon de travailler autour de lui.
String Formatting with Macro and strFmt in Dynamics AX 2012
Les informations contenues dans cet article sont basées sur Dynamics AX 2012 R3. Il peut ou non être valide pour d’autres versions.
J’ai récemment rencontré un problème avec la fonction strFmt qui m’a déconcerté un peu. La partie la plus déconcertante était que, par une coïncidence étrange, je ne l’ai jamais rencontré auparavant au cours de mes nombreuses années en tant que développeur Axapta / Dynamics AX.
Le problème était que j’ai essayé d’utiliser une macro comme chaîne de format pour la fonction strFmt et cela n’a tout simplement pas fonctionné. Il a complètement ignoré les paramètres % et n’a renvoyé que le reste de la chaîne.
Après l’avoir examiné, j’ai découvert que les macros elles-mêmes peuvent être utilisées pour formater les chaînes, ce qui était aussi quelque chose que je ne savais pas. Eh bien, c’est toujours bien d’apprendre quelque chose de nouveau, mais j’étais quand même très surpris de ne pas avoir rencontré cela auparavant.
Fondamentalement, quelque chose comme ça
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
ne fonctionnera pas car les signes % dans la macro sont en fait utilisés pour les propres fonctionnalités de mise en forme de chaîne de la macro. Dans ce cas, la fonction strFmt verra la chaîne de mise en forme comme « -- » et ne renverra donc que cela.
Quelque chose comme ça :
info(#FormatMacro(salesId,itemId,lineNum));
fonctionnera, mais probablement pas comme vous le souhaitez. Au lieu de générer les valeurs des trois variables, il générera les noms des variables à la place, dans ce cas « salesId-itemId-lineNum ». (Notez que je n’ai pas mis d’espaces après les virgules lors du passage des paramètres à la macro, comme je le fais habituellement dans les appels de méthode. C’est parce que la macro utilisera également de tels espaces, de sorte que la sortie serait « salesId- itemId- lineNum » si je le faisais).
Pour utiliser réellement une macro comme chaîne de formatage avec strFmt, vous devez échapper aux signes de pourcentage avec des barres obliques inverses, comme ceci :
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Cela fonctionnera réellement comme si vous aviez fourni la chaîne de format directement.
Ce petit travail illustre les exemples :
{
#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));
}