Etwa 20 Minuten
- Lernziele
- Verwalten der Navigation
- Navigation in Lightning Experience
- Klassische Visualforce-Navigation
- Moderne Visualforce-Navigation
- Wichtig
- Schwächen bei der Navigation und entsprechende Korrekturmöglichkeiten
- Legen Sie window.location nicht direkt fest
- Das Salesforce Classic-Problem
- Statische URLs
- Ressourcen
- Aufgabe +100 Punkte
Benötigen Sie Hilfe?
Verwalten der Navigation
Lernziele
- Beschreiben der drei "klassischen" Visualforce-Mechanismen für die Steuerung der Navigation von einer Seite zu einer anderen.
- Angeben, welche dieser Verfahren nicht in Lightning Experience funktionieren.
- Auflisten von mindestens drei Lightning Experience-Navigationsereignissen und den zugehörigen Sendeverfahren.
Verwalten der Navigation
Die "klassische" Visualforce-Navigation funktioniert natürlich weiterhin. Ihre neuen Visualforce-Seiten können selbstverständlich ebenfalls die Vorteile der neuen Lightning Experience-Mechanismen nutzen.
Navigation in Lightning Experience
Erstens könnte mit Navigation die Benutzeroberflächenelemente auf dem Bildschirm gemeint sein. Sie klicken auf irgendetwas, sodass irgendwas passiert. Wenn Sie beispielsweise im Navigationsmenü auf den Eintrag "Accounts" klicken, wird die Accounts-Objektstartseite angezeigt. Wenn Sie auf die Schaltfläche "Neu" klicken, wird eine Datensatzeingabemaske angezeigt. Wenn Sie in einem Schnellaktionsmenü auf eine benutzerdefinierte Aktion klicken, wird ein benutzerdefinierter Prozess gestartet. Es gibt noch viele weitere Beispiele. Diese Schaltflächen und Menüelemente sind Navigationselemente.
Der Aufbau des Navigationssystems (Benutzeroberfläche in Lightning Experience) unterscheidet sich stark von Salesforce Classic. Diese Unterschiede werden hier nicht weiter behandelt. Sie sollten jedoch wissen, wohin Funktionen verschoben werden, wenn Sie zwischen den beiden Benutzeroberflächen wechseln. Weitere Informationen zu diesem Thema finden Sie hier in Trailhead in der Lektion Navigation in Lightning Experience und Setup.
Eine andere, weniger sichtbare Art der Navigation ist der obige Nebensatz "sodass irgendetwas passiert". Salesforce entscheidet im Hintergrund, was passiert, wenn Sie ein Element in einem Menü auswählen oder auf einen Link oder eine Schaltfläche klicken. Ein Großteil dieser Navigation ist bereits in Salesforce integriert. Andere Aspekte sind demgegenüber anpassbar, z. B. Überschreiben von Aktionen mit Visualforce-Seiten. Die gesamte derartige Navigation wird durch Code verwaltet, der von Salesforce geschrieben wird.
Darüber hinaus gibt es eine Navigation in Ihren eigenen Anwendungen, d. h. Ihr Code steuert den Anwendungsablauf. Wohin gehen Sie, wenn Ihre benutzerdefinierte Aktion ein Formular öffnet und der Benutzer auf "Speichern" klickt? Wenn Ihr aktiver Code eine Entscheidung fällt, wohin der Benutzer als Nächstes geht, und ihn dorthin bringt. Diese Art Navigation wird in dieser Lektion behandelt.
Klassische Visualforce-Navigation
Beachten Sie ebenfalls, dass Aktionsmethoden des Standardsteuerfelds ein PageReference-Objekt zurückgeben. Ihre vorhandene Navigation funktioniert daher weiterhin wie zu erwarten – unabhängig davon, ob Sie das Standardsteuerfeld oder eigenen benutzerdefinierten Steuerfeldcode verwenden.
Moderne Visualforce-Navigation
Es gibt eine großartige Zukunft in JavaScript und diese Zukunft steht heute vor Ihnen. Viele und immer mehr Visualforce-Entwickler setzen JavaScript in Ihren Anwendungen umfassend ein. Das klassische Visualforce funktioniert und wird auch für längere Zeit noch funktionieren. Da die Entwickler aber Visualforce-Funktionen wie Remote-Objekte und JavaScript Remoting verwenden, wird das Verhalten von Anwendungen immer mehr von der Serverseite, auf der PageReference die Regel ist, auf den Browser und JavaScript verlagert, in denen PageReference o. ä. keine Rolle spielt.
In Lightning Experience (und der Salesforce-Anwendung) gibt es Regeln und Tools zum Erstellen der Navigation in JavaScript. Wir werden die Regeln, die im Wesentlichen festlegen, was nicht passieren soll, in Kürze behandeln. Lassen Sie uns zuerst die richtige Vorgehensweise behandeln.
Lightning Experience verwaltet die Navigation mithilfe von Ereignissen. Das Navigationsereignisframework wird als JavaScript-Dienstprogrammobjekt zur Verfügung gestellt, das eine Vielzahl von Funktionen bereitstellt, um die Erstellung einer programmatischen Navigation zu vereinfachen. Das sforce.one-Objekt wird automatisch zu Visualforce-Seiten hinzugefügt, wenn sie in Lightning Experience ausgeführt werden. Dieses Objekt stellt eine Reihe von Funktionen zur Verfügung, die Navigationsereignisse auslösen, wenn die Funktionen aufgerufen werden. Um diese Funktionen zu verwenden, können Sie sie direkt im JavaScript-Code Ihrer Seite aufrufen oder Aufrufe als Klick-Handler (oder andere Handler) mit Elementen auf der Seite verknüpfen.
Wichtig
Das sforce.one-Objekt ist in Salesforce Classic nicht verfügbar. Jeder Code, der dieses Objekt verwendet, muss zuerst prüfen, ob sforce.one vorhanden ist.
Funktion | Beschreibung |
---|---|
back([refresh]) | Navigiert zum vorherigen Zustand, der im sforce.one-Verlauf gespeichert ist. Dies entspricht dem Klicken auf die Schaltfläche "Zurück" des Browsers. |
navigateToSObject(recordId [, view]) | Navigiert zu dem von recordId angegebenen sObject-Datensatz. |
navigateToURL(url [, isredirect]) | Navigiert zum angegebenen URL. |
navigateToFeed(subjectId, type) | Navigiert zum Feed mit dem Typ type beschränkt auf subjectId. |
navigateToFeedItemDetail(feedItemId) | Navigiert zum angegeben Feedeintrag, feedItemId, und den zugehörigen Kommentaren. |
navigateToRelatedList(relatedListId, parentRecordId) | Navigiert zu der Themenliste für parentRecordId. |
navigateToList(listViewId, listViewName, scope) | Navigiert zur Listenansicht, die mit listViewId angegeben ist (die ID der anzuzeigenden Listenansicht). |
createRecord(entityName [, recordTypeId]) | Öffnet die Seite zur Erstellung eines neuen Datensatzes für den angegebenen entityName, z. B. "Account" oder "MyObject__c". |
editRecord(recordId) | Öffnet die Seite zur Bearbeitung des von recordId angegebenen Datensatzes. |
Weitere Informationen zur Nutzung dieser Funktionen und der Parameter, die sie akzeptieren finden Sie unter Navigation und Messaging mit dem sforce.one-Objekt in der Ressourcenliste dieser Einheit.
Schwächen bei der Navigation und entsprechende Korrekturmöglichkeiten
Legen Sie window.location nicht direkt fest
Worum geht es hier? Die Antwort ist ziemlich einfach. In Lightning Experience gibt es für die Seite keine window.location, die festgelegt werden kann! Erinnern Sie sich an die frühere Diskussion über den Visualforce-"Container" und die Verwendung in einem IFrame, sodass Lightning Experience als eine Art Fitnessstudio dient? (SPA, Einzelseitenanwendung.) Dies ist eins der Dinge, das daraus herausfällt. Der Visualforce-IFrame hat keinen direkten Zugriff auf den window.location-Wert, sodass Sie ihn nicht festlegen können. Wenn Ihr Code davon abhängt, dass der Wert festgelegt wurde, funktioniert er nicht. Das heißt, dass Aktionen für die Navigation, die window.location festlegen, einfach nicht an die erwartete Stelle navigieren.
Es gibt eine Möglichkeit, diese Einschränkung zu umgehen. Davon wird aber dringend abgeraten. Der Grund dafür ist, dass Navigationsereignisse bei Umgehung der Navigationsfunktionen in sforce.one nicht im Lightning Experience-Navigationsstapel verfolgt werden. Dieser Stapel stellt nützlich Funktionen bereit, z. B. Zurück-Schaltflächen, die Umleitungen berücksichtigen, usw. Viele Funktionen in Lightning Experience (und besonders in der Salesforce-Anwendung) hängen davon ab, dass der Stapel alle Navigationsereignisse enthält. Sie sollten daher auf die richtige Verwendung achten.
Das Salesforce Classic-Problem
Unglücklicherweise gibt es ein weiteres Problem. Das sforce.one-Dienstprogrammobjekt ist nicht verfügbar, wenn Ihre Seite in Salesforce Classic ausgeführt wird. In diesem Kontextmüssen Sie window.location verwenden. Die gute Nachricht lautet: In Salesforce Classic ist window.location verfügbar. Die schlechte Nachricht lautet: Durch diese Einschränkung müssen Sie Ihrem Code einen unschönen if-Block hinzufügen. Sie sollten erwägen, Ihre Navigationsfunktionen in Dienstprogrammmethoden einzuschließen, die diese Komplexität bewerkstelligen, damit die Hauptnavigationslogik überschaubar bleibt.
Statische URLs
- Verwenden Sie im Visualforce-Markup {!URLFOR($Action.Contact.Edit, recordId)}
- Verwenden Sie in JavaScript navigateToSObject(recordId)
Ressourcen
- Trailhead: Navigation und Setup in Lightning Experience
- Trailhead: Anpassung: Erstellen benutzerdefinierter Schaltflächen und Links
- Visualforce-Entwicklerhandbuch: PageReference-Klasse
- Visualforce-Entwicklerhandbuch: Dynamische Verweise auf Aktionsmethoden mit $Action
- Salesforce Mobile App Developer Guide: Navigation und Messaging mit dem sforce.one-Objekt