Skip to main content

Crear consultas SOQL en clases de Apex

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Crear una consulta SOQL en un método.
  • Manipular los datos devueltos por una consulta SOQL.
Nota

Nota

¿Es su idioma de aprendizaje español (LATAM)? Comience el reto en un Trailhead Playground en español (LATAM) y utilice las traducciones entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto dependen de los datos en ese idioma. Si no aprueba el reto en su organización en español (LATAM), recomendamos que (1) cambie la configuración local a Estados Unidos, (2) cambie el idioma a inglés (según estas instrucciones) y, luego, (3) haga clic en el botón “Check Challenge” (Comprobar el reto) nuevamente.

Consulte la insignia Trailhead en su idioma para obtener más información sobre cómo aprovechar la experiencia de Trailhead en otros idiomas.

Siga el proceso con Trail Together

¿Desea seguir el proceso con un experto a medida que realiza este paso? Eche un vistazo a este video, parte de la serie Trail Together en Trailhead Live.

(Este clip de video comienza en el minuto 17:32, en caso de que desee retroceder y mirar el comienzo del paso nuevamente).

Introducción

Ahora que comprende los fundamentos de una consulta SOQL, puede aplicar sus conocimientos sobre los campos de fórmula a este tipo de consultas.

Nuestra consulta es bastante simple: SELECT FirstName, LastName FROM Contact

Ahora necesitamos un objeto donde almacenar los datos resultantes. Dado que las consultas SOQL siempre devuelven datos en formato de lista, crearemos una lista de Apex. Como aprendió en Fundamentos de Apex para administradores, se requiere lo siguiente para declarar una lista: la palabra reservada List, el tipo de datos (en caracteres < >) y un nombre para la lista. En esta consulta, el tipo de datos es Contacto y el nombre asignado es listOfContacts. La declaración de la lista se ve así:

List<Contact> listofContacts

Para asignar los resultados de la consulta a la nueva lista, usamos un operador de asignaciones, el símbolo igual ( = ), entre la declaración de la lista y la consulta, del siguiente modo:

List<Contact> listofContacts = [SELECT FirstName, LastName FROM Contact];

Observe la sintaxis. La consulta se incluye entre corchetes [ ], y la declaración termina con un punto y coma (;).

Probémoslo en Developer Console. Con fines de prueba, enviamos la lista de contactos al registro de depuración para poder ver cómo funciona el código.

Probar el código en Developer Console

  1. En Developer Console, haga clic en Depurar | Abrir ventana de ejecución anónima.
  2. En esta ventana, se asignan los resultados de la consulta a la nueva lista:
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact LIMIT 2];
  3. En la siguiente línea, se envía la lista listOfContacts al registro de depuración:
    system.debug(listOfContacts);
  4. Haga clic en la casilla de verificación Abrir registro.
  5. Haga clic en Execute (Ejecutar).
  6. En la parte inferior de la ventana Registro de ejecución, haga clic en la casilla de verificación Solo depuración.
    Los primeros dos elementos del registro de depuración deberían verse así:
  7. [2] | DEBUG | (Contact: {FirstName = Rose, LastName = Gonzalez, Id = 0036g000040KuVAAU}, Contact: {FirstName = Sean, LastName = Forbes, Id=0036g0000040KuCAAU}). Los registros de contacto aparecen en orden, separados por comas.

    Si la consulta no arroja resultados, de todos modos devuelve una lista, pero vacía:

    [2]|DEBUG|()

¿Qué está ocurriendo aquí realmente?

SELECT FirstName, LastName FROM Contact LIMIT 2; flecha que apunta al icono del objeto Contacto dentro de una nube. Una segunda flecha que envía datos coincidentes con la consulta a la clase de Apex y que apunta a una lista de contactos. 1. FirstName = Rose, LastName = Gonzalez. 2. FirstName = Sean, LastName = Forbes.

Cuando se ejecuta el código, primero procesa la consulta:

SELECT FirstName, LastName FROM Contact LIMIT 2

La consulta encuentra todos los contactos y obtiene el nombre y apellido de cada registro. Luego, el código agrega los datos seleccionados de esos registros de contacto a una lista denominada listOfContacts.

Por último, en la línea 2, System.debug muestra el contenido de listOfContacts.

Ejecutar consultas SOQL en Apex

En la unidad anterior, utilizó el Editor de consultas para mostrar datos en una tabla. En esta unidad, utilizó la ventana Ejecución anónima para ejecutar una consulta y enviar los resultados al registro de depuración. Está muy bien por ahora, pero los usuarios no ejecutarán consultas en Developer Console. Lo que necesita es una forma de mostrar datos en la interfaz de usuario de su organización. Para hacerlo, puede utilizar las clases y los métodos de Apex. Veamos cómo ejecutar una consulta SOQL y manipular los resultados en Apex.

Para empezar, creamos un método de Apex en una clase de Apex. El método de Apex ejecuta la consulta y selecciona los datos que buscamos.

  1. En Developer Console, haga clic en Archivo | Nuevo | Clase de Apex.
  2. Asigne el nombre ContactUtility y haga clic en OK (Aceptar).
  3. La clase se abre, muestra el código que declara dicha clase y deja un espacio para el cuerpo de la clase.

  4. En la línea 2, agregue un método denominado viewContacts.
    public static void viewContacts(){
    }
  5. En la línea 3, dentro del método viewContacts, pegue el código que ejecuta la consulta y asigne los resultados a una nueva lista:
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
  6. Guarde la clase.

