Skip to main content
Únase a nosotros en TDX, en San Francisco, o en Salesforce+ los días 5 y 6 de marzo en la conferencia para desarrolladores sobre la era de agentes de IA. Registrarse ahora.

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

¿Su idioma de aprendizaje es español? Comience el reto en un Trailhead Playground en español y utilice las traducciones proporcionadas entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto se basan en los datos en inglés. Si no aprueba el reto en su organización en español, le recomendamos que (1) cambie la configuración regional a Estados Unidos, (2) cambie el idioma a inglés, siga las instrucciones descritas aquí y, a continuación, (3) vuelva a hacer clic en el botón Check Challenge (Comprobar el reto).

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 vídeo, parte de la serie Trail Together en Trailhead Live.

(Este vídeo comienza en el minuto 17:32, en caso de que desee retroceder y volver a ver el principio del paso).

Introducción

Ahora que entiende lo básico de una consulta SOQL, puede aplicar su conocimiento sobre campos de fórmula a las consultas SOQL.

Nuestra consulta es bastante simple: SELECT FirstName, LastName FROM Contact (SELECCIONAR Nombre, Apellido DE Contacto)

Ahora necesitamos un objeto para almacenar los datos obtenidos. Dado que las consultas SOQL siempre devuelven los datos en forma de lista, creamos una lista de Apex. Como aprendió en Aspectos básicos de Apex para administradores, para declarar una lista, necesita algunos elementos: la palabra reservada List (Lista), el tipo de dato (entre los caracteres < >) y un nombre para la nueva lista. Para esta consulta, el tipo de dato es Contact (Contacto) y nombramos la nueva lista listOfContacts (ListadeContactos). La instrucción de la lista se ve de la siguiente manera:

List<Contact> listofContacts (Lista Contacto ListaDeContactos)

Para asignar los resultados de la consulta a la nueva lista, colocamos un operador de asignación, el símbolo de igual (=), entre la instrucción de la lista y la consulta, de la siguiente manera:

List<Contact> listofContacts = [SELECT FirstName, LastName FROM Contact]; (Lista Contacto ListaDeContactos = [SELECCIONAR Nombre, Apellido DE Contacto];)

Observe la sintaxis. La consulta está entre corchetes [ ], y la instrucción termina con un punto y coma (;).

Probémoslo en Developer Console. Para fines de prueba, enviamos la lista de contactos al registro de depuración para que podamos ver cómo está funcionando el código.

Pruebe su código en Developer Console

  1. En Developer Console, haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
  2. En la ventana de ejecución anónima, asigne 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, envíe la lista listOfContacts (ListadeContactos) al registro de depuración:
    system.debug(listOfContacts);
  4. Haga clic en la casilla de verificación Open Log (Abrir registro).
  5. Haga clic en Execute (Ejecutar).
  6. En la parte inferior de la ventana de registro de ejecución, marque la casilla de verificación Debug Only (Solo depurar).
    Los primeros dos elementos en el 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 se enumeran en orden, separados por comas.

    Si una consulta no encuentra resultados, devuelve una lista vacía:

    [2]|DEBUG|()

¿Qué está sucediendo realmente aquí?

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

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

SELECT FirstName, LastName FROM Contact LIMIT 2

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

Por último, en la línea 2, System.debug (Sistema.depuración) muestra el contenido de listOfContacts (ListaDeContactos).

Ejecutar consultas SOQL en Apex

En la unidad anterior, utilizó el editor de consultas para devolver datos en una tabla. En esta unidad, utilizó la ventana de ejecución anónima para ejecutar una consulta y enviar los resultados al registro de depuración. Eso está bien por ahora, pero sus usuarios no van a estar ejecutando consultas en Developer Console. Necesita una forma de devolver datos en la interfaz de usuario de su organización. Las clases y métodos Apex son la forma de hacerlo. Exploraremos cómo ejecutar una consulta SOQL y manipular sus resultados en Apex.

Comenzamos creando un método Apex en una clase Apex. El método Apex ejecuta nuestra consulta para seleccionar los datos que necesitamos.

  1. En Developer Console, haga clic en File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
  2. Nombre la clase ContactUtility y haga clic en OK (Aceptar).
  3. La clase se abre, mostrando el código que declara la clase, y deja espacio para el cuerpo de la clase.

  4. En la línea 2, añada el método llamado 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 asigna los resultados a una nueva lista:
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
  6. Guarde la clase.

Ahora tenemos los datos que necesitamos en la lista listOfContacts. Usaremos un bucle for para iterar a través de la lista, construyendo el formato que deseamos para nuestra salida.

Uso de bucles for para iterar a través de una lista

En Programación orientada a los objetos para administradores, ha aprendido cómo procesar elementos en una lista, uno por uno, utilizando un bucle for. Aquí, utilizando un bucle for, combinamos el primer nombre y el apellido de cada contacto para formar su nombre completo. Primero vamos a crear el bucle y luego procesaremos cada registro dentro del bucle.

