Proveedores de datos de tabla virtual personalizados

Mediante el SDK de datos de Microsoft Dataverse, los desarrolladores de .NET pueden crear proveedores de datos de tabla virtual personalizados para ayudar a integrar tipos de origen de datos externos que no son compatibles con un proveedor de datos existente. Cada proveedor de datos se compone de un conjunto reutilizable de complementos de Dataverse que implementan las operaciones CRUD admitidas. Para cada tabla virtual, también conocida como entidad virtual, los desarrolladores pueden crear complementos y registrarlos que representan cada una de las operaciones Create, Update, Retrieve, RetrieveMultiple y Delete . En esta sección se proporciona información fundamental sobre los proveedores de datos y los enfoques para desarrollar proveedores personalizados, incluido el código de ejemplo.

Nota:

En lugar de crear un proveedor de origen de datos personalizado, considere la posibilidad de adaptar el origen de datos a un proveedor de datos existente. Por ejemplo, si crea una interfaz OData v4 en el origen de datos externo, puede acceder directamente a ella mediante el Proveedor de datos estándar OData v4 proporcionado, que admite operaciones CRUD. El mecanismo para agregar esta interfaz REST varía con la tecnología del servicio de datos subyacente. Por ejemplo, consulte WCF Data Services 4.5. OData es ampliamente compatible en el sector gracias a una gran variedad de herramientas dedicadas y tecnologías compatibles.

Prerrequisitos

Los proveedores de datos personalizados requieren recursos de desarrollo importantes para crear y mantener. Debe tener conocimiento fundamental de las áreas siguientes:

El Microsoft.Xrm.Sdk.Data.dll ensamblado está disponible como un paquete NuGet: Microsoft.CrmSdk.Data

Categorías de proveedores

Puede crear dos categorías generales de proveedores de datos mediante los ensamblados del SDK de datos de tabla virtual: genéricos o de destino. En la tabla siguiente se describen estos enfoques y se comparan con el modelo de desarrollo del proveedor de datos más adecuado para cada enfoque.

Categoría Modelo de desarrollo Descripción
Genérico Proveedor "básico" Estos proveedores traducen flexiblemente expresiones de consulta FetchXML a la solicitud asociada al origen de datos externo y, a continuación, devuelven los registros resultantes. Puede reutilizar este proveedor para todas las instancias de este tipo de origen de datos. Este método es el más general, pero es más difícil de desarrollar. Si cambia el esquema del origen de datos, solo tiene que volver a mapear las tablas virtuales afectadas.
Específico Proveedor LINQ para esquemas conocidos Este proveedor traduce las consultas de forma específica en la llamada LINQ correspondiente a una instancia concreta y existente de un origen de datos conocido. El origen de datos debe ser un proveedor LINQ como se describe en el artículo Habilitación de un origen de datos para consultas LINQ. Este método está limitado a una instancia de origen de datos específica, pero requiere mucho menos código. Si cambia el esquema del origen de datos, debe actualizar y recompilar el proveedor de datos.

El proveedor de datos OData v4 estándar y el proveedor de datos de Azure Cosmos DB son ejemplos de proveedores genéricos.

Pasos para usar un proveedor de datos personalizado

Para crear una solución de proveedor de datos de tabla virtual que puede importar en las aplicaciones de Dataverse, siga estos pasos:

  1. Desarrolle el complemento DLL de proveedor de datos personalizado o conjunto de DLL.
  2. Registre el proveedor de datos personalizado con el servicio de Dataverse usando la herramienta de registro de complementos (PRT).
  3. Cree una solución de proveedor de datos.
  4. Personalice la tabla de origen de datos para reflejar el tipo de datos o una instancia específica.
  5. Exporte la solución de proveedor de datos personalizada.

Para obtener más información, consulte Ejemplo: Proveedor de tablas virtuales personalizado con operaciones CRUD.

Desarrollo de complementos

