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.
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
- En Developer Console, haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
- En la ventana de ejecución anónima, asigne los resultados de la consulta a la nueva lista:
- En la siguiente lÃnea, envÃe la lista listOfContacts (ListadeContactos) al registro de depuración:
- Haga clic en la casilla de verificación Open Log (Abrir registro).
- Haga clic en Execute (Ejecutar).
- 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Ã: -
Si una consulta no encuentra resultados, devuelve una lista vacÃa:
[2]|DEBUG|()
¿Qué está sucediendo realmente aqu�
Cuando nuestro código se ejecuta, primero procesa la consulta:
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.
- En Developer Console, haga clic en File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
- Nombre la clase
ContactUtility
y haga clic en OK (Aceptar). -
La clase se abre, mostrando el código que declara la clase, y deja espacio para el cuerpo de la clase.
- En la lÃnea 2, añada el método llamado
viewContacts
. - 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: - 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:
Declarar un bucle for
- En el método viewContacts (VerContactos), después de la consulta SOQL, pegue este código:
- 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).
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):
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
- En el método viewContacts (VerContactos), reemplace
//loop body
con este código: - Guarde la clase.
Su código deberÃa tener un aspecto similar a este:
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.
- Abra la ventana de ejecución anónima.
- En la ventana para introducir código Apex, reemplace el código existente con este código:
- Verifique que Open Log (Abrir registro) esté marcado.
- Haga clic en Execute (Ejecutar).
- 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!