Partager via


Service d′exportation de données

Notes

Depuis novembre 2021, le service d’exportation de données est obsolète. Le service d’exportation de données continuera de fonctionner et sera entièrement pris en charge jusqu’à ce qu’il atteigne la fin du support et la fin de vie en novembre 2022. Pour plus d’informations, voir https://aka.ms/DESDeprecationBlog

L′exportation des données est un service complémentaire disponible en tant que solution Microsoft Dataverse qui permet de répliquer les données Dataverse dans un magasin de base de données SQL Microsoft Azure via un abonnement Microsoft Azure appartenant au client. Les destinations cibles prises en charge sont la base de données SQL Microsoft Azure et le serveur SQL Microsoft Azure sur des ordinateurs virtuels Microsoft Azure. Le service d′exportation de données effectue d′abord une synchronisation intelligente de l′ensemble du schéma et des données Dataverse, puis effectue une synchronisation continue au fur et à mesure que des modifications sont apportées (modifications delta) au système dans Dataverse.

Le service d′exportation de données fournit une interface pour la gestion de la configuration et l′administration continue de ce service dans Dataverse. Pour plus d′informations, voir Répliquer les données dans Azure SQL Database. Cette rubrique décrit l′interface par programme et les problèmes correspondants pour ce service.

Conditions préalables pour l′utilisation du service d′exportation de données

Du fait que ce service nécessite l′accès à une base de données SQL Microsoft Azure externe dans Dataverse, un certain nombre de conditions préalables doivent être satisfaisante avant de pouvoir correctement accéder à ce service. Les conditions préalables suivantes sont expliquées plus en détail du point de vue d′un administrateur dans la section Conditions préalables pour l′utilisation du service de l′exportation de données.

Votre environnement Dataverse doit être configuré de sorte que :

Notes

L’accès par programme à ce service ne requiert pas l’installation de la solution gérée d’exportation des données associée.

La base de données Azure SQL cible doit être configurée de sorte que :

  • L′abonnement doit prendre en charge le volume de données en cours de réplication de votre instance Dataverse.

  • Les paramètres du pare-feu doivent permettre l′accès depuis l′adresse IP de votre service d′exportation de données. Pour plus d′informations, voir Configurer une règle de pare-feu au niveau du serveur Azure SQL Database à l′aide du portail Azure.

  • Il est préférable que l′option « Autoriser l′accès aux services Azure » soit activée.

  • L′utilisateur de la base de données, spécifié dans la chaîne de connexion de l′exportation de données, doit avoir les autorisations de création et de modification appropriées sur la base de données cible. Au minimum, elles incluent : CRTB, CRTY, CRVW, CRPR, ALUS et ′VWDS′. Pour plus d′informations, voir Autorisations (moteur de base de données).

  • Au moins un utilisateur a des autorisations étendues sur le schéma. Le script suivant crée un nouvel utilisateur de ce type.

  
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  
  

Pour obtenir des solutions et services en ligne, Azure fournit un service Key Vault pour protéger les clés de chiffrement, les mots de passe, et d′autres secrets. Pour utiliser Azure Key Vault, ce service appartenant au client doit être configuré de sorte que l′autorisation soit accordée au « service d′exportation des données Dynamics 365 », qui est utilisé pour stocker en toute sécurité la chaîne de connexion SQL Azure. Pour effectuer cette configuration comportant un script de PowerShell, voir Procédure de configuration de Azure Key Vault. Par ailleurs, ce service peut être géré via son API REST ; voir Gestion de Key Vault.

Nous vous recommandons également que d′ajouter le domaine https://discovery.crmreplication.azure.net/ à la liste des sites approuvés de votre navigateur pour les fenêtres contextuelles de ce site.

Programmation du service d′exportation de données

Le service d’exportation des données expose une API basée sur REST qui est divisée en deux groupes : un ensemble d’opérations de Metadata pour explorer la structure organisationnelle, les relations, et les informations de connexion de Dataverse ; et un ensemble d’opérations de Profiles pour configurer et gérer chaque réplication de données. Cette API est entièrement définie et documentée aux URL Swagger suivantes :

Point de terminaison Swagger Description
https://discovery.crmreplication.azure.net/swagger/docs/2016-01-01 Définition du JSON de l′API du service d′exportation de données à utiliser avec des outils de développeurs et des processus dynamiques
https://discovery.crmreplication.azure.net/swagger/ui/index# Version conviviale de cette API à des fins de référence pour les développeurs

Référence rapide à l′API

Pour la simplicité du lecteur, ces interfaces ont été récapitulées dans les tableaux suivants.

