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
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.


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

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

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 :

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

#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));
}

Lectures complémentaires

Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :


Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Christensen

À propos de l'auteur

Mikkel 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.