Loading

Erreur Apex « List has no rows for assignment to SObject » (La liste ne contient aucune ligne à attribuer à SObject)

Date de publication: Aug 31, 2020
Description


La requête suivante ne renvoie aucun nombre d'enregistrements :

"[SELECT Id FROM Account WHERE Id = :Trigger.new[0].Account__c]"

L'erreur « List has no rows for assignment to SObject (La liste ne contient aucune ligne à attribuer à SObject) » est affichée lorsque la requête ne renvoie aucune ligne.

Résolution
 
 
Généralement, SELECT renvoie un tableau ou une liste, mais ces instructions utilisent la syntaxe raccourcie qui suppose qu'une seule ligne est renvoyée. La difficulté est qu'elle suppose qu'une seule ligne, pas plus, est renvoyée !
 
Cette situation est peu probable pour Contact, mais tout à fait possible pour tous les objets personnalisés que vous créez, notamment lors de l'utilisation d'une instruction WHERE qui peut renvoyer des lignes zéro, par exemple :
 
Player__c player = [SELECT Id from Player__c where Name = :username]; if (player != null)  p = player.Id;

Le code ci-dessus échoue si aucun enregistrement Player__c avec ce nom d'utilisateur n'existe. Il ne renvoie pas de valeur null.
 

Il est plus sûr de procéder comme suit :
Player__c[] players = [SELECT Id from Player__c where Name = :username]; if (players.size() > 0) p = players[0].Id;

Généralement, ce type de situation vous conduit à créer un test. Par conséquent, il est préférable d'éviter cette possibilité.
Numéro d’article de la base de connaissances

000385697

 
Chargement
Salesforce Help | Article