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
Dernière mise à jour : 12 janvier 2026 à 08 h 44 min 55 s UTC
Cet article décrit certains comportements particuliers dans Dynamics AX 2012 lorsqu’on utilise une macro comme chaîne de format dans le strFmt, ainsi que des exemples de comment contourner cela.
String Formatting with Macro and strFmt in Dynamics AX 2012
Les informations contenues dans ce billet sont basées sur le Dynamics AX 2012 R3. Cela peut être valide ou non pour d’autres versions.
J’ai récemment rencontré un problème avec la fonction strFmt qui m’a un peu déconcerté. La partie la plus déconcertante, c’est que, par une étrange coïncidence, je n’ai jamais rencontré ça en tant que développeur Axapta/Dynamics AX.
Le problème, c’est que j’ai essayé d’utiliser une macro comme chaîne de format pour la fonction strFmt et ça n’a tout simplement pas fonctionné. Il ignorait complètement les paramètres% et ne retournait que le reste de la séance.
Après avoir vérifié, j’ai découvert que les macros elles-mêmes peuvent servir à formater des chaînes, ce que je ne savais pas non plus. Tant pis, c’est toujours bon d’apprendre quelque chose de nouveau, mais j’ai quand même été très surpris de ne pas avoir rencontré ça auparavant.
En gros, quelque chose comme ça
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ne fonctionnera pas parce que les signes% dans la macro sont en fait utilisés pour les fonctions de formatage des chaînes propres à la macro. Dans ce cas, la fonction strFmt verra la chaîne de formatage comme « -- » et ne retournera donc que celle-ci.
Quelque chose comme ceci :
info(#FormatMacro(salesId,itemId,lineNum));
Ça va marcher, mais probablement pas comme tu veux. Au lieu d’afficher les valeurs des trois variables, il affichera les noms des variables, dans ce cas « salesId-itemId-lineNum ». (Remarquez que je n’ai pas mis d’espaces après les virgules en passant les paramètres à la macro, comme je le fais habituellement dans les appels de méthode. C’est parce que la macro utilisera aussi ces espaces, donc la sortie serait « salesId- itemId- lineNum » si je le faisais).
Pour utiliser réellement une macro comme chaîne de mise en forme avec strFmt, il faut sortir des signes de pourcentage avec des barres obliques, 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));
}
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Utilisation du cadre SysExtension pour savoir quelle sous-classe instancier dans Dynamics AX 2012
- Identification de la classe de documents et de la requête pour le service AIF dans Dynamics AX 2012
- Comment parcourir les éléments d'une énumération à partir du code X++ dans Dynamics AX 2012
