Share via


Synchronisieren von Daten mit externen Systemen mithilfe der Änderungsnachverfolgung

 

Veröffentlicht: Januar 2017

Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Mit der neuen Änderungsnachverfolgungsfunktion in Microsoft Dynamics 365 können die Daten performant synchronisiert werden, indem feststellt wird, welche Daten geändert wurden, nachdem die Daten ursprünglich extrahiert oder zuletzt synchronisiert wurden. Zuvor war es ohne diese neue Funktion schwierig, einen effizienten und zuverlässigen Mechanismus zu entwickeln, um zu bestimmen, welche Datensätze in Dynamics 365 geändert wurden. In diesem Thema wird erläutert, wie Änderungen für eine Entität abgerufen werden.

In diesem Thema

Aktivieren der Änderungsnachverfolgung für eine Entität

Abrufen von Änderungen für eine Entität

Beispielcode

Aktivieren der Änderungsnachverfolgung für eine Entität

Bevor Sie die Änderungen für eine Entität abrufen, sollten Sie sicherstellen, dass die Änderungsnachverfolgungsfunktion für diese Entität aktiviert ist. Diese Funktion kann aktiviert werden, indem Sie die Anpassungsbenutzeroberfläche verwenden, oder programmgesteuert, indem die ChangeTrackingEnabled-Eigenschaft auf True festgelegt wird. Weitere Informationen zur Verwendung von Anpassungsbenutzeroberfläche finden Sie unter Aktivieren der Änderungsnachverfolgung zur Steuerung der Datensynchronisierung.

Abrufen von Änderungen für eine Entität

Wenn Änderungsnachverfolgung für eine Entität aktiviert ist, können Sie die RetrieveEntityChangesRequest-Nachricht verwenden, um die Änderungen für diese Entität abzurufen. Beim ersten Verwenden dieser Nachricht werden alle Datensätze für die Entität zurückgegeben, und diese Daten können verwendet werden, um den externen Speicher aufzufüllen. Die Nachricht gibt zudem eine Versionsnummer zurück, die mit der nächsten Verwendung der RetrieveEntityChangesRequest-Nachricht zurückgesendet wird, sodass nur Daten für Änderungen, die seit dieser Version aufgetreten sind, zurückgegeben werden.

Sie sollten folgende Einschränkungen beim Abrufen von Änderungen für eine Entität berücksichtigen:

  • Nur eine Entität wird beim Abrufen von Änderungen nachverfolgt. Wenn das Abrufen von Änderungen ohne Version/Token ausgeführt wird, behandelt der Server dies als Mindestversion des Systems, wobei alle Datensätze als neu zurückgegeben werden. Gelöschte Objekte werden nicht zurückgegeben.

  • Änderungen werden zurückgegeben, wenn das letzte Token innerhalb eines Standardwerts von 90 Tagen liegt. Liegt es über 90 Tagen, gibt das System alle Datensätze zurück.

  • Wenn ein Client einen Änderungssatz für eine Entität besitzt, z. B. Version 1, wird ein Datensatz erstellt und vor der nächsten Änderungsabfrage gelöscht, sie erhalten das gelöschte Element, selbst wenn sie nicht das Element für den Start hatten.

  • Datensätze werden in der Reihenfolge abgerufen wie von der serverseitige Logik bestimmt. Normalerweise erhält der Endbenutzer zuerst alle neuen oder aktualisierten Datensätze (sortiert nach Versionsnummer), gefolgt von den gelöschten Datensätzen.  Wenn 3000 Datensätze erstellt oder aktualisiert werden und 2000 Datensätze werden gelöscht, gibt Dynamics 365 eine Sammlung von 5000 Datensätzen zurück, in der die ersten 3000 Einträge die der neuen oder aktualisierten Datensätze sind und die letzten 2000 Einträge die der gelöschten Datensätze.

  • Wenn die neue oder aktualisierte Elementsammlung größer als 5000 ist, kann der Benutzer durch die Sammlung blättern.

Beispielcode

Der folgende Codeausschnitt zeigt, wie die RetrieveEntityChangesRequest-Nachricht verwendet wird, um die Änderungen für eine Entität abzurufen. Das vollständige Beispiel finden Sie unter Synchronisieren von Daten mit externen Systemen mithilfe der Änderungsnachverfolgung.


string token;

// Initialize page number.
int pageNumber = 1;
List<Entity> initialrecords = new List<Entity>();

// Retrieve records by using Change Tracking feature.
RetrieveEntityChangesRequest request = new RetrieveEntityChangesRequest();
request.EntityName = _customBooksEntityName.ToLower();
request.Columns = new ColumnSet("sample_bookcode", "sample_name", "sample_author");
request.PageInfo = new PagingInfo() { Count = 5000, PageNumber = 1, ReturnTotalRecordCount = false };


// Initial Synchronization. Retrieves all records as well as token value.
Console.WriteLine("Initial synchronization....retrieving all records.");
while (true)
{
    RetrieveEntityChangesResponse response = (RetrieveEntityChangesResponse)_serviceProxy.Execute(request);

    initialrecords.AddRange(response.EntityChanges.Changes.Select(x => (x as NewOrUpdatedItem).NewOrUpdatedEntity).ToArray());
    initialrecords.ForEach(x => Console.WriteLine("initial record id:{0}", x.Id));
    if (!response.EntityChanges.MoreRecords)
    {
        // Store token for later query
        token = response.EntityChanges.DataToken;
        break;

    }
    // Increment the page number to retrieve the next page.
    request.PageInfo.PageNumber++;
    // Set the paging cookie to the paging cookie returned from current results.
    request.PageInfo.PagingCookie = response.EntityChanges.PagingCookie;
}

Siehe auch

Definieren von Alternativschlüsseln für eine Entität
Verwenden Sie einen Alternativschlüssel, um Datensätze zu erstellen
Einen Datensatz mit Upsert einfügen oder aktualisieren

Microsoft Dynamics 365

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright