Formatage de chaîne avec macro et strFmt dans Dynamics AX 2012
Publié : 16 février 2025 à 00:48:26 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 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 ou non être valables 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 déconcertant est que, par une étrange coïncidence, 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é. Elle a complètement ignoré les paramètres % et n'a renvoyé que le reste de la chaîne.
Après avoir étudié la question, j'ai découvert que les macros elles-mêmes peuvent être utilisées pour formater des chaînes, ce que je ne savais pas non plus. Bon, c'est toujours bien d'apprendre quelque chose de nouveau, mais j'étais quand même très surpris de ne pas être tombé sur cela auparavant.
En gros, 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 fonctions de formatage de chaîne propres à la macro. Dans ce cas, la fonction strFmt verra la chaîne de formatage 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 sortir les valeurs des trois variables, il sortira les noms des variables à la place, dans ce cas "salesId-itemId-lineNum". (Remarquez 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, donc 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 les signes de pourcentage avec des barres obliques inverses, comme ceci :
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Cela fonctionnera en fait comme si vous aviez fourni directement la chaîne de format.
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));
}