Miklix

Formatação de String com Macro e strFmt no Dynamics AX 2012

Publicado: 16 de fevereiro de 2025 às 00:48:51 UTC

Este artigo descreve um comportamento peculiar no Dynamics AX 2012 ao usar uma macro como string de formato no strFmt, bem como exemplos de como contorná-lo.


Esta página foi traduzida automaticamente do inglês para a tornar acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, pelo que podem ocorrer erros. Se preferir, pode ver a versão original em inglês aqui:

String Formatting with Macro and strFmt in Dynamics AX 2012

As informações contidas neste post são baseadas no Dynamics AX 2012 R3. Elas podem ou não ser válidas para outras versões.

Recentemente encontrei um problema com a função strFmt que me deixou um pouco perplexo. A parte mais desconcertante foi o facto de eu, por uma estranha coincidência, nunca o ter encontrado antes nos meus muitos anos como programador Axapta/Dynamics AX.

O problema era que eu tentava usar uma macro como string de formato para a função strFmt e simplesmente não funcionava. Ignorava completamente os parâmetros % e devolvia apenas o resto da cadeia de caracteres.

Depois de investigar, descobri que as próprias macros podem ser utilizadas para formatar cadeias de caracteres, o que também era algo que eu não sabia. Bem, é sempre bom aprender algo novo, mas mesmo assim fiquei muito surpreendido por não me ter deparado com isto antes.

Basicamente, algo como isto

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

não funcionará porque os sinais % na macro são, na verdade, usados para os recursos de formatação de strings da própria macro. Neste caso, a função strFmt verá a string de formatação como "--" e, portanto, retornará apenas isso.

Algo como isto:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

funcionará, mas provavelmente não da forma que pretende. Em vez de produzir os valores das três variáveis, produzirá os nomes das variáveis, neste caso "salesId-itemId-lineNum". (Observe que não coloquei espaços após as vírgulas ao passar parâmetros para a macro, como normalmente faço em chamadas de método. Isto deve-se ao facto de a macro também utilizar esses espaços, pelo que o resultado seria "salesId- itemId- lineNum" se o fizesse).

Para utilizar efetivamente uma macro como cadeia de formatação com strFmt, é necessário escapar aos sinais de percentagem com barras invertidas, desta forma:

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Isto funcionará como se tivesse fornecido a cadeia de formatação diretamente.

Este pequeno trabalho ilustra os exemplos:

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));
}
Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Bang Christensen

Sobre o autor

Mikkel Bang Christensen
Mikkel é o criador e proprietário do miklix.com. Tem mais de 20 anos de experiência como programador informático/desenvolvedor de software profissional e trabalha atualmente a tempo inteiro para uma grande empresa europeia de TI. Quando não está a escrever no blogue, dedica o seu tempo livre a um vasto leque de interesses, passatempos e actividades, que podem, em certa medida, refletir-se na variedade de tópicos abordados neste sítio Web.