Ahora cuenta con los datos que precisa en la lista listOfContacts. Vamos a usar un bucle para iterar a través de la lista a fin de construir el formato que buscamos para los resultados.

Utilizar bucles para iterar a través de una lista

En Programación orientada a objetos para administradores, aprendió a procesar los elementos de una lista, uno por uno, mediante un bucle for. Aquí, mediante el uso de un bucle for, combinamos el nombre y apellido de cada contacto para armar el nombre completo del contacto. Primero, deberá crear el bucle y, luego, procesar cada registro dentro de él.

Para declarar un bucle for, necesita un nombre de variable, su tipo de datos y el nombre de la lista a través de la cual iterará el bucle.

En un bucle for, no se hace referencia directa a objetos específicos. En cambio, se crea una variable para representar a los elementos de la lista dentro del bucle, de a uno por vez. La variable funciona como marcador de posición de cada elemento de la lista. Puede elegir cualquier nombre, pero que sea algo simple. Aquí usaremos con. Luego, necesitará el tipo de datos de la variable, que es Contact (Contacto), y el nombre de la lista, listOfContacts. En conjunto, se ve así:

for (Contact con : listOfContacts){ //loop body}

Declarar un bucle for

  1. En el método viewContacts, después de la consulta SOQL, pegue este código:
    for (Contact con : listOfContacts){
        //loop body
    }
  2. Guarde la clase.

Consultamos la base de datos (1), seleccionamos los datos, los almacenamos en una lista (2) y creamos un bucle for (3).

1. La consulta, Select FirstName, LastName FROM Contact LIMIT 2, alimenta la lista listOfContacts (2). 3. El bucle for que procesa los contactos en listOfContacts list: for(Contact con : listOfContacts){ //logic goes here}

A continuación, dentro del bucle, se procesan los elementos de la lista. Por último, debe mostrar cada contacto de listOfContacts en este formato:

First Name:<contact's first name>, Last Name:<contact's last name>

Para hacer referencia a un campo para un elemento de una lista, utilice la notación de puntos a fin de especificar el objeto y su campo (objeto.campo). Por ejemplo, si desea hacer referencia al campo FirstName de un objeto Contacto en la lista listOfContacts, coloque un punto (correspondiente a este tipo de notación) entre con (la variable del objeto) y FirstName (el campo), de este modo:

con.FirstName

La lista contiene campos separados para el nombre y el apellido. En Apex, se combinan los valores de los campos (y, a veces, también texto literal) mediante una concatenación de elementos. (Ya practicó la concatenación en Fundamentos de Apex para administradores).

Como recordatorio, al concatenar, los datos de un campo se representan como objeto.campo. El texto literal está incluido entre comillas simples. No olvide incluir espacios al comienzo y al final del texto literal, si es necesario. Use el símbolo más (+) para combinar campos o para combinar un campo y texto literal.

Complete el cuerpo del bucle for. Primero, para cada elemento de la lista listOfContacts, se combinan FirstName y LastName en una nueva variable, fullname:

String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;

Observe el espacio entre FirstName y LastName. El resultado debería ser:

First Name: Angela, Last Name: Carter

no

FirstName: Angela,LastName: Carter

Una vez asignado el valor de la variable fullName (tipo de datos: String), sume esa variable a la declaración de depuración en la siguiente línea:

system.debug(fullName);

Procesar elementos de una lista en el bucle for

  1. En el método viewContacts, debe reemplazar //loop body por este código:
    String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
    system.debug(fullName);
  2. Guarde la clase.

El código debería verse así:

public class ContactUtility {
    public static void viewContacts(){
        List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
        for (Contact con : listOfContacts){
            String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
            system.debug(fullName);
        }
    }
}

Ahora que tenemos una clase, un método y una consulta SOQL listos, vamos a ejecutar el código y ver si funciona. Para ejecutar código Apex en la ventana Ejecución anónima, especifique la clase y el método utilizando la notación de puntos.

  1. Abrir la ventana Execute Anonymous (Ejecución anónima).
  2. En la ventana Ingresar código Apex, sustituya el código existente por este:
    ContactUtility.viewContacts();
  3. Compruebe que la casilla de verificación Abrir registro esté seleccionada.
  4. Haga clic en Execute (Ejecutar).
  5. Seleccione Solo depuración.

Las primeras seis filas de resultados deberían ser:

Registro de ejecución
Evento
Detalles
USER_DEBUG
[5]|DEBUG|First Name: Rose, Last Name: Gonzalez
USER_DEBUG
[5]|DEBUG|First Name: Sean, Last Name: Forbes
USER_DEBUG
[5]|DEBUG|First Name: Jack, Last Name: Rogers
USER_DEBUG
[5]|DEBUG|First Name: Pat, Last Name: Stumuller
USER_DEBUG
[5]|DEBUG|First Name: Andy, Last Name: Young
USER_DEBUG
[5]|DEBUG|First Name: Tim, Last Name: Barr

¡Mire eso! Con SOQL, un bucle for y una concatenación, logró recuperar los datos de contactos, asignar los datos a una lista, iterar a través de la lista y generar los resultados esperados. ¡Allá vamos!

Recursos

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios