Datenexportservice
Hinweis
Mit Wirkung vom November 2021 wurde der Datenexportdienst eingestellt. Der Datenexportdienst funktioniert weiterhin und wird vollständig unterstützt, bis er im November 2022 das Ende des Supports und das Ende der Lebensdauer erreicht. Weitere Informationen: https://aka.ms/DESDeprecationBlog
Der Datenexport ist ein Add-On-Service, der von der Microsoft Dataverse-Lösung bereitgestellt wird und der die Möglichkeit gibt, Dataverse-Daten auf einen Microsoft Azure-SQL-Datenbankspeicher in einem kundeneigenen Microsoft Azure-Abonnement zu replizieren. Die unterstützten Ziele sind Microsoft Azure SQL-Datenbank und Microsoft Azure SQL Server auf virtuellen Microsoft Azure-Computern. Der Datenexport synchronisiert das gesamte Dataverse-Schema und die anfänglichen Daten intelligent und synchronisiert danach auf fortlaufender Basis, wenn Änderungen (Delta-Änderungen) in Dataverse erfolgen.
Der Datenexportservice bietet eine Schnittstelle zum Verwalten der Konfiguration und der laufenden Verwaltung dieses Services innerhalb von Dataverse. Weitere Informationen finden Sie unter Replizieren von Daten in die Azure SQL-Datenbank. In diesem Thema werden die entsprechenden programmgesteuerte Benutzeroberfläche und die Probleme für diesen Service behandelt.
Voraussetzungen für die Verwendung des Datenexport-Service
Da dieser Service einen externen Zugriff auf die Microsoft Azure-SQL-Datenbank vom Dataverse erfordert, müssen einige Voraussetzungen erfüllt sein, bevor Sie erfolgreich auf den Service zugreifen können. Die folgenden Voraussetzungen werden im Detail aus Sicht eines Administrators erläutert im Abschnitt Voraussetzungen für die Verwendung des Datenexport-Service-.
Ihre Dataverse-Umgebung muss entsprechend konfiguriert sein:
Die Tabellen, die exportiert werden sollen, sind mit Änderungsverfolgung aktiviert. Weitere Informationen finden Sie unter Verwenden von Änderungsnachverfolgung zum Synchronisieren von Daten mit externen Systemen.
Code wird im Rahmen eines Benutzers mit der Systemadministrator-Sicherheitsrolle ausgeführt.
Hinweis
Der programmatische Zugriff auf diesen Dienst erfordert nicht die Installation der zugehörigen Data Export Managed Solution.
Die SQL Azure Ziel Datenbank muss konfiguriert werden, damit:
Das Abonnement muss die Menge der Daten, die von Ihrer Dataverse-Instanz repliziert werden, unterstützen.
Firewalleinstellungen muss den Zugriff von der IP-Adresse des Datenexportservice erlauben. Weitere Informationen: Eine Azure SQL Datenbankserverstufen-Firewallregel mithilfe von Azure Portal konfigurieren.
Es wird empfohlen, die Option "Zugriff an Azure Services" aktiviert zu lassen.
Der Datenbankbenutzer, der in der Datenexportverbindungszeichenfolge definiert ist, muss die richtigen Berechtigungen verfügen, um auf der Zieldatenbank zu erstellen und zu ändern. Dazu gehören mindestens:
CRTB
,CRTY
,CRVW
,CRPR
,ALUS
, und 'VWDS'. Weitere Informationen finden Sie unter Berechtigungen (Database Engine).Mindestens ein Benutzer muss Berechtigungen für das Schema haben. Im folgenden Skript wird ein neuer Benutzer erstellt.
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
Für online Lösungen und Services stellt Azure einen Key Vault-Service bereit, um kryptografische Schlüssel, Kennwörter und andere Geheimnisse zu schützen. Um Vault Azure zu verwenden, muss dieser kundeneigene Service konfiguriert sein, damit die Berechtigung für "Dynamics 365-Datenexport-Service" gewährt wird, das verwendet wird, um die SQL Azure-Verbindungszeichenfolge sicher zu speichern. Um diese Konfiguration mit einem PowerShell-Skript ausführen, siehe Einrichten von Azure Key Vault. Alternativ kann dieser Service über die REST-API verwaltet werden; sehen Sie dazu Key Vault-Verwaltung.
Es ist ratsam, dass die Domäne https://discovery.crmreplication.azure.net/ der Liste der vertrauenswürdigen Websites in Ihrem Browser hinzugefügt und Popups für diesen Ort aktiviert werden.
Programmierung für den Datenexport-Service
Der Datenexport-Dienst stellt eine REST-basierte API zur Verfügung, die in zwei Gruppen unterteilt ist: eine Reihe von Metadata
-Operationen zum Erkunden von Dataverse-Organisationsstruktur, Beziehungen und Verbindungsinformationen und eine Reihe von Profiles
-Operationen zum Konfigurieren und Verwalten jeder Datenreplikation. Die API ist in den folgenden Swagger URLs definiert und dokumentiert: Swaggern von URLs:
Swagger-Endpunkt | Beschreibung |
---|---|
https://discovery.crmreplication.azure.net/swagger/docs/2016-01-01 | JSON-Definition der Datenexport-Service API zur Verwendung mit Entwicklertools und dynamische Prozesse |
https://discovery.crmreplication.azure.net/swagger/ui/index# | Die benutzerfreundliche Version dieser API als Entwicklerreferenz |
API Kurzübersicht
Diese Schnittstellen werden für den Benutzer in den folgenden Tabellen zusammengefasst.
Metadaten-Vorgänge (https://discovery.crmreplication.azure.net/crm/exporter/metadata/
)
Ressource | Methoden | Beschreibung |
---|---|---|
Organisationen | GET | Ruft Organisationsdetails für alle Organisationen ab, zu denen der aktuelle Benutzer gehört |
Entdecken | GET | GET Organisationsdetails für die angegebene Organisation abrufen. |
Power BI-Connector | GET | GET holt Konnektor-Details für die angegebene Organisation. |
entities | GET | Ruft alle exportierbaren öffentlichen Tabellen für die angegebene Organisation ab. |
Beziehungen | GET | Holen Sie alle exportierbaren Beziehungen für die angegebene Organisation. |
hasorgacceptedprivacyterms | GET | Prüfen, ob die zugehörige Organisation die Datenschutzbestimmungen akzeptiert hat. |
acceptprivacyterms | NACHRICHT | Akzeptieren Sie die angegebene Organisation für den Datenzugriff. |
Profilvorgänge ([ConnectorURL]/crm/exporter/
)
Ressource | Methoden | Beschreibung |
---|---|---|
Profile | GET, POST | Hole alle Profile für die angegebene Organisation, erstelle ein neues Exportprofil. |
Profile/{id} | GET, PUT, DELETE | Holen, aktualisieren oder löschen Sie ein bestimmtes Profil. |
Profile/{id}/aktivieren | NACHRICHT | Aktivieren eines Profils, das die Replikation sowohl der zugehörigen Tabellendefinitionen als auch der Daten startet. |
Profile/{id}/Metadaten aktivieren | NACHRICHT | Aktivieren Sie das Profil nur für die Replikation von Tabellendefinitionen. |
Profile/{id}/Daten aktivieren | NACHRICHT | Aktivieren Sie ein Profil nur für die Datenreplikation. |
Profile/{id}/deaktivieren | NACHRICHT | Deaktivieren Sie ein Profil. |
Profile/{id}/Test | GET | Führen Sie Testoperationen an einem vorhandenen Profil durch. |
Profile/überprüfen | NACHRICHT | Führen Sie Testoperationen an einer Profilbeschreibung durch, bevor Sie sie erstellen. |
Profile/{id}/Fehler | GET | Abrufen der Verbindungszeichenfolge zu einem Blob, der Fehlerdetails für ein bestimmtes Profil enthält. |
Zugriff erhalten
Da nur Dataverse-Systemadministratoren die Autorisierung besitzen, Datenexportvorgänge auszuführen, erzwingen diese APIs die Aufruferautorisierung durch die Nutzung von Microsoft Entra ID-Sicherheitstoken. Der folgende Codeausschnitt wird zeigt das Generieren eines Tokens für eine Webanwendung. Sie müssen resource
und AppId
-Werte durch die Werte ersetzen, die Ihrem Dienst entsprechen. Diese Methode kann für die Entwicklung und Tests verwendet werden, aber für die Produktion sollten sicherere Methoden wie Azure Key Vault genutzt werden.
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;
Anweisungen, wie Sie eine AppId
erhalten, finden Sie unter Autorisieren des Zugriffs auf Webanwendungen mithilfe von OAuth 2.0 und Microsoft Entra ID. Weitere Informationen zur Azure-Benutzersicherheit finden Sie unter Authentifizierungsszenarien für Microsoft Entra ID.
Fehlerbehandlung und Fehlerverarbeitung
Sobald ein Profil korrekt konfiguriert ist, ist die Synchronisierung normalerweise sehr zuverlässig. Wenn ein Datensatz nicht synchronisiert, gilt die folgende Fehlerverarbeitung:
Nach dem konfigurierten Wiederholungsintervall wird ein weiterer Versuch den Datensatz zu synchronisieren gemacht. Dies wird für die konfigurierte maximale Anzahl von Wiederholungen versucht.
Der Datensatz wird als verarbeitet gekennzeichnet.
Ein entsprechender Fehlereintrag wird das Fehlerprotokoll geschrieben.
Der nächste Datensatz wird verarbeitet.
Da der Datensatz als verarbeitet markiert ist, wird kein zukünftiger Versuch gemacht, den Datensatz zu synchronisieren bis der Wert oder das Schema geändert wird. (Hinweis, dass das Schreiben von identischen Werten zurück in eine Tabelle als bearbeitet gekennzeichnet wird.)
Die Einträge im Fehlerprotokoll sind schreibgeschützt. Zukünftige Erfolge oder Fehler während der Synchronisierung im gleichen Datensatz bedeuten führen nicht zur Ändern von alten Einträgen für diesen Datensatz. Beispielsweise bleibt ein Fehlereintrag im Fehlerprotokoll, selbst wenn der Datensatz erfolgreich während eines späteren Synchronisierungszyklus synchronisiert wurde.
Achtung
Diese Fehlerablauflogik kann sich in zukünftigen Versionen des Dienstes ändern.
Diese Fehlereinträge können über die Anforderung Rufen Sie die für gegebenes Fehlerdetails ein Profil ab abgerufen werden. Die Antwort gibt eine URI für einen Azure-Blob zurück, der Fehlerinformationen enthält. Jede Zeile umfasst die folgenden Felder durch Kommas getrennten Felder (Zeilenumbrüche aus Gründen der Übersichtlichkeit hinzugefügt):
Entity: <entity-name>,
RecordId: <”N/A” | guid>,
NotificationTime: <datetime>,
ChangeType: <sync-type>,
FailureReason: <description>
Beispiel:
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'.
Siehe auch
Ihre Daten in Dynamics 365 verwalten
Importieren von Daten
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).