Crear consultas de relaciones con objetos personalizados
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Interpretar los diagramas en el Schema Builder (Generador de esquemas) para identificar las relaciones entre objetos.
- Identificar los nombres de relaciones personalizadas que se deben utilizar en las consultas de objetos personalizados.
- Crear una consulta de secundario a principal para objetos personalizados.
- Crear una consulta de principal a secundario para objetos personalizados.
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 clip comienza en la marca del minuto 51:38, en caso de que desee retroceder y volver a ver el principio del paso).
Inicie su Trailhead Playground e instale un paquete.
Los ejemplos y actividades prácticas en el resto de este módulo utilizan una aplicación inmobiliaria de ejemplo llamada DreamHouse. Instalemos la aplicación en su Trailhead Playground e importemos los datos de ejemplo.
Si aún no está abierto, inicie su Trailhead Playground. Si ve una ficha en su organización etiquetada como Install a Package (Instalar un paquete), excelente. Pase directamente al paso 1. De lo contrario, en el Iniciador de aplicación (), busque y abra Playground Starter y siga los pasos. Si no ve la aplicación Playground Starter, copie este enlace al paquete DreamHouse y consulte Instalar un paquete o una aplicación para completar un reto de Trailhead en la Ayuda de Trailhead.
- Haga clic en la ficha Install a Package (Instalar un paquete).
- Pegue
04t3h000004mBpiAAE
en el campo. - Haga clic en Install (Instalar).
- Seleccione Install for Admins Only (Instalar solo para administradores) y, a continuación, haga clic en Install (Instalar).
- Si se le solicita aprobar el acceso externo, seleccione Yes, grant access… (SÃ, otorgar acceso a estos sitios web externos) y luego haga clic en Continue (Continuar).
Una vez instalado el paquete, verá una página de confirmación y recibirá un correo electrónico en la dirección asociada al Playground.
Importar datos de Dreamhouse
- Haga clic en
, escriba
Dream
(Sueño) en el cuadro de búsqueda y luego seleccione la aplicación DreamHouse (Casa de ensueño). - Haga clic en la ficha Settings (Configuración). Si no ve la ficha Settings, expanda la lista de More (Más).
- Haga clic en Import Data (Importar datos).
- Haga clic en la ficha Properties (Propiedades) y revise los datos de ejemplo.
Explore el esquema de DreamHouse
Hasta ahora, solo hemos consultado objetos estándar. Ahora, veamos cómo consultar objetos personalizados. Usamos objetos en la aplicación DreamHouse, asà que primero vamos a examinar el esquema (modelo de datos) de DreamHouse para entender cómo está estructurada la información.
Abrir Schema Builder (Generador de esquemas)
- En su Trailhead Playground, haga clic en
y seleccione Setup (Configuración).
- Haga clic en Object Manager (Gestor de objetos).
- Haga clic en Schema Builder (Generador de esquemas).
- En la ficha Objetos, haga clic en Clear All (Borrar todo).
- Si aparece Broker (Agente) en lugar de Broker__c (Agente__c), haga clic en View Options (Opciones de visualización) y luego seleccione Display Element Names (Mostrar nombres de elementos).
-
Recuerde que en el código usamos los nombres de los campos en su formato de API. Mostrar nombres de elementos revela los nombres de los campos en su formato de API en lugar de las etiquetas de campo. (El nombre de API para un objeto personalizado es el nombre de ese objeto personalizado con __c [doble guion bajo c] añadido al final).
- En Select from list (Seleccionar desde lista), elija Custom Objects (Objetos personalizados).
- Seleccione Broker__c (Agente__c) y Property__c (Propiedad__c). Estos son los objetos personalizados que utilizamos en esta unidad.
- Haga clic en Auto-Layout (Formato automático).
- Examine los campos de la propiedad.
-
El objeto personalizado Property__c (Propiedad__c) tiene dos campos personalizados: Picture__c (Imagen__c) y Broker__c (Agente__c). (El nombre de API para un campo personalizado es el nombre del campo personalizado con __c [doble guion bajo c] añadido al final).
- Pase el cursor sobre la lÃnea de relación que conecta Property__c (Propiedad__c) y Broker__c (Agente__c).
-
Existe una relación de búsqueda desde el campo personalizado Broker__c (Agente__c) en el objeto personalizado Property__c (Propiedad__c) hacia el objeto personalizado Broker__c (Agente__c).
- En el elemento Property__c (Propiedad__c), haga clic en el icono de engranaje y luego seleccione View Object (Ver objeto).
Se abrirá Object Manager (Gestor de objetos) mostrando el objeto Property__c (Propiedad__c). - Haga clic en Fields & Relationships (Campos y relaciones).
- Haga clic en la etiqueta del campo Broker (Agente).
- En la sección Lookup Options (Opciones de búsqueda), localice Child Relationship Name (Nombre de la relación secundaria).
Ahora sabemos que Property__c (Propiedad__c) es el objeto secundario de Broker__c (Agente__c) y que el nombre de la relación entre una propiedad y un agente es Properties (Propiedades). (Recuerde que el nombre de la relación suele ser la forma plural del nombre del objeto secundario).
Consultar objetos personalizados
Consultar un objeto personalizado es muy parecido a hacerlo con un objeto estándar, pero hay ciertas diferencias.
Considerar este requisito:
"Obtener una lista de todas las propiedades con la dirección de la propiedad, la imagen y el agente asignado".
Bastante sencillo, ¿verdad? Consultamos el objeto personalizado Property__ c (Propiedad__c) y obtenemos los campos personalizados Address__c (Dirección__c), Picture__c (Imagen__c) y Broker__c (Agente__c). Probémoslo.
Crear una consulta
- En el editor de consultas, escriba:
- Haga clic en Execute (Ejecutar).
Las primeras seis filas de sus resultados deberÃan ser:Resultados de la consulta - Filas totales: 12 Address__c (Dirección__c)
Picture__c (Imagen__c)
Broker__c (Agente__c)
18 Henry St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
24 Pearl St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
72 Francis St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
32 Prince St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
110 Baxter St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
448 Hannover St.
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
Observe que el contenido de la columna Broker__c (Agente__c) no es muy práctico. Eso es porque el campo Broker__c (Agente__c) en el objeto Property__c (Propiedad__c) es una búsqueda al objeto Broker (Agente). Los campos con relaciones de búsqueda contienen el Id. del objeto relacionado. Para obtener el nombre del Broker (Agente), necesitamos hacer una consulta de relación.
Crear una consulta de secundario a principal
Debido a que Broker__c (Agente__c) es el objeto principal de Property__ c (Propiedad__c), necesitamos hacer una consulta de secundario a principal. Usamos el nombre de la relación y la notación con punto para obtener el campo Name (Nombre) del objeto Broker__c (Agente__c).
- En el editor de consultas, cambie Broker__c (Agente__c) por Broker__c.Name (Agente__c.Nombre), de la siguiente manera:
- Haga clic en Execute (Ejecutar). (Obtiene un mensaje de error).
Error Message (Mensaje de error)
No se ha entendido la relación "Broker__c" (Agente__c) en la ruta del campo. Si está intentando usar una relación personalizada, asegúrese de agregar "__r" después del nombre de la relación personalizada.
¡Vaya! ¿Qué ha ocurrido? Recuerde que Broker__c (Agente__c) es un campo personalizado en el objeto Property (Propiedad). Lo que queremos es el objeto relacionado Broker__c (Agente__c).
Use los nombres de relaciones personalizadas en la consulta
Para especificar el objeto relacionado Broker__c (Agente__c) (y no el campo Broker__c [Agente__c]), cambiamos "__c" por "__r" (doble guion bajo r). Broker__r (Agente__r) es el nombre de la relación personalizada. Indica que deseamos recorrer la relación desde Property__c (Propiedad__c) hacia el objeto Broker__c (Agente__c). Esta parte de la consulta dice: "Obtenga el campo Name (Nombre) del objeto personalizado Broker__c (Agente__c) relacionado". Actualicemos nuestra consulta.
- En el editor de consultas, cambie
Broker__c
(Agente__c) aBroker__r
(Agente__c), de la siguiente manera: - Haga clic en Execute (Ejecutar).
Las primeras seis filas de los resultados deberÃan ser:Resultados de la consulta - Filas totales: 12 Address__c (Dirección__c)
Picture__c (Imagen__c)
Broker__r.Name (Agente_r.Nombre)
18 Henry St.
https://s3-us-west-2.amazonaws.com...
Caroline Kingsley
24 Pearl St.
https://s3-us-west-2.amazonaws.com...
Michael Jones
72 Francis St.
https://s3-us-west-2.amazonaws.com...
Jonathan Bradley
32 Prince St.
https://s3-us-west-2.amazonaws.com...
Jennifer Wu
110 Baxter St.
https://s3-us-west-2.amazonaws.com...
Olivia Green
448 Hannover St.
https://s3-us-west-2.amazonaws.com...
Miriam Aupont
Mejor todavÃa. En lugar del Id., ahora tenemos el campo Name (Nombre) del objeto personalizado Broker (Agente).
Crear una consulta de principal a secundario
Hemos devuelto cada propiedad con su agente relacionado. ¿Qué pasa si queremos justo lo contrario?
Requisito:
"Obtener los nombres de todos los agentes con la dirección y el precio de todas las propiedades asignadas a cada uno".
Debido a que queremos una lista de agentes, en nuestra consulta principal, veremos el objeto Broker__c (Agente__c):
El agente es el objeto principal, por lo que la consulta de principal a secundario necesita una subconsulta del objeto secundario. Usamos el nombre de la relación secundaria en la subconsulta.
¿Cuál es el nombre de la relación para una subconsulta del objeto Property__c (Propiedad__c)? Verifique los detalles del campo Broker (Agente) en el objeto Property (Propiedad).
El nombre de la relación secundaria es Properties (Propiedades). Debido a que esta es una relación personalizada, cuando la usamos en una consulta, agregamos __r (Properties__r
[Propiedades__r]). Entonces, nuestra subconsulta (entre paréntesis) es:
(SELECT Address__c, Price__c FROM Properties__r
[SELECCIONAR Dirección__c, Precio__c DE Propiedades__r])
Cuando insertamos la subconsulta en la consulta principal, asà es como se ve:
SELECT Name, (SELECT Address__c, Price__c FROM Properties__r) FROM Broker__c
(SELECCIONAR Nombre, [SELECCIONAR Dirección__c, Precio__c DE Propiedades__r] DE Agente__c)
Ejecutar la consulta
- En el editor de consultas, escriba:
- Haga clic en Execute (Ejecutar).
Las primeras ocho filas de sus resultados deberÃan verse asÃ:
¡Perfecto! Ahora tenemos una lista de todos los agentes y una lista separada por comas de las propiedades de cada agente. Cuando esté desarrollando consultas, recuerde que el editor de consultas de Developer Console proporciona una forma fácil de probar y ajustar sus consultas SOQL.