Loading

Error de Apex "La lista no tiene filas para asignar a SObject"

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


La siguiente consulta no está devolviendo ningún número de registros:

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

Se produce el error "La lista no tiene filas para asignar a SObject" cuando la consulta no devuelve ninguna fila.

Solución
 
 
Aunque SELECT normalmente devuelve una matriz/lista, estas instrucciones están utilizando 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 es poco probable que se produzca para Contacto, es bastante probable que se produzca con cualquier objeto personalizado que cree, especialmente cuando se utiliza una instrucción WHERE que pueda 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 realmente un nulo.
 

Sería más seguro realizar 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 en las que 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