Loading

Errore Apex "List has no rows for assignment to SObject" (Nessuna riga nell'elenco per l'assegnazione a SObject)

Data pubblicazione: Aug 31, 2020
Descrizione


La query seguente non restituisce alcun numero di record:

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

L'errore "List has no rows for assignment to SObject" (Nessuna riga nell'elenco per l'assegnazione a SObject) si verifica quando una query non restituisce alcuna riga.

Risoluzione
 
 
Mentre un'istruzione SELECT in genere restituisce un array o un elenco, queste istruzioni utilizzano la sintassi abbreviata che presume che venga restituita una sola riga. L'aspetto non evidente è che presume anche che venga restituita esattamente una sola riga.
 
Sebbene sia improbabile che questo avvenga per Referente, è molto probabile che si verifichi per qualsiasi oggetto personalizzato creato dall'utente, soprattutto se si utilizza un'istruzione WHERE che può restituire zero righe, ad esempio:
 
Player__c player = [SELECT Id from Player__c where Name = :username]; if (player != null) p = player.Id;

Il codice qui sopra ha esito negativo se non esiste alcun record Player__c con username corrispondente ma non restituisce null.
 

È più sicuro utilizzare l'istruzione seguente:
Player__c[] players = [SELECT Id from Player__c where Name = :username]; if (players.size() > 0) p = players[0].Id;

È una di quelle situazioni in cui in genere non si pensa di creare un test. È quindi più sicuro evitare qualsiasi possibilità.
Numero articolo Knowledge

000385697

 
Caricamento
Salesforce Help | Article