Opérations de métadonnées (https://discovery.crmreplication.azure.net/crm/exporter/metadata/)

Ressource méthodes Description
Organisations GET Obtenir des détails organisationnels sur toutes les organisations auxquelles l′utilisateur actuel appartient
détecter GET Obtenez plus de détails organisationnels pour l’organisation spécifiée.
Connecteur GET Obtenez plus de détails sur le connecteur pour l’organisation spécifiée.
entités GET Obtenez toutes les tables publiques exportables pour l’organisation spécifiée.
relations GET Obtenez toutes les relations exportables pour l’organisation spécifiée.
hasorgacceptedprivacyterms GET Vérifiez si l’organisation associée a accepté les conditions de confidentialité.
acceptprivacyterms POST Acceptez l’organisation spécifiée pour l’accès aux données.

Opérations des profils ([ConnectorURL]/crm/exporter/)

Ressource Méthodes Description
profils GET, POST Obtenez tous les profils de l’organisation spécifiée, créer un profil d’exportation.
profiles/{id} GET, PUT, DELETE Obtenez, mettez à jour ou supprimez un profil spécifique.
profiles/{id}/activate POST Activez un profil, qui démarre la réplication des définitions de table et des données associées.
profiles/{id}/activatemetadata POST Activez le profil pour la réplication des définitions de table uniquement.
profiles/{id}/activatedata POST Activez le profil pour la réplication des données uniquement.
profiles/{id}/deactivate POST Désactivez un profil.
profiles/{id}/test GET Exécutez des opérations de test sur un profil existant.
profiles/validate POST Exécutez des opérations de test sur une description de profil avant de la créer.
profiles/{id}/failures GET Obtenez la chaîne de connexion à un objet blob contenant les détails d’un échec pour un profil donné.

Obtenir l′accès

Puisque seuls les administrateurs système Dataverse sont autorisés à effectuer des opérations d′exportation de données, ces API appliquent l′autorisation de l′appelant à l′aide de jetons de sécurité de Microsoft Entra ID. L′extrait de code suivant illustre la génération d′un tel jeton pour une application web. Vous devez remplacer les valeurs resource et AppId par ces valeurs appropriées à votre service. Cette méthode peut être utilisée pour le développement et le test, mais des moyens plus sécurisés doivent être utilisés pour la production, telles que Azure Key Vault.

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;

Pour obtenir des instructions sur la manière dont vous pouvez obtenir un AppId, voir Autoriser l′accès aux applications Web à l′aide de OAuth 2.0 et Microsoft Entra ID. Pour plus d′informations sur la sécurité de l′utilisateur Azure, voir Scénarios d′authentification pour Microsoft Entra ID.

Gestion des erreurs et traitement des échecs

Une fois qu′un profil est correctement configuré, le processus de synchronisation est généralement très fiable. Toutefois, si la synchronisation d′un enregistrement échoue, le traitement des échecs ci-après est appliqué :

  1. Une fois que l′intervalle avant une nouvelle tentative est configuré, une autre tentative est effectuée pour synchroniser l′enregistrement. Cette opération est répétée jusqu′au nombre maximal configuré de nouvelles tentatives.

  2. L′enregistrement est marqué comme traité.

  3. Une entrée d′enregistrement correspondante est écrite dans le journal des erreurs.

  4. L′enregistrement suivant est traité.

Étant donné que l′enregistrement est marqué comme traité, aucune tentative ultérieure n′est effectuée pour synchroniser l′enregistrement jusqu′à ce que sa valeur ou son schéma change. (Notez que l′écriture de valeurs identiques dans une table la marque également comme modifiée.)

Les entrées du journal des erreurs sont en écriture seule. Les succès ou échecs futurs pendant la synchronisation du même enregistrement n′entraînent pas l′altération des entrées antérieures pour cet enregistrement. Par exemple, une entrée en échec est conservée dans le journal des erreurs même après que l′enregistrement ait été synchronisé avec succès pendant un cycle de synchronisation ultérieur.

Attention

Cette logique de traitement des erreurs peut faire l′objet de modifications dans les prochaines versions de ce service.

Ces entrées en échec peuvent être récupérées via la requête Obtenir les détails de l′échec pour un profil donné. La réponse retourne un URI vers un objet blob Azure contenant les informations d′échec. Chaque ligne contient les champs séparés par des virgules ci-après (de nouvelles lignes ont été ajoutées pour plus de clarté) :

  
Entity: <entity-name>,   
RecordId: <”N/A” | guid>,   
NotificationTime: <datetime>,   
ChangeType: <sync-type>,  
FailureReason: <description>  
  

Par exemple :

  
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'.  

Voir aussi

Gérer vos données dans Dynamics 365
Importer des données

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).