Änderungen von Entitätsdaten mit der Änderungsnachverfolgung und der Web-API nachverfolgen

Abgeschlossen

In der Regel müssen Organisationen Daten über mehrere Systeme hinweg synchronisieren. Microsoft Dataverse bietet eine Funktion zur effizienten Verwaltung dieses Szenarios – die Änderungsnachverfolgung. Bei aktivierter Änderungsnachverfolgung können Sie Anwendungen erstellen, um diese Änderungen abzufragen.

Änderungsnachverfolgung für eine Tabelle aktivieren

Sie können die Änderungsnachverfolgung für eine Tabelle aktivieren, indem Sie das Flag Änderungen nachverfolgen in den Tabelleneinstellungen im Power Apps Maker Portal setzen. Sie finden diese Einstellung im Abschnitt Weitere Einstellungen > Für diese Tabelle.

Laut der OData 4.0-Dokumentation sind Deltalinks „undurchsichtige, vom Dienst generierte Links, die der Client verwendet, um nachfolgende Änderungen an einem Ergebnis abzurufen“. Microsoft hat diesen Standard in die Änderungsverfolgung in Dataverse integriert, um eine gemeinsame, standardisierte Methode für den Umgang mit Änderungsdaten im Laufe der Zeit bereitzustellen. Weitere Informationen zu Deltalinks finden Sie unter OData Version 4.0 – Deltalinks.

Nach dem Ausstellen einer Anforderung zur Änderungsnachverfolgung enthält Ihre Antwort einen Deltalink, den Sie an die nächste Anforderung übergeben, um die seit der ersten Anforderung aufgetretenen Änderungen abzurufen. Es ist die Aufgabe Ihrer App, den Deltalink beizubehalten. Dies ist mit der Art und Weise vergleichbar, auf die Sie in der Vergangenheit die Verfolgung anhand von Datums-/Zeitstempeln durchgeführt haben.

Änderungen an Tabellen mithilfe der Web-API abrufen

Nachdem Sie die Änderungsnachverfolgung für eine Tabelle aktiviert haben, können Sie ihre Änderungen über die Web-API abrufen, indem Sie der Webanforderung odata.track-changes als Einstellungskopfzeile hinzufügen. Im folgenden Beispiel werden Änderungen von der Kontotabelle für eine bestimmte Gruppe von Feldern (name, account number, telephone1 und fax) angefordert.

GET [Organization URI]/org1/api/data/v9.2/accounts?$select=name,accountnumber,telephone1,fax HTTP/1.1
Prefer: odata.track-changes
Cache-Control: no-cache
OData-Version: 4.0
Content-Type: application/json

Bei der ersten Anforderung erhalten Sie den gesamten Datensatz, der für die Abfrage gilt, da kein Delta angewendet wurde. In der Antwort wird jedoch ein @odata.deltaLink-Wert angezeigt. Dieser Link enthält einen Parameter deltatoken, der an die nachfolgende Anforderung übergeben werden soll, wenn Sie anzeigen möchten, welche Änderungen seit Ausführung dieser Abfrage angewendet wurden. Sie können sich diesen Vorgang ähnlich wie das Paging in OData vorstellen.

Das folgende Beispiel ist eine Antwort auf die vorherige Kontoanforderung:

{
          "@odata.context":"[Organization URI]/data/v9.2/$metadata#accounts(name,telephone1,fax)/$delta",
          "@odata.deltaLink":"[Organization URI]/api/data/v9.2/accounts?$select=name,telephone1,fax&$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44",
"value":
    [
        {
            "@odata.etag":"W/\"915244\"",
            "name":"Monte Orton",
            "telephone1":"555000",
            "fax":"10101",
            "accountid":"60c4e274-0d87-e711-80e5-00155db19e6d"
        },
        {
            "@odata.context":"[Organization URI]/api/data/v9.2/$metadata#accounts/$deletedEntity",
            "id":"2e451703-c686-e711-80e5-00155db19e6d",
            "reason":"deleted"
        }
    ]
}

In diesem Szenario ist einige Zeit vergangen, und Sie möchten nun prüfen, ob andere Änderungen angewendet wurden. Sie können den Parameter @odata.deltaLink zum Ausführen der Abfrage verwenden (oder den zugehörigen deltatoken extrahieren, wenn Sie Verbindungszeichenfolgen anders verwalten) und anzeigen, welche Änderungen seit der letzten Anforderung vorgenommen wurden.

Im folgenden Beispiel wird gezeigt, wie Sie Änderungen seit dieser letzten Anforderung abrufen, indem Sie den zurückgegebenen @odata.deltaLink ausführen:

GET [Organization URI]/api/data/v9.2/accounts?$select=name,accountnumber,telephone1,fax&$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44

Stellen Sie sich in diesem Szenario vor, dass ein neues Konto erstellt und ein anderes gelöscht wurde. Ihre Antwort würde dann ungefähr so aussehen:

{
          "@odata.context":"[Organization URI]/data/v9.2/$metadata#accounts(name,telephone1,fax)/$delta",
          "@odata.deltaLink":"[Organization URI]/api/data/v9.2/accounts?$select=name,telephone1,fax&$deltatoken=919058%2108%2f22%2f2017%2008%3a21%3a20",
"value":
    [
        {
            "@odata.etag":"W/\"915244\"",
            "name":"Monte Orton",
            "telephone1":"555000",
            "fax":"10101",
            "accountid":"60c4e274-0d87-e711-80e5-00155db19e6d"
        },
        {
            "@odata.context":"[Organization URI]/api/data/v9.1/$metadata#accounts/$deletedEntity",
            "id":"2e451703-c686-e711-80e5-00155db19e6d",
            "reason":"deleted"
        }
    ]
}

Wie Sie diesem Beispiel entnehmen können, wurde ein weiterer Deltalink bereitgestellt, den Sie verwenden können, wenn Sie das nächste Mal die erfolgten Änderungen anzeigen möchten.

Die Anzahl der Änderungen in einem Delta abrufen

Sie sind auch in der Lage, die Anzahl der in einem bestimmten Delta vorgenommenen Änderungen abzurufen, indem Sie der Anforderung den Parameter $count hinzufügen.

GET [Organization URI]/api/data/v9.2/accounts/$count?$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44