Um ponto bem interessante para ser comentado seriam as formas de consultas e algumas recomendações para quando utilizar uma ou outra forma.
Existem três métodos suportados, cada um possui suas vantagens e desvantagens:
- QueryExpression – É certamente o mais visto em materiais Microsoft, proporciona a utilização de objetos tipados. Basicamente escolhemos a entidade a ser consultada, solicitamos os atributos de retorno (QueryAttributes), informamos as condições/filtros (ConditionExpression e FilterExpression) e por fim percorremos uma lista de BusinessEntityCollection que obviamente permite um casting (todas entidades herdam de uma BusinessEntity) para uma entidade nativa ou customizada. Em 90% do casos tudo que foi dito é mais do que suficiente para o que precisamos, porém algumas limitações nos fazem pensar um pouco em usar QueryExpressions. Em determinados casos precisamos recuperar colunas de duas entidades distintas, e isso não será possível de ser feito com uma QueryExpression, uma alternativa seria fazer sub consultas e recuperar as informações uma a uma das entidades relacionadas. Outro ponto seria a familiaridade de programação, poucos desenvolvedores conhecem sua sintaxe plenamente, isso pode prejudicar o desempenho de construção do projeto;
- Filtered Views – Como devem saber a única interação com o banco de dados do CRM suportada é através de suas views. Com elas um desenvolvedor com conhecimentos básicos em .net e t-sql conseguirá criar suas consultas sem problemas, pois nada fungirá do habitual, no final teremos nosso DataTable de sempre. Como ponto negativo seria a falta de tipagem dos objetos, todo o resultado deve ser convertido para as entidades apropriadas ou dynamics entities;
- FetchXML – Uma forma pouco explorada pelos desenvolvedores, traduz toda sua funcionalidade em tags XML, um padrão mais moderno de trabalho e limpo. Uma curiosidade importante, seria que toda QueryExpression acaba sendo transformada em fetchXML. Apenas duas informações são necessárias para obter um resultado da consulta: uma string com o fetchXML propriamente dito e uma chamada ao método “Fetch” do Web Service (CrmService.Fetch). Igualmente as Filtereds Views, permitem o retorno de colunas de várias entidades na mesma consulta. Novamente o “problema” conhecimento da sintaxe pode ser determinando para o seu uso, aliado ainda a realização de testes e depuração de erros;