Compartir por


Proveedores de datos de entidad virtuales personalizados

Al utilizar el SDK de datos de Dynamics 365 for Customer Engagement (on-premises), los desarrolladores de .NET tienen la opción de crear proveedores de datos de entidad virtuales personalizados con el fin de integrar los tipos de orígenes de datos externos que no admite un proveedor de datos existente. Cada proveedor de datos consta de un conjunto reutilizable de complementos de Dynamics 365 for Customer Engagement (on-premises) que implementan las operaciones CRUD admitidas. (La versión inicial está limitada a las operaciones de lectura Retrieve y RetrieveMultiple.) En esta sección se ofrece información fundamental sobre los proveedores de datos y enfoques para desarrollar proveedores personalizados, incluido el código de ejemplo.

Nota

Como alternativa a la creación de un proveedor de origen de datos personalizado, debe considerar adaptar el origen de datos a un proveedor de datos existente. Por ejemplo, si crea una interfaz de OData v4 con el origen de datos externo entonces podrá acceder directamente a él con el proveedor de datos OData v4 estándar proporcionado. El mecanismo para agregar esta interfaz REST varía con la tecnología de servicio de datos subyacente, por ejemplo consulte Servicios de datos de WCF 4.5. OData es ampliamente compatible en el sector gracias a una gran variedad de herramientas dedicadas y tecnologías compatibles.

Requisitos previos

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

También se debe descargar manualmente el SDK de datos de Dynamics 365 for Customer Engagement (on-premises) o incluir el paquete de NuGet correspondiente en sus proyectos. Este SDK es compatible con Visual Studio 2015 o 2017.

Categorías de proveedores

Puede crear dos categorías generales de proveedor de datos con los ensamblados del SDK de datos de entidad virtual: genérico o específico. La tabla siguiente describe estos métodos y los enlaza con el modelo de desarrollo de proveedor de datos más adecuado para cada método.

Categoría Modelo de desarrollo Descripción
Genérico Proveedor "básico" Estos proveedores pueden traducir con flexibilidad las expresiones de la consulta de FetchXML a la solicitud asociada al origen de datos externos y luego volver a las instancias de la entidad resultantes. Este tipo de proveedor puede volver a utilizarse 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 deberán reasignarse las entidades virtuales afectadas.
Específico Proveedor LINQ para esquemas conocidos Un proveedor de este tipo solo traduce las consultas de forma limitada a la llamada LINQ asociada a una instancia de origen de datos existente y conocida. El origen de datos debe ser un proveedor LINQ, tal como se explica en el tema Habilitar un origen de datos para las 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, el proveedor de datos debe actualizarse y generarse de nuevo.

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

Pasos para usar un proveedor de datos personalizado

Hay varios pasos que se deben seguir para crear una solución de proveedor de datos de entidad virtual que se pueda importar a las aplicaciones de Dynamics 365 for Customer Engagement (on-premises):

  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 Dynamics 365 for Customer Engagement (on-premises) mediante la herramienta de registro de complementos (PRT).
  3. Cree una solución de proveedor de datos.
  4. Personalice la entidad de origen de datos para reflejar el tipo de datos o instancia específica.
  5. Exporte la solución de proveedor de datos personalizada.

Desarrollo de complementos

Puesto que las entidades virtuales en esta versión son de solo lectura, escribirá el proveedor de datos en forma de complemento registrado en los eventos Retrieve y RetrieveMultiple. Cada evento respectivo incluye información en el contexto de ejecución que describe el tipo de datos a devolver.

Evento Contexto de ejecución
Recuperar Describe qué entidad recuperar, así como los atributos y cualquier entidad relacionada que desee incluir.
RetrieveMultiple Contiene un objeto QueryExpression 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:

  1. Convertir la información respectiva en el contexto de ejecución en una consulta compatible con el origen de datos externos.
  2. Recuperar los datos del sistema externo.
  3. Para Retrieve, convierta los datos en una Entity; en caso contrario, para RetrieveMultiple, conviértalos en una EntityCollection. Este resultado se devuelve a través de la plataforma de Dynamics 365 Customer Engagement (on-premises) 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 Dynamics 365 Customer Engagement (on-premises) desde el contexto de ejecución a una consulta en el formato adecuado para el origen de datos externos. Este marco le ayudará a convertir los datos que se devuelven a los tipos Entity o EntityCollection adecuados que espera la plataforma de Dynamics 365 Customer Engagement (on-premises).

Excepciones del proveedor de datos

Si por cualquier motivo, el código no logra el resultado previsto, deberá lanzar el error correspondiente. El espacio de nombres Microsoft.Xrm.Sdk.Data.Exceptions contiene las siguientes clases de excepción, que se derivan de SdkExceptionBase, que puede usar para este fin:

Clase de excepción Descripción
AttributeNotFoundException La consulta especifica un atributo que no se encontró en el registro de datos externos asociado. Normalmente, se produce como resultado de una asignación de tipo errónea o por un cambio de esquema del origen de datos externos.
AuthenticationException Se ha producido un error durante la autenticación de seguridad en el servicio de origen de datos externos. Por ejemplo: estado HTTP 401 recibido del servicio de datos externos. Normalmente, se produce porque el usuario actual no tiene privilegios adecuados o la información de conexión del EntityDataSource asociado no es correcta.
EndpointException La configuración del extremo en la entidad de origen de datos no es válida o el extremo no existe.
EntityNotFoundException La consulta está dirigida a una entidad que no existe. Normalmente, se produce como resultado de una asignación de tipo errónea o por un cambio de esquema del origen de datos externos.
GenericDataAccessException Error de acceso de datos general utilizado cuando el error no encaja con una excepción más específica.
InvalidMetadataException
InvalidQueryException La consulta especificada no es válida. Por ejemplo, una combinación de cláusulas no válida u operador de comparación no compatible.
ObjectNotFoundException El registro especificado en el origen de datos externos no existe.
TimeoutException No se ha completado la operación externa en el tiempo permitido. Por ejemplo, el resultado de un estado HTTP 408 del servicio de datos externos.

Registro de complementos

A diferencia de un complemento normal, solo usará la herramienta de registro de complementos (PRT) para registrar el ensamblado y los complementos para cada evento. No registrará 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 pasos, configurará el proveedor de datos con las entidades Microsoft.Dynamics.CRM.EntityDataProvider y Microsoft.Dynamics.CRM.EntityDataSource.

Entidad Descripción
EntityDataProvider Define los complementos a utilizar para cada evento y el nombre lógico del origen de datos.
EntityDataSource Proporciona el contexto de la entidad y cualquier información de conexión necesaria para el origen de datos externos, incluidos los secretos necesarios para autenticar.

Una vez configurados los metadatos de la entidad virtual, los complementos se registran con el PRT y los datos de configuración correctos se establecen en las entidades EntityDataProvider y EntityDataSource, y la entidad virtual empieza a responder a las solicitudes.