Skip to main content

Gestionar la navegación

Objetivos de aprendizaje

Después de completar esta unidad, podrá:
  • 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

El flujo de aplicaciones y la navegación suponen de muchas maneras el corazón del diseño de aplicaciones. Visualforce proporciona diversas maneras de agregar elementos de navegación y dirigir el flujo de las aplicaciones. Lightning Experience incorpora su propio flujo de aplicaciones, elementos de navegación y mecanismos para afectar a los puntos donde se dirigen los usuarios cuando utilizan Salesforce.

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.

Antes de que hablemos sobre los detalles de la navegación de Visualforce y cómo crearla para que funcione en Salesforce Classic y Lightning Experience, hablemos un poco de la navegación en general. ¿Qué queremos decir realmente con “navegación”?

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

La navegación “clásica” de Visualforce puede resumirse en “lo que ocurre al final de un método de acción”. Los métodos de acción devuelven un objeto PageReference con los detalles sobre el punto al que va a navegar el usuario, y luego el marco de Visualforce controla los detalles del envío de la respuesta adecuada de vuelta al navegador del usuario. Y bueno, excelentes noticias, todo esto funciona.

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

De modo que, si la navegación clásica de Visualforce, ¿por qué seguimos hablando de ello? ¿Por qué estamos teniendo una plática? Solo queremos transmitirle una palabra. Solo una. ¿Está atento? …“JavaScript”.

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

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.

El objeto sforce.one proporciona las siguientes funciones. Haga referencia a la función empleando la notación de puntos del objeto sforce.one. Por ejemplo: sforce.one.navigateToSObject(...).
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.

La primera regla de la creación de navegación de Visualforce en JavaScript es: no establecer window.location directamente. La segunda regla de la creación de navegación de Visualforce en JavaScript es: no establecer window.location directamente.

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

No emplee direcciones URL estáticas a recursos de Salesforce. O sea, que si está agregando un vínculo para modificar un registro Contacto, no cree el vínculo construyendo una cadena con un patrón estático como link = '/' + accountId + '/e'. En algunos contextos esto funciona, pero en otros no. En su lugar, pruebe uno de estos enfoques:
  • En marcas de Visualforce, utilice {!URLFOR($Action.Contact.Edit, recordId)}
  • En JavaScript, utilice navigateToSObject(recordId)
Existen acciones y funciones para visualizar, crear, modificar, etcétera. Utilícelas en vez de cadenas de URL.

Recursos

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios