Desenvolvimento de qualidade em X++ vai muito além de fazer o código compilar e funcionar. O D365 F&O disponibiliza um framework robusto de verificação de best practices que analisa código-fonte em profundidade — sem necessidade de compilação — e pode ser integrado diretamente aos pipelines de CI/CD para garantir padrões de qualidade em escala.
A Base: Abstract Syntax Tree (AST)
O framework de best practices do D365 F&O é construído sobre análise de Abstract Syntax Tree (AST). O parser X++ — com capacidade de error recovery automático — constrói uma representação em árvore do código-fonte que pode ser atravessada programaticamente sem compilar o código.
Isso tem implicações práticas importantes: é possível analisar grandes bases de código X++ de forma extremamente rápida, detectando padrões problemáticos sem o overhead de uma compilação completa.
AstSweeper: Traversal com Padrão Visitor
A classe AstSweeper implementa o padrão Visitor para atravessar o AST em profundidade-primeira. Para cada tipo de nó da árvore — método, classe, expressão, statement — métodos especializados são invocados:
public class MyBestPracticeChecker extends BestPracticeAstChecker
{
// Visitado para cada método encontrado no código
public void visitMethod(XppMethod _method)
{
// Verificar se o método tem mais de 200 linhas
if (_method.lineCount() > 200)
{
this.addWarning(
_method,
"Método muito longo. Refatore em métodos menores.",
BestPracticeMessageSeverity::Warning
);
}
next visitMethod(_method); // Continuar traversal
}
}
Tipos de Regras: Código vs Metadados
O framework suporta dois tipos de regras:
- Code-based rules: Analisam o AST do código X++. Ideais para detectar padrões como: uso de
selectsem índice, métodos excessivamente longos, variáveis não utilizadas, ou ausência dettsbegin/ttscommitem operações de banco. - Metadata-based rules: Analisam os metadados dos objetos AOT (tabelas, formulários, relatórios) usando a API
Microsoft.Dynamics.AX.Metadata.Metamodel. Úteis para verificar se tabelas têm índice primário definido, se formulários têm títulos, etc.
Integração com CI/CD via xppbp.exe
A ferramenta de linha de comando xppbp.exe permite executar verificações de best practices em pipelines automatizados:
# Executar best practices em um modelo específico
xppbp.exe -metadata:C:\AOSService\PackagesLocalDirectory `
-module:MyModule `
-xmllog:BPResults.xml `
-suppresswarnings:true
O arquivo XML gerado pode ser consumido por ferramentas como Azure DevOps para publicar os resultados como test results ou quality gates — bloqueando merges automaticamente quando violações críticas são encontradas.
Boas Práticas Essenciais em X++
- Nunca use
selectsem índice em loops: Uma query sem índice em uma tabela com milhões de registros causa full table scans e degrada a performance de toda a instância. - Sempre use
ttsbegin/ttscommitconsistentemente: Transações abertas sem commit explícito causam locks e timeouts em ambientes de produção. - Prefira
RecordInsertListpara inserção em massa: Inserir 10.000 registros um a um viatable.insert()é até 100x mais lento que usar RecordInsertList. - Documente extensões com
[ExtensionOf]explícito: Deixe claro que uma classe é uma extensão, não uma reimplementação.
Conclusão
O framework de best practices do D365 F&O é uma ferramenta poderosa que, quando integrada ao pipeline de desenvolvimento, eleva consistentemente a qualidade do código X++. Equipes que adotam essa abordagem detectam problemas no momento do desenvolvimento — e não em produção.
Na Minoru Tech, implementamos pipelines de qualidade de código X++ com integração Azure DevOps para nossos clientes. Entre em contato para conhecer nossa abordagem.