Para declarar un bucle for, necesitamos un nombre de variable, su tipo de dato y el nombre de la lista por la que el bucle va a iterar.

En un bucle for, no nos referimos a objetos específicos directamente. En su lugar, creamos una variable para representar los elementos de la lista dentro del bucle, uno a la vez. La variable sirve como un marcador de posición para cada elemento en la lista. Puede ser cualquier nombre que elija, pero mantengámoslo simple. Usaremos con. Luego, necesitamos el tipo de dato de la variable, que es Contact (Contacto), y el nombre de la lista, que es listOfContacts (ListadeContactos). Todo junto tiene este aspecto:

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

Declarar un bucle for

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

Hemos consultado la base de datos (1), seleccionado los datos, almacenado los datos en una lista (2) y creado un bucle for (3).

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

A continuación, dentro del bucle, procesamos los elementos de la lista. Por último, queremos mostrar cada contacto en listOfContacts (ListaDeContactos) en este formato:

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

Para referenciar un campo de un elemento en una lista, use la notación de punto para especificar el objeto y su campo (object.field). Por ejemplo, para referirse al campo FirstName (Nombre) de un objeto Contact (Contacto) en la lista listOfContacts (ListadeContactos), coloque un punto (el "punto" en la notación de punto) entre con (la variable del objeto) y FirstName (el campo), de la siguiente manera:

con.FirstName

La lista contiene campos separados para el primer nombre y el apellido. En Apex, combinamos los valores de los campos (y a veces texto literal también) utilizando la concatenación. (Usted ha hecho algunas concatenaciones en Aspectos básicos de Apex para administradores).

Como recordatorio, cuando se concatena, los datos del campo se representan como object.field (objeto.campo). El texto literal se encierra entre comillas simples. No olvide incluir espacios al principio y al final del texto literal cuando sea necesario. Utilice el símbolo más (+) para combinar campos o para combinar un campo y algún texto literal.

Completemos el cuerpo de nuestro bucle for. Primero, para cada elemento en la lista listOfContacts (ListadeContactos), combinamos el FirstName (Nombre) y el LastName (Apellido) en una nueva variable llamada fullName (Nombre completo):

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

Observe el espacio entre FirstName (Nombre) y LastName (Apellido). El resultado debería verse así:

First Name:Angela, Last Name:Carter (Nombre: Angela, Apellido: Carter)

No debería verse así:

FirstName:Angela,LastName:Carter

Una vez asignado el valor para la variable fullName (Nombre completo) (tipo de dato: String), insertamos esa variable en la instrucción de depuración en la siguiente línea:

system.debug(fullName);

Procesar elementos de la lista en el bucle for

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

Su código debería tener un aspecto similar a este:

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, ejecutemos el código y veamos si funciona. Para ejecutar código Apex en la ventana de ejecución anónima, especificamos la clase y el método utilizando notación de punto.

  1. Abra la ventana de ejecución anónima.
  2. En la ventana para introducir código Apex, reemplace el código existente con este código:
    ContactUtility.viewContacts();
  3. Verifique que Open Log (Abrir registro) esté marcado.
  4. Haga clic en Execute (Ejecutar).
  5. Seleccione Debug Only (Solo depurar).

Las primeras seis filas de sus 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 concatenación, ha recuperado los datos de contacto, asignado los datos a una lista, iterado a través de la lista y generado los resultados esperados. ¡Aún queda un poco!

Recursos

Reto práctico

+500 puntos

Prepararse

Completará esta/este unidad en su propia organización de prácticas. Haga clic en Iniciar para empezar a trabajar o haga clic en el nombre de su organización para seleccionar otro diferente.

Su reto

Create a for loop to iterate through a SOQL query
Write a query to get the name and annual revenue of all accounts. Then use a for loop to iterate through each account, printing the name and annual revenue of each account to the debug log.
  • Create a class
    • Name: AccountUtility
  • Create a method
    • Name: viewAnnualRevenue
    • Keywords: public, static, and void
  • Create a list
    • Name: accountsList
  • Create a query and assign the results to a list
    • Fields: Account Name and Annual Revenue (Hint: Use API names, not field names or labels)
    • Object: Account
  • Create a for loop that iterates through the query results
    • Object: Account
    • List name: accountsList
    • For each item, concatenate the account name, followed by a colon, followed by the account’s annual revenue: <Account Name> : <Annual Revenue>
    • Store the concatenated string in a variable named acctRev
    • Print the acctRev variable to the debug log
Comparta sus comentarios sobre Trailhead en la Ayuda de Salesforce.

Nos encantaría conocer su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios cuando quiera desde el sitio de la Ayuda de Salesforce.

Más información Continuar para compartir comentarios