Aggiornamento di record con OData

Completato

Per aggiornare un record esistente tramite OData è necessario usare la richiesta PUT. In modo simile all'uso della richiesta POST, è necessario specificare il record nel corpo della richiesta come documento JSON. Tuttavia, in questo caso, è necessario specificare la chiave primaria del record anche nell'URL.

Business Central deve inoltre assicurarsi che si stia aggiornando la versione più recente di un record e a questo scopo usa un token di concorrenza. È necessario inviare questo token come intestazione HTTP nella richiesta. Business Central potrà quindi verificare nel database che si stia aggiornando la versione più recente di un record e che nessun altro utente lo abbia aggiornato nel frattempo. Per recuperare questo token è innanzitutto necessario richiedere i dettagli di un record specifico prima di poter aggiornare i valori. Quando si esegue una richiesta GET per recuperare dati, si riceve un documento JSON con una chiave @odata.etag nel documento. Il valore di questa chiave è il token di concorrenza che è necessario copiare e usare nella richiesta PUT.

Screenshot di esempio di etag OData.

È necessario inviare il valore della chiave etag come intestazione HTTP If-Match. È possibile selezionare le intestazioni e aggiungere un'intestazione If-Match con il valore dell'etag, come illustra l'esempio riportato di seguito.

@odata.etag è un valore stringa in un documento JSON. Un valore stringa in un documento JSON inizia e finisce sempre con un carattere " (virgolette doppie). Poiché il valore stesso @odata.etag contiene le virgolette nel valore stringa, le virgolette in @odata.etag sono caratteri di escape. Quando si usa il valore dell'etag nell'intestazione If-Match, è necessario rimuovere i caratteri di escape.

Ciò significa che un valore di:

W/\"JzQ0O3ZSUjBKTVdWenZvZ3IyTGlFSStWbllUVUNkdUZVQmxSV3p1dk1xMFo4REU9MTswDsn\"

Diventa:

W/"JzQ0O3ZSUjBKTVdWenZvZ3IyTGlFSStWbllUVUNkdUZVQmxSV3p1dk1xMFo4REU9MTswDsn"

Si noti anche che l'URL ha come destinazione un record specifico, ovvero il record Clienti con chiave primaria 10000.

Screenshot dell'intestazione If-Match con il valore della chiave etag.