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.
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
;
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:
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:
;
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:
{
#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:
- Utilização do SysExtension Framework para descobrir qual a subclasse a instanciar no Dynamics AX 2012
- Visão geral rápida do Dynamics AX 2012 SysOperation Framework
- Converter um real em string com todos os decimais no Dynamics AX 2012
