Delen via


Potentieel gegevensverlies bij gebruik van optimistische gelijktijdigheid beperken

 

Gepubliceerd: november 2016

Is van toepassing op: Dynamics CRM 2015

Op een multi-threaded en multi-user systeem zoals Microsoft Dynamics 365, gebeuren bewerkingen en gegevenswijzigingen vaak parallel. Een probleem doet zich voor als twee of meer update- of verwijderbewerkingen op dezelfde gegevens tegelijkertijd optreden. Deze situatie kan in principe tot gegevensverlies leiden. Deze SDK-versie bevat de mogelijkheid voor uw toepassingen om te detecteren of een entiteitrecord is gewijzigd op de server tussen het moment dat uw toepassing de record ophaalt en het moment dat de toepassing probeert deze record bij te werken of te verwijderen.

Notitie

Voor Microsoft Dynamics CRM Online-organisaties is deze functie alleen beschikbaar als uw organisatie is bijgewerkt naar Dynamics CRM Online 2015 Update 1. Deze functie is niet beschikbaar voor Dynamics CRM (on-premises).

Optimistische gelijktijdigheid wordt ondersteund op alle gebruiksklare entiteiten die zijn ingeschakeld voor offline synchronisatie en alle aangepaste entiteiten. U kunt bepalen of een entiteit optimistische gelijktijdigheid ondersteunt door de metagegevens van de entiteit op te halen via een SDK-aanroep of door de metagegevens te bekijken met de Metadata Browser, en te controleren of het kenmerk IsOptimisticConcurrencyEnabled is ingesteld op true. Voor aangepaste entiteiten is deze eigenschap standaard ingesteld op true.Als u de metagegevens van de entiteit voor uw organisatie wilt bekijken, installeert u de oplossing Metadata Browser die wordt beschreven in Blader door de metagegevens voor uw organisatie. U kunt ook metagegevens weergeven voor een niet-aangepaste organisatie in het Excel-bestand EntityMetadata.xlsx, in de bovenste map van SDK download.

In dit onderwerp

Optimistisch gelijktijdigheid inschakelen

Een record bijwerken of verwijderen

Uitzonderingen afhandelen

Optimistisch gelijktijdigheid inschakelen

U kunt controle op optimistische gelijktijdigheid inschakelen wanneer een UpdateRequest wordt uitgevoerd door de eigenschap ConcurrencyBehavior van de aanvraag in te stellen op IfRowVersionMatches. Op vergelijkbare wijze kunt u voor een DeleteRequest de eigenschap ConcurrencyBehavior instellen.

Bij gebruik van de organisatieservicecontext voor het doorvoeren van gegevenswijzigingen, stelt u ConcurrencyBehavior in op het object OrganizationServiceContext. Deze waarde wordt doorgegeven via alle UpdateRequest- en DeleteRequest-berichten die worden gebruikt door de OrganizationServiceContext bij het aanroepen van SaveChanges.

Werking van optimistische gelijktijdigheid kan alleen worden ingesteld via een SDK-aanroep. Er is momenteel geen instelling hiervoor in een formulier van de webtoepassing.

Een record bijwerken of verwijderen

Open, nadat u een entiteitsrecord hebt opgehaald, het kenmerk RowVersion om de huidige versie van die record te verkrijgen. Stel in het entiteitsobject dat u gebruikt als het Target in de UpdateRequest, de eigenschap RowVersion in op dezelfde waarde dan de opgehaalde record en voer de aanvraag uit. Stel op vergelijkbare wijze in het entiteitsverwijzingobject dat u gebruikt als het Target in de DeleteRequest, de eigenschap RowVersion in op dezelfde waarde van de rijversie dan de opgehaalde record en voer de aanvraag uit.

Als de entiteit die wordt doorgegeven aan de UpdateRequest gerelateerde entiteiten bevat, wordt hetzelfde gedrag toegepast op alle bijwerkbewerken die de rijversies gebriuken die met elke individuele entiteit wordt meegeleverd.

Als de aanvraag door het platform wordt ontvangen, vindt een vergelijking van de rijversie van de huidige entiteitsrecord en de rijversie in de aanvraag plaats. Indien de rijversies overeenkomen en ConcurrencyBehavior is ingesteld op IfRowVersionMatches, slaagt de bewerking. Anders wordt een foutuitzondering geretourneerd.

Uitzonderingen afhandelen

Er zijn verschillende foutcondities die kunnen worden geretourneerd in een FaultException<OrganizationServiceFault> vanuit een webserviceaanroep bij gebruik van optimistische gelijktijdigheid.

  • ConcurrencyVersionMismatch (code=-2147088254)

    Als een rijversie wordt verstrekt en het IfVersionMatches-gedrag wordt aangegeven, wordt een fout geretourneerd als de versie van de bestaande record niet overeenkomt met de rijversie die is opgegeven in de aanvraag.

  • ConcurrencyVersionNotProvided (code= -2147088253

    Als het IfVersionMatches-gedrag wordt aangegeven, en er geen waarde voor rijversie is opgegeven, wordt een fout geretourneerd.

  • OptimisticConcurrencyNotEnabled (code=-2147088243)

    Als het IfVersionMatches-gedrag wordt aangegeven bij een update van een entiteiten en als optimistische gelijktijdigheid niet is ingeschakeld, wordt een fout geretourneerd.

U kunt de eigenschap Code van de geretourneerde fout controleren om te bepalen of de fout verband houdt met optimistische gelijktijdigheid. De code voor de foutcondities die hierboven zijn weergegeven, zijn verkregen van de helpercode ErrorCodes.cs.

Zie ook

Toepassingen en serveruitbreidingen schrijven
Voorbeeld: Optimistische gelijktijdigheid gebruiken bij bijwerken en verwijderen

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht