Come tenere traccia delle modifiche ai dati di entità grazie al rilevamento delle modifiche e all'API Web
In genere le organizzazioni devono sincronizzare i dati su più sistemi. Microsoft Dataverse offre una funzionalità per gestire in modo efficiente questo scenario, noto come rilevamento delle modifiche. Con il rilevamento delle modifiche abilitato è possibile creare applicazioni per eseguire query in relazione a queste modifiche.
Abilitazione del rilevamento delle modifiche per una tabella
Per abilitare il rilevamento delle modifiche per una tabella, selezionare il flag Tieni traccia delle modifiche nelle impostazioni della tabella nel Maker Portal di Power Apps, disponibile nella sezione Opzioni avanzate > Per questa tabella.
Collegamenti delta
Secondo la documentazione OData 4.0, i collegamenti delta sono "collegamenti opachi generati dal servizio che il client usa per recuperare le successive modifiche a un risultato". Microsoft ha integrato questo standard nel rilevamento delle modifiche in Dataverse per fornire un metodo comune e standard per l'interfacciamento con i dati di modifica man mano che si verificano nel tempo. Per altre informazioni sui collegamenti delta, vedere OData versione 4.0 - Collegamenti delta.
Dopo aver emesso una richiesta di rilevamento delle modifiche, la risposta contiene un collegamento delta da passare alla richiesta successiva per ottenere le modifiche verificatesi dalla richiesta iniziale. L'app gestirà il collegamento delta in modo simile al processo di tracciamento con timestamp usato in passato.
Recupero delle modifiche nelle tabelle mediante l'API Web
Dopo avere abilitato il rilevamento delle modifiche su una tabella, è possibile recuperarne le modifiche tramite l'API Web aggiungendo odata.track-changes come intestazione delle preferenze nella richiesta Web. L'esempio seguente richiede modifiche dalla tabella dell'account per un set specifico di campi (name, account number, telephone1 e 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
Alla richiesta iniziale si riceverà l'intero set di dati che si applica alla query perché non si è applicato un delta. Tuttavia la risposta mostra un valore @odata.deltaLink. Questo collegamento contiene un parametro deltatoken da passare alla richiesta successiva nel caso in cui si voglia vedere quali modifiche si sono applicate dall'esecuzione di questa query. Il processo è simile alla gestione del paging in OData.
L'esempio seguente è una risposta alla precedente richiesta di conto:
{
"@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 questo scenario si consideri che sia trascorso del tempo e si intenda ora vedere se sono presenti altre modifiche. È possibile usare il parametro @odata.deltaLink per eseguire la query (o estrarne il deltatoken se si gestiscono le stringhe di connessione in modo diverso) e vedere quali modifiche si sono verificate dall'ultima richiesta.
L'esempio seguente mostra come recuperare le modifiche dall'ultima richiesta eseguendo il valore @odata.deltaLink restituito:
GET [Organization URI]/api/data/v9.2/accounts?$select=name,accountnumber,telephone1,fax&$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44
In questo scenario si immagini di aver creato un nuovo account e di averne eliminato uno. La risposta sarà simile al seguente esempio:
{
"@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"
}
]
}
Come mostrato nell'esempio, è stato fornito un altro collegamento delta che sarà possibile usare al successivo tentativo di vedere le modifiche apportate.
Recupero del numero di modifiche in un delta
È anche possibile recuperare il numero di modifiche apportate in un dato delta aggiungendo il parametro $count alla richiesta.
GET [Organization URI]/api/data/v9.2/accounts/$count?$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44