Loading

Apex-Fehler "List has no rows for assignment to SObject" (In der Liste sind keine Zeilen für die Zuweisung zu SObject vorhanden)

Veröffentlichungsdatum: Aug 31, 2020
Beschreibung


Die folgende Abfrage gibt keine Datensätze zurück:

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

Wenn die Abfrage keine Zeilen zurückgibt, wird der Fehler "List has no rows for assignment to SObject" (In der Liste sind keine Zeilen für die Zuweisung zu SObject vorhanden) angezeigt.

Lösung
 
 
Durch SELECT wird zwar in der Regel ein Array/eine Liste zurückgegeben, allerdings wird in diesen Anweisungen die Kurzschriftsyntax verwendet, wobei davon ausgegangen wird, dass nur eine Zeile zurückgegeben wird. Es ist allerdings nicht offensichtlich, dass ebenfalls angenommen wird, dass genau eine Zeile zurückgegeben wird.
 
Bei Kontakten ist dies eher unwahrscheinlich, bei von Ihnen erstellten benutzerdefinierten Objekten ist es jedoch sehr wahrscheinlich, insbesondere wenn eine WHERE-Anweisung verwendet wird, die möglicherweise null Zeilen zurückgibt, wie:
 
Player__c player = [SELECT Id from Player__c where Name = :username]; if (player != null)  p = player.Id;

Der oben dargestellte Code schlägt fehl, wenn kein Player__c-Datensatz mit dem passenden Benutzernamen vorhanden ist. Es wird nicht tatsächlich eine Null zurückgegeben.
 

Es ist sicherer, wie folgt vorzugehen:
Player__c[] players = [SELECT Id from Player__c where Name = :username]; if (players.size() > 0) p = players[0].Id;

In der Regel würden Sie nicht daran denken, für eine solche Situation einen Test zu erstellen, sodass Sie sicherheitshalber die Möglichkeit vermeiden sollten.
Nummer des Knowledge-Artikels

000385697

 
Laden
Salesforce Help | Article