Environ 20 min
- Objectifs de formation
- Gestion de la navigation
- Navigation dans Lightning Experience
- Navigation Visualforce classique
- Navigation Visualforce moderne
- Important :
- Pièges de la navigation et comment les éviter
- Ne définissez pas directement window.location
- Le problème Salesforce Classic
- URL statiques
- Ressources
- Défi +100 points
Besoin d'aide ?
Gestion de la navigation
Objectifs de formation
- Décrire les trois mécanismes « classiques » de Visualforce pour contrôler la navigation d’une page à l’autre.
- Décrire, parmi ces techniques, celles qui ne fonctionnent pas dans Lightning Experience.
- Mentionner au moins trois événements de navigation de Lightning Experience et comment les envoyer.
Gestion de la navigation
La bonne nouvelle est que votre navigation Visualforce « classique » fonctionne toujours. La meilleure nouvelle est que vos pages Visualforce peuvent aussi profiter des nouveaux mécanismes de Lightning Experience.
Navigation dans Lightning Experience
La première chose à laquelle on peut penser en parlant de navigation, ce sont les éléments de l'interface utilisateur affichés à l'écran. Vous cliquez sur un élément et quelque chose se produit. Par exemple, vous cliquez sur l'élément Compte dans le menu de navigation et vous arrivez sur la page d'accueil de l'objet Comptes. Vous cliquez sur le bouton Nouveau et un formulaire de saisie d'enregistrement apparaît. Vous choisissez une action personnalisée dans un menu d'actions rapides et un processus personnalisé démarre. et ainsi de suite. Ces boutons et éléments de menu sont des éléments de navigation.
L’apparence du système de navigation, c’est-à-dire l’interface utilisateur de Lightning Experience, est très différente de ce que proposait Salesforce Classic. Nous ne nous y attarderons pas ici, mais vous souhaiterez probablement vous familiariser avec ce qui a changé lorsque vous basculerez entre ces deux expériences utilisateur. Vous pourrez en savoir plus à ce sujet dans Trailhead, dans l'unité Navigation dans Lightning Experience et configuration.
Il existe une autre sorte de navigation, moins visible : il s'agit de la partie « il se passe quelque chose ». En arrière-plan, Salesforce décide de ce qu'il va se passer lorsque vous sélectionnez un élément dans un menu ou quand vous cliquez sur un lien ou un bouton. La plupart des éléments de navigation sont déjà intégrés à Salesforce alors que d’autres aspects sont personnalisables, comme le remplacement d’actions avec des pages Visualforce. Toutefois, l'intégralité de la navigation est gérée par du code rédigé par Salesforce.
Il y a ensuite la navigation dans vos applications : ces dernières utilisent votre code pour contrôler le flux de l'application. Lorsque votre action personnalisée ouvre un formulaire et que l'utilisateur clique sur Enregistrer, où allez-vous ? Lorsque votre code actuel décide de l'endroit où l'utilisateur doit aller par la suite et qu'il l'y envoie. Nous allons parler de tout ceci dans cette unité.
Navigation Visualforce classique
Souvenez-vous également que le contrôleur standard renvoie un objet PageReference à partir de ses méthodes d’action. Ainsi, votre navigation actuelle, que vous utilisiez le contrôleur standard ou un code de contrôleur personnalisé, continue à fonctionner normalement.
Navigation Visualforce moderne
JavaScript est promis à un grand avenir, et c'est maintenant. De nombreux développeurs de Visualforce utilisent beaucoup JavaScript dans leurs applications et la tendance est à la hausse. Visualforce classique fonctionne et continuera à fonctionner pour longtemps. Mais, à mesure que les développeurs adoptent des fonctionnalités de Visualforce, telles que les objets distants et JavaScript Remoting, le comportement de nombreuses applications migre du côté serveur, où l’objet PageReference constitue la règle, vers le navigateur et vers JavaScript, où il n’existe rien de comparable à PageReference.
Dans l'univers Lightning Experience (et l’application Salesforce), des règles et des outils permettent d'élaborer une navigation en JavaScript. Nous reviendrons dans un instant sur ces règles qui concernent essentiellement ce qu'il ne faut pas faire. Mais parlons tout d'abord de la bonne manière de faire les choses.
Lightning Experience gère la navigation grâce à des événements. Le système des événements de navigation est disponible en tant qu'objet utilitaire JavaScript, qui offre de nombreuses fonctions qui simplifient la création d'une navigation par programmation. L’objet sforce.one est automatiquement ajouté aux pages Visualforce lorsqu’elles sont exécutées dans Lightning Experience. Cet objet offre de nombreuses fonctions qui déclenchent les événements de navigation lorsque ces fonctions sont appelées. Pour les utiliser, vous pouvez les appeler directement depuis le code JavaScript de votre page ou lier les appels en tant que gestionnaires de clics (ou autres) à des éléments de la page.
Important :
L’objet sforce.one n’est pas disponible dans Salesforce Classic. Tout code utilisant cet objet doit tout d’abord tester l’existence de sforce.one.
Fonction | Description |
---|---|
back([refresh]) | Accède au dernier état enregistré dans l’historique de sforce.one. Cela équivaut à cliquer sur le bouton Précédent dans un navigateur. |
navigateToSObject(recordId,[view]) | Accède à un enregistrement sObject spécifié par recordId. |
navigateToURL(url,[isredirect]) | Accède à l'URL spécifiée. |
navigateToFeed(subjectId, type) | Accède au fil du type spécifié selon l’objet subjectId. |
navigateToFeedItemDetail(feedItemId) | Accède à l'élément du fil spécifique, feedItemId, ainsi qu'à tout commentaire associé. |
navigateToRelatedList(relatedListId, parentRecordId) | Accède à une liste associée pour parentRecordId. |
navigateToList(listViewId, listViewName, scope) | Accède à la vue de liste spécifiée par listViewId, qui correspond à l'ID de la vue de liste à afficher. |
createRecord(entityName,[recordTypeId]) | Ouvre la page de création d'un enregistrement pour le nom entityApiName spécifié, par exemple « Account » ou « MyObject__c ». |
editRecord(recordId) | Ouvre la page de modification de l’enregistrement spécifié par recordId. |
Pour en savoir plus sur l’utilisation de ces fonctions et sur les paramètres qu’elles acceptent, consultez Navigation et Messagerie avec l’objet sforce.one dans les ressources de cette unité.
Pièges de la navigation et comment les éviter
Ne définissez pas directement window.location
OK, à part ces répétitions et la référence cinématographique, de quoi parle-t-on ? C'est assez simple. Dans Lightning Experience, votre page n’a pas de window.location à définir ! Souvenez-vous de nos précédentes discussions sur le « conteneur » Visualforce, situé dans un iframe et où Lightning Experience est une sorte de club de sport. (SPA, application web monopage.) C'est l'une des choses qui en découlent. L’iframe Visualforce n’a pas d’accès direct à la valeur window.location, vous ne pouvez donc pas la définir. Si votre code dépend de cette définition, il rencontrera un problème. En effet, les actions qui déclenchent la navigation en définissant window.location s’arrêteront simplement de naviguer, où que vous souhaitiez accéder.
Il existe bien un moyen de contourner cette restriction, mais nous vous conseillons de ne pas l'utiliser. En effet, si vous évitez les fonctions de navigation dans sforce.one, vos événements de navigation ne seront pas enregistrés dans la pile de navigation de Lightning Experience. Cette dernière offre des fonctionnalités utiles comme des boutons Précédent qui prennent en compte les redirections et outils similaires. De nombreuses fonctionnalités de Lightning Experience (notamment dans l’application Salesforce) dépendent de cette pile contenant tous les événements de navigation. Il vaut donc la peine de vous assurer que vous l'utilisez correctement.
Le problème Salesforce Classic
Oui, il y a donc cette petite… chose. Malheureusement, l’objet utilitaire sforce.one n’est pas disponible lorsque vos pages sont exécutées dans Salesforce Classic. Dans ce cas de figure, vous devez utiliser window.location. Bonne nouvelle, dans Salesforce Classic, window.location est disponible. Mauvaise nouvelle, cette limite signifie que vous devrez ajouter un triste bloc if à votre code. Pensez à placer vos fonctions de navigation dans des méthodes utilitaires qui traitent cette complexité afin que votre logique de navigation principale puisse être simple.
URL statiques
- Dans le balisage Visualforce, utilisez {!URLFOR($Action.Contact.Edit, recordId)}
- Dans JavaScript, utilisez navigateToSObject(recordId)
Ressources
- Trailhead : Navigation and Setup in Lightning Experience
- Trailhead : Customization: Créer des boutons et des liens personnalisés
- Visualforce Developer’s Guide: PageReference Class
- Visualforce Developer’s Guide: Références dynamiques à des méthodes d’action avec $Action
- Salesforce Mobile App Developer Guide: Navigation et envoi de messages avec l’objet sforce.one