Skip to main content

Verwalten der Navigation

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
  • 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

Anwendungsablauf und Navigation bilden in vielerlei Hinsicht das Herz der Anwendungsentwicklung. Visualforce bietet eine Reihe von Möglichkeiten, Navigationselemente hinzuzufügen und den Anwendungsablauf zu steuern. Lightning Experience umfasst einen eigenen Anwendungsablauf, eigene Navigationselemente und Mechanismen für die Beeinflussung der Benutzernavigation bei der Verwendung von Salesforce.

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.

Lassen Sie uns ein wenig über Navigation im Allgemeinen sprechen, bevor wir die Details der Visualforce-Navigation und deren Erstellung behandelt, damit sie in Salesforce Classic und Lightning Experience funktioniert. Was ist eigentlich mit "Navigation" gemeint?

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

Die "klassische" Visualforce-Navigation kann auf "Was passiert am Ende einer Aktionsmethode" reduziert werden. Aktionsmethoden geben ein PageReference-Objekt mit den Details zurück, wohin der Benutzer geführt werden soll. Das Visualforce-Framework übernimmt dann die Einzelheiten, um die richtige Antwort an den Browser des Benutzers zu senden. All dies gilt weiterhin.

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

Warum sprechen wir weiterhin über die klassische Visualforce-Navigation, wenn sie doch funktioniert? Worüber reden wir eigentlich? Dazu gibt es nur ein Wort zu sagen, nur ein Wort. Dieses lautet: "JavaScript".

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

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.

Das sforce.one-Objekt stellt folgende Funktionen zur Verfügung. Verwenden Sie die Punktnotation, um vom sforce.one-Objekt auf die Funktion zu verweisen. Beispiel: sforce.one.navigateToSObject(...).
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.

Die erste Regel bei der Erstellung der Visualforce-Navigation in JavaScript lautet: Legen Sie window.location nicht direkt fest. Die zweite Regel bei der Erstellung der Visualforce-Navigation in JavaScript lautet: Legen Sie window.location nicht direkt fest.

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 keine statischen URLs zu Salesforce-Ressourcen. Das heißt: Erstellen Sie beim Hinzufügen eines Links zum Bearbeiten eines Kontaktdatensatzes den Link nicht als Zeichenfolge mit einem statischen Muster wie link = '/' + accountId + '/e'. Dies funktioniert zwar in einigen Kontexten, aber nicht in allen. Verwenden Sie stattdessen eines der folgenden Verfahren:
  • Verwenden Sie im Visualforce-Markup {!URLFOR($Action.Contact.Edit, recordId)}
  • Verwenden Sie in JavaScript navigateToSObject(recordId)
Es gibt Aktionen und Funktionen zum Anzeigen, Erstellen, Bearbeiten usw. Verwenden Sie diese anstellen von URL-Zeichenfolgen.
Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"