Miklix

Formatação de strings com macro e strFmt no Dynamics AX 2012

Publicado: 16 de fevereiro de 2025 às 00:48:49 UTC
Última atualização: 12 de janeiro de 2026 às 08:44:30 UTC

Este artigo descreve um comportamento peculiar no Dynamics AX 2012 ao usar uma macro como string de formatação no strFmt, além de exemplos de como contornar o problema.


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

String Formatting with Macro and strFmt in Dynamics AX 2012

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

Recentemente, deparei-me com um problema na função strFmt que me deixou perplexo por um tempo. O mais intrigante foi que, por uma estranha coincidência, nunca o havia encontrado antes em meus muitos anos como desenvolvedor Axapta/Dynamics AX.

Problema era que eu tentei usar uma macro como string de formatação para a função strFmt e simplesmente não funcionou. Ela ignorou completamente os parâmetros % e retornou apenas o restante da string.

Depois de pesquisar um pouco, descobri que as próprias macros podem ser usadas para formatar strings, algo que eu também desconhecia. Bem, é sempre bom aprender algo novo, mas ainda assim fiquei muito surpreso por não ter me deparado com isso antes.

Basicamente, algo assim.

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

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

Não funcionará porque os sinais de porcentagem (%) na macro são usados para os próprios recursos de formatação de strings da macro. Nesse caso, a função strFmt verá a string de formatação como "--" e, portanto, retornará apenas isso.

Algo assim:

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

Vai funcionar, mas provavelmente não da maneira que você deseja. Em vez de exibir os valores das três variáveis, exibirá os nomes das variáveis, neste caso "salesId-itemId-lineNum". (Observe que não coloquei espaços após as vírgulas ao passar os parâmetros para a macro, como costumo fazer em chamadas de método. Isso ocorre porque a macro também usa esses espaços, então a saída seria "salesId-itemId-lineNum" se eu os tivesse usado).

Para usar uma macro como string de formatação com strFmt, você precisa escapar os sinais de porcentagem com barras invertidas, assim:

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

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

Isso funcionará exatamente como se você tivesse fornecido a string de formatação diretamente.

Esta pequena tarefa 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));
}

Leitura adicional

Se você gostou deste post, você também pode gostar destas sugestões:


Compartilhe no BlueskyCompartilhe no FacebookCompartilhe no LinkedInCompartilhe no TumblrCompartilhar em XCompartilhe no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

Mikkel Christensen
Mikkel é o criador e proprietário do miklix.com. Ele tem mais de 20 anos de experiência como programador de computador/desenvolvedor de software profissional e atualmente trabalha em tempo integral para uma grande empresa europeia de TI. Quando não está blogando, ele dedica seu tempo livre a uma grande variedade de interesses, hobbies e atividades, o que pode, até certo ponto, refletir-se na variedade de tópicos abordados neste site.