Suivre les modifications des données d’entité avec Change Tracking et l’API web

Effectué

Généralement, les organisations doivent synchroniser les données sur plusieurs systèmes. Microsoft Dataverse fournit une fonctionnalité pour gérer efficacement ce scénario, appelée suivi des modifications. Lorsque le suivi des modifications est activé, vous pouvez générer des applications pour rechercher ces modifications.

Activer le suivi des modifications pour une table

Vous pouvez activer le suivi des modifications sur une table en définissant l’indicateur Suivi des modifications sur les paramètres de table de Power Apps Maker Portal, situé sous la section Options avancées > Pour cette table.

Selon la documentation OData 4.0, les liens delta sont des « liens opaques générés par le service permettant au client de récupérer les modifications ultérieures à un résultat ». Microsoft a intégré cette norme dans le suivi des modifications de Dataverse pour fournir une méthode standard et commune d’interfaçage avec les données de modification au fur et à mesure qu’elles se produisent. Pour en savoir plus sur les liens delta, consultez OData version 4.0 - Liens Delta.

Une fois que vous avez émis une requête de suivi des modifications, votre réponse contient un lien delta, que vous transmettrez ensuite dans votre prochaine requête pour obtenir les modifications qui se sont produites depuis la requête initiale. Il appartient à votre application de maintenir le lien delta, de la même manière que vous auriez pu effectuer le suivi avec des horodatages dans le passé.

Récupérer les modifications dans les tables à l’aide de l’API web

Après avoir activé le suivi des modifications sur une table, vous pouvez récupérer ses modifications au moyen de l’API web en ajoutant odata.track-changes comme en-tête de préférence dans votre requête web. L’exemple suivant demande des modifications à la table Compte pour un ensemble spécifique de champs (name, account number, telephone1 et fax).

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

Lors de la requête initiale, vous recevez le jeu de données complet qui s’applique à la requête, car aucun delta n’a été appliqué. Cependant, la réponse affiche la valeur @odata.deltaLink. Ce lien comporte un paramètre deltatoken destiné à être transmis à votre requête suivante lorsque vous souhaitez connaître les modifications appliquées depuis l’exécution de cette requête. Considérez ce processus comme similaire à la façon dont vous géreriez la pagination dans OData.

L’exemple suivant est une réponse à la requête de compte précédente :

{
          "@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"
        }
    ]
}

Dans ce scénario, considérez qu’un certain temps s’est écoulé et que vous souhaitez maintenant voir si d’autres modifications ont été appliquées. Le paramètre @odata.deltaLink vous permet d’exécuter votre requête (ou extraire son deltatoken si vous gérez les chaînes de connexion différemment) pour connaître les modifications survenues depuis votre dernière requête.

L’exemple suivant montre comment récupérer des modifications depuis cette dernière requête en exécutant le @odata.deltaLink renvoyé :

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

Dans ce scénario, imaginez qu’un compte a été créé et qu’un autre a été supprimé. Votre réponse ressemblerait alors à l’exemple suivant :

{
          "@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"
        }
    ]
}

Comme le montre l’exemple, un autre lien delta a été fourni que vous pourrez ensuite utiliser la prochaine fois que vous aurez besoin de savoir quelles modifications se sont produites.

Récupérer le nombre de modifications dans un delta

Vous pouvez également récupérer le nombre de modifications apportées dans un delta donné en ajoutant le paramètre $count à votre requête.

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