Provedores de dados de tabela virtual personalizados

Ao utilizar o Microsoft Dataverse Data SDK, os programadores de .NET podem criar fornecedores de dados de tabelas virtuais personalizados para ajudar a integrar tipos de fontes de dados externas que não são suportados por um fornecedor de dados existente. Cada provedor de dados é composto por um conjunto reutilizável de plug-ins Dataverse que implementam as operações CRUD suportadas. Para cada tabela virtual, também conhecida como entidade virtual, os programadores podem criar plug-ins e registá-los representando cada uma das operações Crear, Atualizar, Recuperar, Recuperar Múltiplos e Eliminar . Esta seção fornece informações fundamentais sobre provedores de dados e abordagens para o desenvolvimento de provedores personalizados, incluindo código de exemplo.

Observação

Em vez de criar um fornecedor de fonte de dados personalizado, considere adaptar a sua fonte de dados a um fornecedor de dados já existente. Por exemplo, se criar uma interface OData v4 para a sua fonte de dados externa, pode aceder diretamente a ela usando o OData v4 Data Provider, que suporta operações CRUD. O mecanismo para adicionar esta interface REST varia consoante a tecnologia de serviço de dados subjacente. Por exemplo, veja WCF Data Services 4.5. OData tem amplo suporte da indústria, com uma ampla gama de ferramentas dedicadas e tecnologias compatíveis.

Pré-requisitos

Provedores de dados personalizados exigem recursos de desenvolvimento substanciais para criar e manter. Deve ter conhecimentos fundamentais das seguintes áreas:

O Microsoft.Xrm.Sdk.Data.dll assembly está disponível como um pacote NuGet: Microsoft.CrmSdk.Data

Categorias de prestadores

Pode criar duas categorias gerais de fornecedores de dados usando os assemblies de SDK de tabelas virtuais: genéricos ou direcionados. A tabela seguinte descreve estas abordagens e corresponde-as ao modelo de desenvolvimento do fornecedor de dados mais adequado para cada abordagem.

Categoria Modelo de desenvolvimento Descrição
Genérico Fornecedor "Bare metal" Estes fornecedores traduzem de forma flexível expressões de consulta FetchXML para o pedido associado à fonte de dados externa e depois devolvem os registos resultantes. Pode reutilizar tal fornecedor para todas as instâncias deste tipo de fonte de dados. Esta abordagem é a mais geral, mas é mais complicada de desenvolver. Se o esquema da fonte de dados mudar, só precisa de remapear as tabelas virtuais afetadas.
Direcionado Provedor LINQ para esquema conhecido Tal fornecedor traduz de forma restrita as consultas na chamada LINQ associada para uma instância de fonte de dados já conhecida. A fonte de dados deve ser um fornecedor LINQ, conforme descrito no artigo Enabling a Data Source for LINQ Querying. Essa abordagem é limitada a uma instância específica da fonte de dados, mas requer muito menos codificação. Se o esquema da fonte de dados for alterado, deve atualizar e reconstruir o fornecedor de dados.

O Provedor de Dados OData v4 padrão e o Provedor de Dados do Azure Cosmos DB são exemplos de provedores genéricos.

Etapas para usar um provedor de dados personalizado

Para criar uma solução de fornecedor de dados de tabelas virtuais que possa importar para as suas aplicações Dataverse, complete os seguintes passos:

  1. Desenvolva a DLL ou o conjunto de DLLs do plug-in de fornecedor de dados personalizado.
  2. Registe o fornecedor de dados personalizado no seu serviço Dataverse utilizando a Ferramenta de Registo de Plug-ins (PRT).
  3. Crie uma solução de provedor de dados.
  4. Personalize a tabela da fonte de dados para refletir seu tipo de dados ou instância específica.
  5. Exporte a solução de provedor de dados personalizado.

Para mais informações, veja Exemplo: Fornecedor de tabelas virtuais personalizadas com operações CRUD.

Desenvolvimento de plug-ins

