Utilizar controladores estándar
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Explicar qué es un controlador estándar de Visualforce y describir sus atributos clave.
- Agregar un controlador estándar a una página de Visualforce.
- Mostrar datos desde un registro recuperado por el controlador estándar de una página.
- Redactar una expresión que utilice la notación de puntos para acceder a campos en un registro relacionado.
Introducción al controlador estándar de Visualforce
Visualforce utiliza el modelo tradicional Modelo–Vista–Controlador (MVC), e incluye controladores integrados sofisticados para gestionar acciones estándar y el acceso a datos, proporcionando una integración sencilla y ajustada con la base de datos de la plataforma Lightning. Generalmente, se hace referencia a estos controladores integrados como controladores estándar o incluso el controlador estándar.
El diseño modelo MVC (Modelo–Vista–Controlador) facilita la tarea de separar la vista y su estilo de la lógica y base de datos subyacente. En MVC, la vista (la página de Visualforce) interactúa con un controlador y el controlador proporciona funciones a la página. Por ejemplo, el controlador puede incluir la lógica para ejecutar cuando se hace clic en un botón. Un controlador también interactúa habitualmente con el modelo (la base de datos): haciendo disponibles datos que la vista podría necesitar mostrar o devolviendo cambios a la base de datos.
La mayoría de objetos estándar y todos los objetos personalizados tienen controladores estándar que se pueden utilizar con los datos asociados con el objeto, de modo que no necesita redactar el código para el controlador por sí mismo. Puede ampliar los controladores estándar para agregar nuevas funciones o crear controladores personalizados desde el principio. Aquí obtendrá información acerca de los controladores estándar.
Buscar un Id. de registro y agregarlo a la URL de solicitud
Para proporcionar el Id. de registro de un registro al controlador estándar, agréguelo como un parámetro en la URL de solicitud.
Si desea utilizar el controlador estándar para hacer referencia a un registro específico, necesita conocer el identificador del registro, o Id., del registro con el que trabajar El Id. se utiliza para recuperar los datos y para volver a guardarlos en la base de datos cuando cambian los datos del registro.
Cuando sus páginas de Visualforce interactúan con otras páginas en su organización, puede pasar automáticamente el identificador del registro y su página de Visualforce para buscar y mostrar los datos de ese registro. Pero durante el desarrollo, sus páginas son independientes, por lo que para que sus páginas muestren datos desde un registro en la base de datos, debe proporcionar el Id. de registro manualmente. La forma más sencilla de hacer esto es agregarlo como un parámetro GET en la URL de solicitud.
- Abra Developer Console y haga clic en File (Archivo) | New (Nuevo) | Visualforce Page (Página de Visualforce) para crear una nueva página de Visualforce. Escriba
AccountSummary
para el nombre de página.
- En el editor, sustituya cualquier marcado con lo siguiente.Este marcado crea un cuadro, listo para que agregue información útil.
<apex:page> <apex:pageBlock title="Account Summary"> <apex:pageBlockSection> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
- Haga clic en Preview (Vista previa) para abrir una vista previa de su página, que podrá ver mientras realiza cambios. Asegúrese de que puede ver el campo URL para la ventana de vista previa. Volverá justo a esto en unos pocos pasos.
- En una ventana del navegador separada, vaya a la página de inicio para su organización y luego seleccione la ficha Cuentas. Si la ficha Cuentas no es visible, cambie a la aplicación Ventas seleccionando Ventas en el menú de la aplicación en la esquina superior derecha.
- Asegúrese de que el menú Ver muestra Todas las cuentas.
- En la página Todas las cuentas, haga clic en cualquier nombre de cuenta.
- Cuando la página de detalles de cuenta finalice la carga, eche un vistazo a la URL para la página. La URL tendrá un aspecto parecido a este:
https://MyDomainName.lightning.force.com/lightning/r/Account/001D000000JRBes/view
. El identificador del registro, su Id., es la serie de letras y números. En este ejemplo, es001D000000JRBes
(pero será diferente en su organización). Es único en todos los registros de todos los tipos de objeto en su organización.
- Seleccione el Id. de registro y cópielo en su portapapeles. Antes de salir de la página de detalles de cuenta, eche un vistazo a la página completa y la información que se muestra en ella. [Texto alternativo: Página de detalles de la cuenta] No ha sido un desvío solo para obtener un Id. de registro. Antes de terminar, sabrá cómo crear una página que muestra la misma información, por sí solo, en código de Visualforce.
- Vuelva a la página de vista previa que abrió desde Developer Console. Haga clic en el campo URL de la ventana del navegador y, al final de la URL, escriba
&id=
y luego pegue la URL en el Id. de registro que copió previamente. La URL debe ser algo así:https://MyDomainName.lightning.force.com/apex/AccountSummary?core.apexpages.request.devconsole=1&id=001D000000JRBes
- Pulse Volver para cargar la página en la nueva URL.
Aunque la carga de la página de vista previa con el Id. de registro no parece diferente, agregar el Id. significa que ahora puede solicitar al controlador estándar ayuda para cargar ese registro y que esté disponible en la página.
Para obtener una vista previa de su página en el contexto de Lightning Experience, vuelva a la ventana principal de su navegador donde puede ver la página de detalles de la cuenta. Desde la página de detalles de cuentas, abra la consola JavaScript de su navegador e introduzca el siguiente código. No olvide sustituir pageName
por el nombre de su página:
$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName"}).fire();
Además, puede obtener una vista previa de una página con un Id. de registro de este modo, agregando el parámetro Id. de registro al final de la dirección URL en el JavaScript:
$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName?id=00141000004jkU0AAI"}).fire();
Mostrar datos desde un registro único
Agregue el controlador estándar para cuentas en la página y luego haga referencia a los campos de cuenta para mostrar datos de un registro.
Siga estos pasos desde la dirección URL de la página que acaba de cargar en la sección anterior para crear una página que muestra el resumen de una cuenta.
- Al comienzo de su marcado de página, en la etiqueta
<apex:page>
, agregue el siguiente atributo.standardController="Account"
Cuando guarde la página ahora, la página de vista previa se volverá a cargar como antes, pero ahora el controlador estándar para cuentas está activo. Cuando la página se carga, el controlador estándar analiza los parámetros en la URL, busca el parámetro id y utiliza su valor para recuperar un registro y hacerlo disponible en la página. No puede verlo aún, pero está aquí.
- En el cuerpo de la página, agregue el siguiente marcado.
Name: {! Account.name }
Ahora puede ver que se recuperó el registro. Debe ver el nombre de la cuenta con el Id. de registro que agregó a la URL.
- Sustituya la línea única por el nombre de cuenta con el siguiente marcado.Su código completo debería tener un aspecto similar a este.
Name: {! Account.Name } <br/> Phone: {! Account.Phone } <br/> Industry: {! Account.Industry } <br/> Revenue: {! Account.AnnualRevenue } <br/>
El resultado debe ser un resumen de cuenta sencillo.<apex:page standardController="Account"> <apex:pageBlock title="Account Summary"> <apex:pageBlockSection> Name: {! Account.Name } <br/> Phone: {! Account.Phone } <br/> Industry: {! Account.Industry } <br/> Revenue: {! Account.AnnualRevenue } <br/> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
¿Qué sucederá aquí? Un lote completo, cortesía del controlador estándar.
- Cuando se carga la página y se activa el componente
<apex:page>
, se activa un controlador estándar para el objeto de cuenta.
- El controlador estándar ve que existe un parámetro de Id. en la URL y busca y recupera el registro de cuenta coincidente.
- El controlador estándar coloca el registro en una variable que lo hace disponible en la página. La variable tiene el mismo nombre que el sObject del controlador estándar: Account. Es una variable de objeto y contiene todos los campos disponibles en el sObject de la cuenta.
- Las cuatro expresiones de Visualforce hacen referencia a la variable Account. Utilizan la notación de puntos para acceder a campos individuales en la variable Account.
Account.Name }
obtiene el nombre de la cuenta, etc.
Pero, ¿qué sucede con el número de ingresos? Muestra una notación científica. ¿Cómo puede mostrar eso como una divisa en su lugar?
El motivo por el cual el número se muestra como un valor “fila” en una notación científica es que el número se ha obtenido directamente mediante una expresión. Pone el valor de fila directamente en la página. Para controlar el formato del valor, necesita utilizar un componente y proporcionar al componente el valor para gestionar. El componente utilizará el valor de fila y le asignará el formato apropiado y luego se encargará de la salida del resultado en la página. Obtendremos más información sobre cómo de hacer esto en otro lugar. Aquí solo estamos interesados en el acceso a los datos del registro.
Mostrar campos desde registro relacionados
Utilice la notación de puntos para mostrar datos desde registros relacionados.
Por ejemplo, mientras visualiza los detalles del objeto para cuenta, es posible que haya observado que el objeto Cuenta tiene un campo denominado Propietario de cuenta y que su tipo es Búsqueda (Usuario). En otras palabras, este campo tiene una relación con un registro Usuario. Al hacer clic en el vínculo de etiqueta de campo Propietario de cuenta, descubrirá que su nombre de campo es Propietario.
La relación Propietario representa un usuario. Además, si en Setup (Configuración) va a Object Manager | User | Fields & Relationships (Gestor de objetos | Usuario | Campos y relaciones), verá que User (Usuario) tiene un campo Name (Nombre). Utilicemos esta información para mostrarlo.
En el cuerpo de la página, antes del nombre de la cuenta, agregue la siguiente línea.
Account owner: {! Account.Owner.Name } <br/>
La notación de puntos (Account.Owner.Name
) indica que desea atravesar la relación entre los registros. Sabe que Account.Owner
indica el campo Propietario del registro de cuenta. El nombre adicional al final indica que el campo de propietario no es un simple campo que representa una cadena, sino una relación con otro registro (es una búsqueda [Usuario]) y que desea obtener el registro representado por el valor del campo Propietario (es un registro Usuario) y mostrar el campo Nombre en ese registro.
Más información...
El controlador estándar es bastante potente y solo hemos tocado la superficie. Obtendrá mucha más información acerca de ellos en otro módulo, pero aquí le presentamos algunos aspectos destacados.
Además del fácil acceso a datos ilustrado aquí, el controlador estándar proporciona un conjunto de acciones estándar, como crear, modificar, guardar y eliminar, que puede agregar a sus páginas utilizando elementos de la interfaz de usuario estándar como botones y vínculos. Obtendrá más información acerca de estas acciones estándar cuando obtenga información acerca de formularios de entrada de Visualforce y vuelva a guardar cambios en la base de datos.
Las páginas de Visualforce que desea integrar en los formatos de página de un objeto, utilizar como acciones personalizadas específicas de objeto o utilizar como tarjetas móviles en la aplicación Salesforce deben utilizar el controlador estándar para el objeto correspondiente.
Si ha creado sus propios objetos personalizados (en vez de utilizar objetos como Cuenta) y desea saber cómo hacer referencia a un campo, debe seguir un procedimiento ligeramente diferente. En Setup (Configuración), escriba Object Manager (Gestor de objetos) en el cuadro Quick Find (Búsqueda rápida). A continuación, seleccione Object Manager | <your custom object> | Fields & Relationships (Gestor de objetos | su objeto personalizado | Campos y relaciones). Busque su campo y selecciónelo. El nombre de API ahora indica el nombre del campo que debe utilizar en sus páginas de Visualforce. Por ejemplo, si a su campo se le asignó el nombre Foo, su nombre de API es Foo__c y debe hacer referencia a él con ese nombre (algo parecido a: {!myobject__c.foo__c}
.
A pesar de la potencia del controlador estándar, hay veces que necesita hacer algo diferente. Y eso no supone un problema en Visualforce. En cualquier momento, puede sustituir o aumentar y redactar sus propios controladores o extensiones en los controladores integrados con el código Apex.
Recursos
- Guía del desarrollador de Visualforce: Controladores estándar
- Guía del desarrollador de Visualforce: Controladores de lista estándar
- Blog de desarrolladores de Salesforce: Twitter Bootstrap y Visualforce en minutos