Miklix

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.


Cette page a été traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie parfaite, et des erreurs peuvent donc se produire. 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. 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

#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 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 :

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

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

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 :

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

A propos de l'auteur

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