Escolher a forma correta para acessar os dados no AX é muito importante, a escolha deve analisar desde o processamento exigido pelo servidor como também a quantidade de dados a ser trafegada entre o client e o server.

Uma Query no AX é uma interface orientada a objetos que traz dados do banco para a aplicação, composta por objetos de diferentes classes.

O modelo do objeto é como:

O objeto queryRun é usado para executar a query e trazer os dados, enquanto o query e o resto dos objetos são o plano para acessar as instruções SQL.

O objeto query é a definição master, ou seja, ele mesmo guarda propriedades e tem um ou mais datasources.

O objeto queryBuildDataSource define o acesso a uma simples tabela na query. Se mais datasources forem adicionados a uma query no mesmo nível, elas resultarão em um separadas instruções que serão executadas sequencialmente. Se um datasource é adicionado após o outro datasource eles formarão um join entre as duas tabelas.

O objeto queryBuildFieldList define quais campos serão caregado da base de dados. O default é dinamics, ou seja, cada datasource tem seu proprio objeto queryBuildFieldList o qual contém informação sobre todos os campos selecionados. Também é possível especificar funções de agregação como sum, count e avg.

O objeto queryBuildRange contém a limitação da query em um único campo. Se mais de um campo é usado para limitar a query (where), o datasource então contém mais de um range.

O objeto queryBuildDynaLink pode existir apenas em um datasource externo a query. Os objetos contem informações relativas a relação a um registro externo. Quando a query é executada, esta informação é convertida para entradas adicionais na seção where das instruções SQL. A função é usada por formulários quando dois datasources são sincronizados. O datasource ‘filho’ contém dynalink(s) para o datasource ‘pai’. Esta função é sempre usada se você tem dois datasources que são colocados em formulários diferentes, mas continuam sincronizados.

O objeto queryBuildLink só existe em inner datasources. O objeto especifica a relação entre duas tabelas em um join.

Você pode optar por criar uma query na AOT usando o MorphX ou dinamicamente via X++, ambas são usadas na aplicação padrão. Uma das vantagens em fazer a query dinamica é que ela não fica publica na AOT e acaba sendo protegida contra modificações não intencionadas.

Formulários e relatórios usam queries para carregar os dados. Estas queries não são publicas abaixo do nó Query na AOT. Formulários geram as queries dinamicamente do seu datasource, enquanto relatórios tem um nó de Query integrado. Em ambos os casos você pode tratar a query e modificá-la. Abaixo você também vê o modelo de objeto.