Miklix

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.


Cette page a été automatiquement traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie au point, des erreurs peuvent donc survenir. Si vous préférez, vous pouvez consulter la version originale en anglais ici :

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

#define.FormatMacro('%1-%2-%3')
;

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 :

#define.FormatMacro('%1-%2-%3');
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 :

#define.FormatMacro('\\%1-\\%2-\\%3')
;

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 :

static void StrFmtMacroTest(Args _args)
{
    #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));
}
Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Bang Christensen

À propos de l'auteur

Mikkel Bang Christensen
Mikkel est le créateur et propriétaire de miklix.com. Il a plus de 20 ans d'expérience en tant que programmeur informatique/développeur de logiciels professionnel et est actuellement employé à temps plein pour une grande société informatique européenne. Lorsqu'il ne blogue pas, il consacre son temps libre à une vaste gamme d'intérêts, de passe-temps et d'activités, qui peuvent dans une certaine mesure se refléter dans la variété des sujets abordés sur ce site Web.