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.
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.
;
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:
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:
;
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:
{
#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:
- Identificando a classe de documento e a consulta para o serviço AIF no Dynamics AX 2012
- Usando o SysExtension Framework para descobrir qual subclasse instanciar no Dynamics AX 2012
- Chamando serviços de documentos AIF diretamente do X++ no Dynamics AX 2012
