Miklix

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

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

Este artigo descreve alguns comportamentos peculiares no Dynamics AX 2012 ao usar uma macro como string de formato no strFmt, bem como exemplos de como contornar isso.


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

A informação neste artigo baseia-se no Dynamics AX 2012 R3. Pode ou não ser válida para outras versões.

Recentemente deparei-me com um problema com a função strFmt que me deixou um pouco confuso. A parte mais desconcertante foi que, por uma estranha coincidência, nunca me tinha deparado com isto em muitos anos como programador Axapta/Dynamics AX.

O problema foi que tentei usar uma macro como string de formato para a função strFmt e simplesmente não funcionou. Ignorou completamente os parâmetros % e só devolveu o resto da cadeia.

Depois de pesquisar, descobri que as próprias macros podem ser usadas para formatar strings, algo que também não sabia. Enfim, é sempre bom aprender algo novo, mas ainda assim fiquei muito surpreendido por nunca ter encontrado isto antes.

Basicamente, algo assim

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

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

Não funciona porque os sinais de % na macro são na verdade usados para as funcionalidades de formatação de strings da macro. Neste caso, a função strFmt verá a string de formatação como "--" e, portanto, só devolverá essa cadeia.

Algo assim:

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

Vai funcionar, mas provavelmente não da forma que queres. Em vez de fornecer os valores das três variáveis, irá gerar os nomes das variáveis, neste caso "salesId-itemId-lineNum". (Repara que não coloquei espaços depois das vírgulas ao passar parâmetros para a macro, como costumo fazer nas chamadas de métodos. Isto porque a macro também usa esses espaços, por isso o resultado seria "salesId- itemId- lineNum" se o fizesse).

Para realmente usar uma macro como string de formatação com strFmt, precisas de escapar dos sinais percentuais com barras ao contrário, como isto:

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

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

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

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

Leitura adicional

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


Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

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