Loading

Fouten ‘Kan rij niet vergrendelen - Record momenteel niet beschikbaar’

Publicatiedatum: Apr 1, 2022
Beschrijving

Wanneer een record wordt bijgewerkt of gemaakt, vergrendelen we die record om te voorkomen dat een andere bewerking de record tegelijkertijd bijwerkt en inconsistenties in de gegevens veroorzaakt.

Deze vergrendelingen duren meestal enkele seconden en wanneer de vergrendeling wordt opgeheven, kunnen andere bewerkingen de verwerking uitvoeren die ze op de bewuste record moeten uitvoeren. Een bepaalde transactie kan echter maximaal 10 seconden wachten tot een vergrendeling wordt opgeheven, anders verloopt hij.

Oplossing

Welke records worden vergrendeld en wanneer, hangt af van de bewerking die u uitvoert en de hoofdrecord waaraan u werkt. De Cheatsheet over recordvergrendeling van Force.com biedt hierover gedetailleerde informatie en we raden u ten zeerste aan om het te lezen.

Veelvoorkomende scenario’s die het ontgrendelen van een record voorkomen

 

a. E-mail-naar-case

Wanneer een e-mail door e-mail-naar-case wordt verwerkt, proberen triggers op het object van het e-mailbericht of op gerelateerde objecten (d.w.z. het bovenliggende account) deze records te vergrendelen voor verwerking. Als een ander proces deze records vergrendeld houdt en de verwerking van de e-mail langer dan 10 seconden moet wachten, treedt een time-out op en ziet u deze fout.
 

b. Apex-triggers/API

Ga ervan uit dat er een Apex-trigger ‘Na invoegen’ op taken zit, die ongeveer 14 seconden duurt tijdens het verwerken. Deze trigger wordt uitgevoerd wanneer u een taak maakt. Wanneer een taak wordt gemaakt en aan een account wordt gerelateerd, vergrendelen we het bovenliggende account terwijl de taak wordt gemaakt. Dit betekent dat het account niet kan worden bijgewerkt terwijl de taak wordt aangemaakt.
Verminderen met Vergrendelinstructies.

Scenario:
  1. Gebruiker A importeert een taak via de Data Loader en wijst deze toe aan een bestaande accountrecord. Wanneer de taak wordt ingevoegd, wordt de Apex-trigger geactiveerd.
  2. Slechts 2 seconden nadat gebruiker A via de Data Loader het invoegen start, bewerkt gebruiker B handmatig dezelfde accountrecord waaraan de taak is gerelateerd.
  3. Wanneer gebruiker B op ‘Opslaan’ klikt, proberen we het account intern te vergrendelen, maar omdat het account al vergrendeld is, kunnen we het niet nog eens vergrendelen. Het account was al vergrendeld door het maken van de taak.

De tweede transactie wacht vervolgens tot de vergrendeling wordt opgeheven. Omdat het ongeveer 14 seconden duurt om de taak aan te maken, wordt de vergrendeling 14 seconden vastgehouden. De tweede transactie (van gebruiker B) verloopt, omdat deze slechts maximaal 10 seconden kan wachten.

In dit geval ziet gebruiker B een fout op het scherm die vergelijkbaar is met de bovenstaande fouten. Apex-testen kunnen ook vergrendeling krijgen als ze op productiegegevens worden uitgevoerd.

c. Bulk-API

Wanneer u records invoegt of bijwerkt met de Bulk-API, kan dit meerdere updates op dezelfde bovenliggende record tegelijkertijd veroorzaken, omdat de batches gelijktijdig worden verwerkt. Als twee batches bijvoorbeeld tegelijkertijd worden verwerkt en ze alle twee records bevatten die naar dezelfde bovenliggende record wijzen, dan probeert een van de batches om de bovenliggende record te vergrendelen. Dit kan ervoor zorgen dat de andere batch de fout ‘Kan rij niet vergrendelen’ krijgt, omdat de batch niet binnen 10 seconden kon vergrendelen.

Om dit te voorkomen kunt u een van de volgende dingen doen:
  • De batchgrootte verminderen.
  • De records in serie verwerken in plaats van gelijktijdig, zodat één batch tegelijk wordt verwerkt.
  • Hoofdrecords sorteren op basis van hun bovenliggende record, zodat u geen verschillende onderliggende records (met dezelfde bovenliggende record) in verschillende batches hebt wanneer u de gelijktijdige modus gebruikt. 

Voor dit soort scenario’s is het ook zeer aan te raden om de richtlijnen in dit artikel te lezen.


d. Hoofd-/detailrelatie

Als een record aan de hoofdkant van een hoofd-/detailrelatie te veel onderliggende records heeft (duizenden), krijgt u deze fouten waarschijnlijk ook. Dit komt omdat elke keer dat u de detailrecord bewerkt, de hoofdrecord wordt vergrendeld. Hoe meer detailrecords u hebt, hoe groter de kans dat deze worden bewerkt door gebruikers en de bovenliggende record wordt vergrendeld. 

Als u dit probleem wilt voorkomen, kunt u enkele onderliggende records naar een ander bovenliggend element verplaatsen om het aantal onderliggende records dat aan één enkel bovenliggende record is verbonden te verminderen. 
Vergrendeling van recordniveau is een veelvoorkomend scenario dat kan worden verminderd.


Probleemoplossing: 

1. U kunt foutopsporingslogboekbestanden inschakelen voor de gebruiker die wordt geconfronteerd met de fout, om de trigger/stroom/validatieregels te vinden die het probleem veroorzaken.

2. Controleer of er afhankelijke achtergrondtaken op hetzelfde object worden uitgevoerd. Als dat zo is, probeer dan om de taken te pauzeren en voer vervolgens de acties uit om de rijvergrendelingen te verminderen. 


Recordvergrendeling en gelijktijdigheid bij Salesforce Platform
 
Knowledge-artikelnummer

000387767

 
Wordt geladen
Salesforce Help | Article