Como as tabelas virtuais suportam operações CRUD, escreva o fornecedor de dados como um plug-in que regista nos eventos Crear, Atualizar, Recuperar, Recuperar Múltiplos e Eliminar . Cada evento inclui informação no contexto de execução que descreve o tipo de dados a devolver.

Event Contexto de execução
Recuperar Descreve qual tabela recuperar, bem como as colunas e quaisquer tabelas relacionadas a serem incluídas.
RecuperarMúltiplo Contém um QueryExpression objeto que define a consulta. A estrutura contém uma classe QueryExpressionVisitor projetada para inspecionar diferentes partes da árvore de expressões de consulta.

Para ambos os eventos, deve:

  1. Converte a informação respetiva no contexto de execução numa consulta que funcione para a tua fonte de dados externa.
  2. Recupere os dados do sistema externo.
  3. Para Retrieve, converta os dados em um Entity; caso contrário, para RetrieveMultiple, converta-os em um EntityCollection. O Dataverse devolve este resultado ao utilizador que executa a consulta.

As classes no Microsoft.Xrm.Sdk.Data namespace fornecem uma estrutura para ajudar no mapeamento das informações de consulta Dataverse do contexto de execução em uma consulta no formato apropriado para sua fonte de dados externa. Esta estrutura ajuda a converter os dados devolvidos nos tipos apropriados de Entity ou EntityCollection esperados pela plataforma Dataverse.

Exceções do provedor de dados

Se o teu código não conseguir atingir o resultado esperado, lança o erro apropriado. O Microsoft.Xrm.Sdk.Data.Exceptions namespace contém as seguintes classes de exceção, derivadas de SdkExceptionBase, que você pode usar para essa finalidade:

Classe de exceção Descrição
AuthenticationException Ocorreu um erro durante a autenticação de segurança no serviço de origem de dados externo; por exemplo, o estado HTTP 401 recebido do serviço de dados externo. Normalmente ocorre porque o utilizador atual não tem os privilégios adequados ou a informação de ligação no EntityDataSource associado está incorreta.
EndpointException A configuração do endpoint na tabela da fonte de dados é inválida ou o endpoint não existe.
GenericDataAccessException Um erro geral de acesso a dados, usado quando o erro não corresponde a uma exceção mais específica.
InvalidMetadataException
InvalidQueryException A consulta especificada é inválida; por exemplo, contém uma combinação de cláusulas inválida ou um operador de comparação não suportado.
ObjectNotFoundException O registo especificado na fonte de dados externa não existe.
TimeoutException A operação externa não foi concluída dentro do tempo permitido; por exemplo, o resultado de um estado HTTP 408 do serviço de dados externo.

Registro de plugin

Ao contrário de um plug-in comum, utilize a Ferramenta de Registo de Plug-ins (PRT) para registar a assemblagem e os plug-ins para cada evento. Não registe passos específicos. O seu plug-in é executado na fase 30, a fase principal da transação para a operação que não está disponível para passos de plug-ins comuns. Em vez de registar os passos, configure o seu fornecedor de dados usando a tabela seguinte.

Tabela Descrição
EntityDataProvider Define os plug-ins a serem usados para cada evento e o nome lógico da fonte de dados.

Quando configura as definições para a sua tabela virtual, registe os seus plug-ins usando o PRT e defina os dados de configuração corretos na tabela EntityDataProvider . A sua mesa virtual começa a responder a pedidos.

Para mais informações, consulte Criação de fornecedor de dados e adição de plug-ins ao fornecedor.

Depuração de plug-ins

Um provedor de tabela virtual personalizado é um tipo de plug-in. Use a informação destes artigos para depurar plug-ins para fornecedores de tabelas virtuais personalizadas: Debug plug-ins e Tutorial: Debug a plug-in.

Consulte também

Introdução às tabelas virtuais
Considerações da API de tabelas virtuais
Exemplo: Plug-in de fornecedor genérico de dados de tabela virtual