Loading

Error "La lista no tiene filas para asignarlas a sObject"

Fecha de publicación: Aug 31, 2020
Descripción
Problema:

La consulta siguiente no 
devuelve ningún número de registros:

"[SELECT Id FROM Account WHERE Id = :Trigger.new[0].Account__c]"
 
Solución
El error "La lista no tiene filas para asignar a SObject" se produce cuando la consulta no devuelve ninguna fila.
 
Aunque SELECT normalmente devuelve una matriz/lista, estas instrucciones utilizan la sintaxis abreviada que asume que solo se devuelve una fila.
¡Lo que no es obvio es que también asume que se devuelve exactamente una fila!
 
Aunque esto es poco probable que ocurra para Contact, es muy probable que ocurra con cualquier objeto personalizado que cree, especialmente cuando se utiliza una instrucción WHERE que podría devolver cero filas, como:
 
Player__c player = [SELECT Id from Player__c where Name = :username]; if (player != null) p = player.Id;

El código anterior fallará si no hay un registro Player__c con el nombre de usuario coincidente. No devuelve un valor nulo.
 

Sería más seguro lo siguiente:
 
Player__c[] players = [SELECT Id from Player__c where Name = :username]; if (players.size() > 0) p = players[0].Id;

 
Es una de esas situaciones donde normalmente no pensaría en crear una prueba, de modo que es más seguro evitar la posibilidad.
Número del artículo de conocimiento

000385697

 
Cargando
Salesforce Help | Article