Dado que las tablas virtuales admiten operaciones CRUD, escriba el proveedor de datos como un complemento que se registre en los eventos Create, Update, Retrieve, RetrieveMultiple y Delete . Cada evento incluye información en el contexto de ejecución que describe el tipo de datos que se van a devolver.

Event Contexto de ejecución
Recuperar Describe qué tabla se va a recuperar, así como las columnas y las tablas relacionadas que se van a incluir.
RetrieveMultiple Contiene un QueryExpression objeto que define la consulta. El marco contiene una clase QueryExpressionVisitor diseñada para comprobar diferentes partes del árbol de expresión de consulta.

Para ambos eventos, debe hacer lo siguiente:

  1. Convierta la información correspondiente en el contexto de ejecución en una consulta que funcione para el origen de datos externo.
  2. Recuperar los datos del sistema externo.
  3. En Recuperar, convierta los datos en un Entity; de lo contrario, para RetrieveMultiple, convierta los datos en un EntityCollection. Dataverse devuelve este resultado al usuario que ejecuta la consulta.

Las clases en el espacio de nombres Microsoft.Xrm.Sdk.Data proporcionan un marco para ayudarle a asignar la información de la consulta de Dataverse desde el contexto de ejecución a una consulta en el formato adecuado para el origen de datos externos. Este marco le ayuda a convertir los datos devueltos en los tipos EntityCollection o Entity adecuados que espera la plataforma Dataverse.

Excepciones del proveedor de datos

Si tu código no puede obtener el resultado esperado, lanza el error adecuado. El Microsoft.Xrm.Sdk.Data.Exceptions espacio de nombres contiene las siguientes clases de excepción, derivadas de SdkExceptionBase, que puede usar para este propósito:

Clase de excepción Descripción
AuthenticationException Se produjo un error durante la autenticación de seguridad con el servicio externo de origen de datos; por ejemplo, se recibió el código de estado HTTP 401 del servicio de datos externo. Normalmente se produce porque el usuario actual no tiene privilegios adecuados o la información de conexión de EntityDataSource asociada es incorrecta.
EndpointException La configuración del punto de conexión de la tabla del origen de datos no es válida o el punto de conexión no existe.
GenericDataAccessException Error general de acceso a datos, que se usa cuando el error no se asigna a una excepción más específica.
InvalidMetadataException
InvalidQueryException La consulta especificada no es válida; por ejemplo, contiene una combinación de cláusulas no válida o un operador de comparación no admitido.
ObjectNotFoundException El registro especificado en el origen de datos externo no existe.
TimeoutException La operación externa no se completó en el tiempo permitido; por ejemplo, el resultado de un estado HTTP 408 del servicio de datos externo.

Registro de complementos

A diferencia de un complemento normal, use la Herramienta de registro de complementos (PRT) para registrar el ensamblado y los complementos para cada evento. No registre pasos específicos. El complemento se ejecutará en la fase 30, la fase de transacciones centrales principal de la operación que no está disponible para los pasos de complemento normales. En lugar de registrar los pasos, configure el proveedor de datos mediante la tabla siguiente.

Tabla Descripción
EntityDataProvider Define los complementos que se van a usar para cada evento y el nombre lógico del origen de datos.

Al configurar las definiciones de la tabla virtual, registre los complementos mediante el PRT y establezca los datos de configuración correctos en la tabla EntityDataProvider . La tabla virtual comienza a responder a las solicitudes.

Para obtener más información, consulte Creación de un proveedor de datos y adición de complementos al proveedor.

Depuración de complementos

Un proveedor de tablas virtuales personalizado es un tipo de complemento. Use la información de estos artículos para depurar complementos para proveedores de tablas virtuales personalizados: Depuración de complementos y Tutorial: Depuración de un complemento.

Consulte también

Introducción a las tablas virtuales
Consideraciones de API de tablas virtuales
Ejemplo: complemento de proveedor de datos para tablas virtuales genérico