Servicio de exportación de datos
Nota
A partir de noviembre de 2021, el Servicio de exportación de datos ha quedado en desuso. El Servicio de exportación de datos seguirá funcionando y contará con soporte completo hasta que llegue al final del soporte y el final de su vida útil en noviembre de 2022. Más información: https://aka.ms/DESDeprecationBlog
Exportación de datos es un servicio complementario habilitado como solución de Microsoft Dataverse que agrega la capacidad de replicar los datos de Dataverse en un almacén de Microsoft Azure SQL Database en una suscripción de Microsoft Azure propiedad del cliente. Los objetivos de destinos admitidos son Microsoft Azure SQL Database y Microsoft Azure SQL Server en máquinas virtuales de Microsoft Azure. El servicio de exportación de datos sincroniza inteligentemente los esquemas y datos completos de Dataverse inicialmente y después sincroniza de manera continua cuando se producen cambios (cambios delta) en Dataverse.
El servicio Exportación de datos proporciona una interfaz para administrar la configuración y la administración continua de este servicio desde Dataverse. Para obtener más información, consulte Replicar datos en Azure SQL Database. En este tema se explican la interfaz programática y los problemas correspondientes para este servicio.
Los requisitos previos para utilizar el servicio Exportación de datos
Puesto que este servicio requiera acceso a una base de datos de Microsoft Azure SQL Database externa desde Dataverse, deben cumplirse varios requisitos previos para poder acceder correctamente a este servicio. Los siguientes requisitos previos se describen más detalladamente desde el punto de vista de un administrador en la sección Requisitos previos para usar el servicio de exportación de datos.
El entorno de Dataverse debe configurarse para que:
Las tablas que se exportarán están habilitadas con seguimiento de cambios. Para obtener más información, consulte Usar el seguimiento de cambios para sincronizar los datos con sistemas externos.
El código se ejecuta en el contexto de un usuario con el rol de seguridad Administrador del sistema.
Nota
El acceso mediante programación a este servicio no requiere la instalación de la solución administrada Exportar datos asociada.
La base de datos de Azure SQL de destino debe estar configurada de modo que:
La suscripción debe admitir el volumen de datos que se replican desde la instancia de Dataverse.
Las configuraciones de firewall deben permitir el acceso desde la dirección IP del servicio Exportación de datos. Para obtener más información, consulte Configurar una regla de firewall a nivel de servidor de base de datos de Azure SQL mediante Azure Portal.
Se recomienda que la opción “Permitir acceso a servicios de Azure” esté habilitada.
El usuario de la base de datos, especificado en la cadena de conexión de Exportación de datos, debe tener los permisos adecuados para crear y modificar en la base de datos de destino. Como mínimo se incluyen:
CRTB
,CRTY
,CRVW
,CRPR
,ALUS
y 'VWDS'. Para obtener más información, consulte Permisos (motor de base de datos).Al menos un usuario tiene permisos extensos en el esquema. El siguiente script crea nuevo usuario de ese tipo.
USE MASTER;
CREATE LOGIN NewUser WITH PASSWORD='newpassword';
USE DESTINATIONDATABASE;
CREATE USER NewUser FOR LOGIN NewUser
GRANT CREATE TABLE, CREATE TYPE, CREATE VIEW, CREATE PROCEDURE, ALTER ANY USER to NewUser
GRANT ALTER, REFERENCES, INSERT, DELETE, UPDATE, SELECT, EXECUTE ON SCHEMA::dbo TO NewUser
Para soluciones y servicios en línea, Azure proporciona un servicio de Key Vault para salvaguardar claves criptográficas, contraseñas y otros secretos. Para usar Almacén de claves de Azure, este servicio propiedad del cliente se debe configurar para conceder permiso a "Servicio de exportación de datos de Dynamics 365”, que se usará para almacenar con seguridad la cadena de conexión de SQL Azure. Para realizar esta configuración con un script de PowerShell, consulte Cómo configurar Azure Key Vault. Como alternativa, este servicio se puede administrar con su API de REST; consulte Administración de Key Vault.
También se aconseja que agregue el dominio https://discovery.crmreplication.azure.net/ a la lista de sitios de confianza en el explorador y habilite ventanas emergentes para este sitio.
Programación para el servicio Exportación de datos
El servicio Exportación de datos expone una API basada en REST que se divide en dos grupos: un conjunto de operaciones de Metadata
para explorar la estructura organizativa de Dataverse, relaciones e información de conexión; y un conjunto de operaciones de Profiles
para configurar y administrar cada replicación de datos. Esta API se define y se documenta completamente en las direcciones URL Swagger siguientes:
Extremo de Swagger | Descripción |
---|---|
https://discovery.crmreplication.azure.net/swagger/docs/2016-01-01 | Definición de JSON de la API del Servicio de exportación de datos para uso por las herramientas de desarrollo y procesos dinámicos |
https://discovery.crmreplication.azure.net/swagger/ui/index# | La versión de fácil uso de esta API para referencia del desarrollador |
Referencia rápida de la API
Para comodidad del lector, estas interfaces se resumen en las siguientes tablas.
Operaciones de metadatos (https://discovery.crmreplication.azure.net/crm/exporter/metadata/
)
Recurso | Métodos | Descripción |
---|---|---|
organizations | GET | Obtener detalles organizativos de todas las organizaciones a las que el usuario actual pertenece |
discover | GET | Obtenga los detalles organizativos de la organización especificada. |
Conector de | GET | Obtener los detalles de conector de la organización especificada. |
entidades | GET | Obtener todas las tablas públicas exportables para la organización especificada. |
relationships | GET | Obtener todas las relaciones exportables para la organización especificada. |
hasorgacceptedprivacyterms | GET | Comprobar si la organización asociada ha aceptado los términos de privacidad. |
acceptprivacyterms | POST | Aceptar la organización especificada para acceso a datos. |
Operaciones con perfiles ([ConnectorURL]/crm/exporter/
)
Recurso | Métodos | Descripción |
---|---|---|
profiles | GET, POST | Obtener todos los perfiles de la organización especificada, crear un nuevo perfil de exportación. |
profiles/{id} | GET, PUT, DELETE | Obtener, actualizar o eliminar un perfil concreto. |
profiles/{id}/activate | POST | Active un perfil, que inicia la replicación de las definiciones de tabla y los datos. |
profiles/{id}/activatemetadata | POST | Active perfil solo para replicación de definiciones de tabla. |
profiles/{id}/activatedata | POST | Active perfil solo para replicación de datos. |
profiles/{id}/deactivate | POST | Desactive un perfil. |
profiles/{id}/test | GET | Realizar operaciones de prueba en un perfil existente. |
profiles/validate | POST | Realizar operaciones de prueba en una descripción de perfil antes de crearla. |
profiles/{id}/failures | GET | Obtener la cadena de conexión a un blob que contiene detalles erróneos para un perfil determinado. |
Obtener acceso
Puesto que sólo están autorizados los administradores del sistema de Dataverse a realizar operaciones de exportación de datos, estas API aplican autorización de autor de llamada mediante el uso de tokens de seguridad de Microsoft Entra ID. El fragmento de código siguiente demuestra cómo generar dicho token para una aplicación web. Debe reemplazar los valores resource
y AppId
con los valores adecuados para su servicio. Este método se puede usar para desarrollo y prueba, pero deben usarse medios más seguros para producción, como el uso del Almacén de claves de Azure.
using Microsoft.Identity.Client;
string resource = "https://contoso.api.crm.dynamics.com"; // Target environment
var AppId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
var redirectUri = "http://localhost"; // Loopback for the interactive login.
// MSAL authentication
var authBuilder = PublicClientApplicationBuilder.Create(AppId)
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
.WithRedirectUri(redirectUri)
.Build();
var scope = resource + "/user_impersonation";
string[] scopes = { scope };
// Use interactive username and password prompt
AuthenticationResult token =
authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync().Result;
string accessToken = token.AccessToken;
Para instrucciones sobre cómo obtener un AppId
, consulte Autorizar acceso a aplicaciones web mediante OAuth 2.0 y Microsoft Entra ID. Para obtener más información sobre la seguridad de usuarios de Azure, consulte Escenarios de autenticación para Microsoft Entra ID.
Gestión de errores y procesamiento de errores
Una vez que un perfil está correctamente configurado, el proceso de sincronización suele ser muy fiable. Sin embargo, si un registro no se sincroniza, se aplica el procesamiento de errores siguiente:
Después del intervalo de reintento configurado, se realiza otro intento de sincronizar el registro. Esto se repite hasta el número máximo configurado de reintentos.
El registro se marca como procesado.
Una entrada de registro de error correspondiente se escribe en el registro de errores.
Se procesa el siguiente registro.
Puesto que el registro está marcado como procesado, no se realiza ningún intento futuro de sincronizar el registro hasta su valor o esquema cambia. (Tenga en cuenta que al volver a escribir valores idénticos en una tabla también se marca como modificada).
Las entradas en el registro de errores son de solo escritura. Los éxitos o errores futuros durante la sincronización del mismo registro no producen la alteración de entradas pasadas para este registro. Por ejemplo, una entrada de error permanecerá en el registro de errores incluso después que el registro se haya sincronizado correctamente en algún ciclo de sincronización posterior.
Precaución
Esta lógica de procesamiento de errores está sujeta a modificaciones en versiones futuras de este servicio.
Estas entradas de error se pueden recuperar a través de la solicitud Obtener detalles de error de un perfil determinado. La respuesta devuelve un URI a un blob de Azure que contiene información de error. Cada línea tiene los siguientes campos separados por comas (se agregan nuevas líneas por claridad):
Entity: <entity-name>,
RecordId: <”N/A” | guid>,
NotificationTime: <datetime>,
ChangeType: <sync-type>,
FailureReason: <description>
Por ejemplo:
Entity: lead,
RecordId: N/A, NotificationTime: , ChangeType: Trigger Initial Export, FailureReason: There is already an object named 'hatest201_lead' in the database.
Entity: account, RecordId: b2a19cdd-88df-e311-b8e5-6c3be5a8b200, NotificationTime: 8/31/2016 6:50:38 PM, ChangeType: New, FailureReason: Invalid object name 'dbo.hatest201_account'.
Vea también
Administrar datos en Dynamics 365
Importar datos
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).