Loading

Erreurs Verrouillage de la ligne impossible : enregistrement actuellement non disponible

Date de publication: Apr 1, 2022
Description

Lorsqu’un enregistrement est mis à jour ou créé, nous le verrouillons pour empêcher une autre opération de le mettre à jour en même temps et de provoquer des incohérences dans les données.

Ces verrouillages durent normalement quelques secondes. Lorsque l’enregistrement est déverrouillé, d’autres opérations peuvent effectuer le traitement qu’elles sont censées effectuer sur l’enregistrement en question. Toutefois, une transaction donnée ne peut attendre qu’un maximum de 10 secondes pour qu’un enregistrement soit déverrouillé avant qu’elle n’expire.

Résolution

Les enregistrements verrouillés et le moment où ils sont verrouillés dépendent de l’opération que vous effectuez et de l’enregistrement principal sur lequel vous travaillez. La cheatsheet sur le verrouillage des enregistrements Force.com fournit des informations détaillées à ce sujet et il est fortement recommandé de vous familiariser avec son contenu.

Scénarios courants pouvant empêcher le déverrouillage d’un enregistrement

 

a. E-mail vers requête :

Lorsqu’un e-mail est traité par la fonction E-mail vers requête, les déclencheurs appliqués à l’objet de message e-mail ou les objets associés (c’est-à-dire le compte parent) tenteront de verrouiller ces enregistrements pour le traitement. Si un autre processus applique un verrouillage à ces enregistrements et que le traitement de l’e-mail doit attendre plus de 10 secondes, ce dernier expirera et vous obtiendrez cette erreur.
 

b. Déclencheurs Apex/API

Supposons qu’un déclencheur Apex Après insertion soit appliqué aux tâches et qu’il s’exécute pendant environ 14 secondes tout en effectuant un certain traitement. Ce déclencheur s’exécutera lorsqu’une tâche est créée. Lorsque des tâches sont créées et sont liées à un compte, nous verrouillons le compte parent pendant la création de la tâche. Cela signifie que le compte ne peut pas être mis à jour pendant la création de la tâche.
Réduire les problèmes à l’aide d’instructions de verrouillage.

Scénario :
  1. L’utilisateur A importe une tâche via le chargeur de données et l’affecte à un enregistrement de compte existant. Lorsque la tâche est insérée, le déclencheur Apex est déclenché.
  2. Seulement 2 secondes après que l’utilisateur A a commencé l’insertion via le chargeur de données, l’utilisateur B édite manuellement le même enregistrement de compte auquel la tâche est associée.
  3. Lorsque l’utilisateur B clique sur Enregistrer, nous essayons de verrouiller le compte en interne, mais le compte est déjà verrouillé et nous ne pouvons donc pas le verrouiller à nouveau. Le compte avait déjà été verrouillé par la création de la tâche.

La deuxième transaction attend alors le déverrouillage. Étant donné que la création de la tâche prend environ 14 secondes, le verrouillage est maintenu pendant 14 secondes. La deuxième transaction (celle de l’utilisateur B) expire, car elle ne peut attendre qu’un maximum de 10 secondes.

Dans ce cas, l’utilisateur B verra une erreur similaire à celles mentionnées ci-dessus s’afficher sur l’écran. Les tests Apex peuvent également entraîner des verrouillages s’ils sont exécutés sur des données de production.

c. API de transfert en masse 

L’insertion ou la mise à jour d’enregistrements via l’API de transfert en masse peut entraîner plusieurs mises à jour sur le même enregistrement parent à la fois, car les lots sont traités en parallèle. Par exemple, si deux lots sont traités en même temps et que les deux contiennent des enregistrements pointant vers le même enregistrement parent, l’un des lots tentera de verrouiller l’enregistrement parent, ce qui peut entraîner une erreur de type « verrouillage de la ligne impossible » de la part de l’autre lot, car le lot n’a pas pu obtenir un verrouillage dans les 10 secondes.

Pour éviter cela, vous pouvez effectuer l’une des opérations suivantes :
  • Réduisez la taille des lots
  • Traitez les enregistrements en mode Série plutôt qu’en parallèle. De cette façon, les lots sont traités un par un.
  • Triez les enregistrements principaux en fonction de leur enregistrement parent pour éviter d’avoir différents enregistrements enfants (avec le même parent) dans des lots différents lors de l’utilisation du mode parallèle. 

Pour ce type de scénarios, il est également fortement recommandé de vous familiariser avec les consignes figurant dans cet article 


d. Relation principal-détails

Si un enregistrement du côté principal d’une relation principal-détails contient trop d’enregistrements enfants (des milliers), vous risquez également de rencontrer ces erreurs, car chaque fois que vous modifiez l’enregistrement de détail, l’enregistrement principal est verrouillé. Plus vous avez d’enregistrements de détail, plus il est probable qu’ils soient modifiés par les utilisateurs, ce qui entraînera le verrouillage de l’enregistrement parent. 

Pour éviter ce problème, vous pouvez déplacer certains enregistrements enfants vers un autre parent afin de réduire la quantité d’enregistrements enfants attachés à un même enregistrement parent. 
Les verrouillages au niveau de l’enregistrement représentent un scénario courant dont la fréquence peut être réduite.


Dépannage : 

1. Vous pouvez activer les journaux de débogage pour l’utilisateur qui fait face à l’erreur afin de trouver le déclencheur, le flux ou les règles de validation à l’origine du problème.

2. Vérifiez si des tâches d’arrière-plan dépendantes s’exécutent sur un même objet. Si c’est le cas, essayez de suspendre ces tâches, puis suivez nos recommandations pour réduire les verrouillages de ligne. 


Concurrence et verrouillage des enregistrements sur Salesforce Platform
 
Numéro d’article de la base de connaissances

000387767

 
Chargement
Salesforce Help | Article