Ridurre la perdita potenziale dei dati utilizzando la concorrenza ottimistica

 

Data di pubblicazione: novembre 2016

Si applica a: Dynamics CRM 2015

In un sistema a thread multipli e multiutente come Microsoft Dynamics 365, le operazioni e le modifiche ai dati si verificano spesso parallelamente. Un problema sorge quando due o più operazioni di aggiornamento o eliminazione hanno luogo contemporaneamente sulla stessa parte di dati. Questa situazione potrebbe potenzialmente comportare la perdita dei dati. In questa versione dell'SDK viene fornita la possibilità per le applicazioni di rilevare se un record di entità è stato modificato sul server da quando l'applicazione ha recuperato il record a quando tenta di aggiornarlo o eliminarlo.

Nota

Per le organizzazioni di Microsoft Dynamics CRM Online, questa funzionalità è disponibile solo se nell'organizzazione è stato eseguito l'Aggiornamento 1 di Dynamics CRM Online 2015. Questa funzionalità non è disponibile per Dynamics CRM (locale).

La concorrenza ottimistica (Optimistic Concurrency) è supportata da tutte le entità predefinite abilitate per la sincronizzazione offline e per tutte le entità personalizzate. Puoi determinare se un'entità supporta la concorrenza ottimistica recuperando i metadati dell'entità tramite una chiamata SDK o visualizzando i metadati tramite il browser dei metadati e controllare se l'attributo IsOptimisticConcurrencyEnabled è impostato su true. Per le entità personalizzate, questa proprietà è impostata su true per impostazione predefinita.Per visualizzare i metadati di entità per l'organizzazione, installa la soluzione Browser di metadati descritta in Visualizzazione dei metadati per l'organizzazione. Puoi inoltre visualizzare i metadati per un'organizzazione non personalizzata nel file Excel EntityMetadata.xlsx incluso nella cartella di livello superiore di Download degli SDK.

In questo argomento

Abilitare la concorrenza ottimistica

Aggiornare o eliminare un record

Gestire le eccezioni

Abilitare la concorrenza ottimistica

Puoi abilitare la concorrenza ottimistica controllando il comportamento durante l'esecuzione di UpdateRequest impostando la proprietà ConcurrencyBehavior della richiesta a IfRowVersionMatches. Analogamente, per DeleteRequest, imposta la proprietà ConcurrencyBehavior.

Quando utilizzi il contesto del servizio di organizzazione per modificare i dati, imposta ConcurrencyBehavior sull'oggetto OrganizationServiceContext. Questo valore viene passato a tutti i messaggi UpdateRequest e DeleteRequest utilizzati da OrganizationServiceContext quando viene chiamato il metodo SaveChanges.

Il comportamento della concorrenza ottimistica può essere impostato esclusivamente tramite una chiamata SDK. Attualmente non esiste un'impostazione apposita in un modulo dell'applicazione Web.

Aggiornare o eliminare un record

Dopo il recupero di un record di entità, accedi all'attributo RowVersion per ottenere la versione corrente del record. Nell'oggetto entità che utilizzi come Target in UpdateRequest, imposta la proprietà RowVersion sullo stesso valore del record recuperato ed esegui la richiesta. Analogamente, nell'oggetto riferimento di entità che utilizzi come Target in DeleteRequest, imposta la proprietà RowVersion sullo stesso valore di versione di riga del record recuperato ed esegui la richiesta.

Se l'entità passata a UpdateRequest contiene le entità correlate, lo stesso comportamento si applica a tutte le operazioni di aggiornamento utilizzando le versioni di riga con ogni singola entità.

Dopo la richiesta viene ricevuta tramite la piattaforma, viene eseguito il confronto della versione corrente della riga di un record di entità con la versione di riga nella richiesta. Se le versioni di riga corrispondono e ConcurrencyBehavior è impostato su IfRowVersionMatches, l'operazione ha esito positivo. In caso contrario, viene restituita un'eccezione di errore.

Gestire le eccezioni

Sono disponibili diverse condizioni di errore che possono essere restituite in un elemento FaultException<OrganizationServiceFault> dalla chiamata del servizio Web quando si utilizza la concorrenza ottimistica.

  • ConcurrencyVersionMismatch (codice = -2147088254)

    Quando viene fornita una versione di riga e il comportamento di IfVersionMatches è indicato, se la versione esistente del record non corrisponde alla versione di riga specificata nella richiesta, viene restituito un errore.

  • ConcurrencyVersionNotProvided (codice = -2147088253)

    Quando il comportamento di IfVersionMatches è indicato e non viene fornito alcun valore per la versione di riga, viene restituito un errore.

  • OptimisticConcurrencyNotEnabled (codice = -2147088243)

    Quando il comportamento di IfVersionMatches è indicato in un aggiornamento a un'entità e la concorrenza ottimistica non è abilitata, viene restituito un errore.

Puoi verificare la proprietà Code dell'errore restituito per determinare se l'errore è correlato alla concorrenza ottimistica. I codici per le condizioni di errore indicati in precedenza sono stati ottenuti tramite il codice helper ErrorCodes.cs.

Vedere anche

Scrivere applicazioni ed estensioni del server
Esempio Utilizzare la concorrenza ottimistica con le operazioni di aggiornamento ed eliminazione

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright