20 minutos aproximadamente
- Objetivos de aprendizaje
- Gestión de la navegación
- Navegación en Lightning Experience
- Navegación clásica de Visualforce
- Navegación clásica de Visualforce
- Importante
- Trampas de navegación y cómo sortearlas
- No establezca window.location directamente
- El problema de Salesforce Classic
- Direcciones URL estáticas
- Recursos
- Reto +100 puntos
¿Necesita ayuda?
Gestionar la navegación
Objetivos de aprendizaje
- Describir tres mecanismos “clásicos” de Visualforce para controlar la navegación de una página a otra.
- Describir cuáles de estas técnicas no funcionan en Lightning Experience.
- Enumerar al menos tres eventos de navegación de Lightning Experience y cómo enviarlos.
Gestión de la navegación
Las buenas noticias son que esta navegación “clásica” de Visualforce sigue funcionando. Y lo mejor es que sus páginas de Visualforce pueden aprovechar también los nuevos mecanismos de Lightning Experience.
Navegación en Lightning Experience
Su primer significado es elementos de la interfaz de usuario en la pantalla. Se hace clic en algo, y algo ocurre. Por ejemplo, hace clic en el elemento Cuentas en el menú de navegación, y va a la página de inicio del objeto Cuentas. Hace clic en el botón Nuevo, y aparece un formulario de entrada de registro. Selecciona una acción personalizada desde un menú de acciones rápidas e inicia un proceso personalizado. Etcétera. Estos botones y elementos de menú son elementos de navegación.
El diseño del sistema de navegación, la interfaz de usuario en Lightning Experience, es muy diferente de Salesforce Classic. No vamos hablar aquí de las diferencias, pero querrá estar familiarizado con todo lo que se mueve cuando cambia entre las dos experiencias de usuario. Puede aprender más sobre esto aquí mismo en Trailhead en la unidad Navegación en Lightning Experience y Configuración.
Otro tipo de navegación menos visible es la parte “algo ocurre” de lo anterior. Entre bambalinas, Salesforce decide lo que va a ocurrir cuando selecciona un elemento en un menú o hace clic en un vínculo o botón. Mucha de esta navegación ya está incorporada en Salesforce, mientras otros aspectos son personalizables, como por ejemplo la sustitución de acciones con páginas de Visualforce. Pero toda esta navegación está gestionada por código escrito por Salesforce.
Y luego está la navegación en sus propias aplicaciones, aplicaciones que utilizan su código para controlar el flujo de aplicaciones. Cuando su acción personalizada abre un formulario y el usuario hace clic en guardar, ¿a dónde se dirige? Cuando su código en ejecución toma una decisión sobre a dónde debe dirigirse al usuario a continuación, lo lleva allí. De esto es de lo que vamos a hablar en esta unidad.
Navegación clásica de Visualforce
Recuerde también que el Controlador estándar devuelve PageReference desde sus métodos de acción. De este modo, su navegación existente, donde esté utilizando el Controlador estándar o su propio código de controlador personalizado, sigue funcionando como espera.
Navegación clásica de Visualforce
Hay una gran función en JavaScript, y el futuro está aquí, ahora. Muchos desarrolladores de Visualforce están utilizando JavaScript intensamente en sus aplicaciones, y esto sigue creciendo. El Visualforce clásico funciona, y seguirá haciéndolo mucho tiempo. Pero a medida que los desarrolladores adoptan funciones de Visualforce como Objetos remotos y comunicación remota de JavaScript, mucho del comportamiento de sus aplicaciones se traslada desde el lado del servidor, donde PageReference es la regla, al navegador y JavaScript, donde no existe ninguna cosa como PageReference.
En el mundo de Lightning Experience (y la aplicación Salesforce), hay reglas y herramientas para crear navegación en JavaScript. En breve trataremos las reglas, que tratan en su mayor parte de lo que no hay que hacer. Hablemos primero de la forma de hacer bien las cosas.
Lightning Experience gestiona la navegación empleando eventos. El marco de trabajo de los eventos de navegación queda disponible como un objeto de utilidad de JavaScript que proporciona un número de funciones que hacen que la creación de navegación programática sea sencilla. El objeto sforce.one se agrega automáticamente a las páginas de Visualforce cuando se ejecutan en Lightning Experience. Este objeto proporciona un número de funciones que desencadenan eventos de navegación cuando se llama a las funciones. Para utilizar estas funciones, puede llamaras directamente desde el código JavaScript de su página, o puede acompañar llamadas como controladores de clic (u otros) a elementos en la página.
Importante
El objeto sforce.one no está disponible en Salesforce Classic. Cualquier código que lo utilice debe comprobar primero la existencia de sforce.one.
Función | Descripción |
---|---|
back([refresh]) | Navega al estado anterior que está guardado en el historial de sforce.one. Es equivalente a hacer clic en el botón Atrás de un navegador. |
navigateToSObject(recordId[, view]) | Navega a un registro de sObject especificado por recordId. |
navigateToURL(url[, isredirect]) | Se desplaza hasta la URL especificada. |
navigateToFeed(subjectId, type ) | Navega hasta las noticias en tiempo real de type, especificado, con el ámbito de subjectId. |
navigateToFeedItemDetail(feedItemId ) | Navega hasta el elemento de las noticias en tiempo real especificado, feedItemId, y cualquier comentario asociado. |
navigateToRelatedList(relatedListId, parentRecordId ) | Navega hasta la lista relacionada especificada para parentRecordId. |
navigateToList(listViewId, listViewName, scope ) | Navega hasta la vista de lista que está especificada por listViewId, que es el Id. de la vista de lista que hay que visualizar. |
createRecord(entityName [, recordTypeId ]) | Abre la página para crear un nuevo registro para entityName especificado, por ejemplo, “Cuenta” o “MiObjeto__c”. |
editRecord(recordId ) | Abre la página para modificar el registro especificado por recordId. |
Para obtener detalles adicionales sobre el uso de estas funciones, así como los parámetros que aceptan, consulte Navegación y mensajería con el objeto sforce.one en los recursos de esta unidad.
Trampas de navegación y cómo sortearlas
No establezca window.location directamente
Vale, a parte de la repetición gratuita y la referencia cinematográfica, ¿qué es lo realmente importante aquí? ¡Es bastante fácil! Cuando se está Lightning Experience, ¡su página no tiene una window.location que establecer! Recuerda el debate anterior sobre el “contenedor” de Visualforce que está en un iframe y Lightning Experience que es como un tipo de gimnasio? (SPA: aplicación de página única.) Esta es una de las cosas que se queda fuera. El iframe de Visualforce no tiene acceso directo al valor de window.location, de modo que no puede establecerlo. Si su código depende de su establecimiento, quedará interrumpido. O sea, las acciones que desencadenan la navegación estableciendo window.location simplemente dejarán de navegar al punto donde espera que vayan.
Existe una forma de saltarse esta restricción, pero no debería utilizarla. La razón es que si omite las funciones de navegación en sforce.one, no se realizará un seguimiento de sus eventos de navegación en la pila de navegación de Lightning Experience. Esta pila proporciona funciones útiles, como botones Atrás que tienen en cuenta los redireccionamientos y similares. Un número de funciones en Lightning Experience (y especialmente en la aplicación Salesforce) dependen de la pila que contiene todos los eventos de navegación. Merece la pena asegurarse de que la utilice correctamente.
El problema de Salesforce Classic
Vale, sí, está esta... cosa. Desgraciadamente, el objeto de utilidad sforce.one no está disponible cuando su página se ejecuta en Salesforce Classic. En ese contexto, tiene que utilizar window.location. Las buenas noticias son que en Salesforce Classic, window.location está disponible. Las malas noticias son que esta limitación supone que tiene que incorporar un feo bloque if a su código. Considere encerrar sus funciones de navegación en métodos de utilidad que tratan esta complejidad, de modo que su lógica de navegación principal pueda ser transparente.
Direcciones URL estáticas
- En marcas de Visualforce, utilice {!URLFOR($Action.Contact.Edit, recordId)}
- En JavaScript, utilice navigateToSObject(recordId)
Recursos
- Trailhead: Navegación y configuración en Lightning Experience
- Trailhead: Personalización: Crear botones y vínculos personalizados
- Guía del desarrollador de Visualforce: clase PageReference
- Guía del desarrollador de Visualforce: Referencias dinámicas a métodos de acción utilizando $Action
- Guía del desarrollador de aplicaciones móviles Salesforce: Navegación y mensajería con el objeto sforce.one