Migrieren von Ecb-Menüelementen (Edit Control Block) zu SharePoint-Framework Erweiterungen
In den letzten Jahren nutzten die meisten Unternehmenslösungen, die auf Microsoft 365 und SharePoint Online basieren, die Websitefunktion CustomAction
des SharePoint Feature Frameworks, um die Benutzeroberfläche von Seiten zu erweitern. Mit der "modernen" Benutzeroberfläche von SharePoint sind die meisten dieser Anpassungen nicht mehr verfügbar. Mit SharePoint-Framework Erweiterungen können Sie ähnliche Funktionen in der modernen Benutzeroberfläche bereitstellen.
In diesem Tutorial erfahren Sie, wie Sie klassische Legacyanpassungen zum aktuellen Modell migrieren: SharePoint-Framework Erweiterungen.
Bei der Entwicklung von SharePoint-Framework-Erweiterungen sind folgende Optionen verfügbar:
- Application Customizer: Erweitert die native „moderne“ Benutzeroberfläche von SharePoint, indem benutzerdefinierte HTML-Elemente und clientseitiger Code den vordefinierten Platzhaltern der „modernen“ Seiten hinzugefügt werden. Weitere Informationen zu Anwendungsanpassungen finden Sie unter Erstellen Ihrer ersten SharePoint-Framework-Erweiterung (Hello World, Teil 1).
- Command Set: Fügt benutzerdefinierte ECB-Menüelemente (Edit Control Block) oder benutzerdefinierte Schaltflächen zur Befehlsleiste einer Listenansicht für eine Liste oder Bibliothek hinzu. Sie können diesen Befehlen eine beliebige clientseitige Aktion zuordnen. Weitere Informationen zu Befehlssätzen finden Sie unter Erstellen Ihrer ersten Erweiterung des Typs „ListView Command Set“.
- Field Customizer: Passt das Rendering eines Felds in einer Listenansicht mit benutzerdefinierten HTML-Elementen und clientseitigem Code an. Weitere Informationen zu Feldanpassungen finden Sie unter Erstellen Ihrer ersten Field Customizer-Erweiterung.
Die nützlichste Option in diesem Kontext ist die Erweiterung „Command Set“.
Angenommen, Sie verfügen in SharePoint Online über ein CustomAction
benutzerdefiniertes ECB-Menüelement für Dokumente in einer Bibliothek. Die Funktion des ECB-Menüelements besteht darin, eine benutzerdefinierte Seite zu öffnen, auf der die Listen-ID und die Listenelement-ID des aktuell ausgewählten Elements in der Abfragezeichenfolge der Zielseite bereitgestellt wird.
Im folgenden Codeausschnitt sehen Sie den XML-Code, der eine CustomAction
mithilfe des SharePoint-Featureframeworks definiert.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="OpenDetailsPageWithItemReference"
Title="Show Details"
Description="Opens a new page with further details about the currently selected item"
Sequence="1001"
RegistrationType="List"
RegistrationId="101"
Location="EditControlBlock">
<UrlAction Url="ShowDetails.aspx?ID={ItemId}&List={ListId}" />
</CustomAction>
</Elements>
Wie Sie sehen können, definiert die Featureelementdatei ein Element vom Typ CustomAction
, um ein neues Element am EditControlBlock
Speicherort (d.a. ECB) für jedes Dokument in einer beliebigen Bibliothek hinzuzufügen (RegistrationType
ist List
und RegistrationId
ist 101
).
In der folgenden Abbildung sehen Sie die Ausgabe der vorherigen benutzerdefinierten Aktion in der Listenansicht einer Bibliothek.
Beachten Sie, dass das benutzerdefinierte ECB-Element des SharePoint-Feature-Framework in einer „modernen“ Liste funktioniert. Tatsächlich funktioniert eine benutzerdefinierte Listenaktion auch in „modernen“ Listen, solange Sie keinen JavaScript-Code verwenden.
Zum Migrieren der vorherigen Lösung zum SharePoint-Framework führen Sie die folgenden Schritte aus.
Erstellen einer neuen SharePoint-Framework-Lösung
Erstellen Sie in der Konsole einen neuen Ordnern für Ihr Projekt:
md spfx-ecb-extension
Wechseln Sie zum Projektordner:
cd spfx-ecb-extension
Erstellen Sie ein neues SharePoint-Framework-Lösungswebpart, indem Sie den Yeoman SharePoint-Generator ausführen.
yo @microsoft/sharepoint
Wenn Sie dazu aufgefordert werden, geben Sie die folgenden Werte ein (wählen Sie für alle unten nicht aufgeführten Eingabeaufforderungen die Standardoption aus):
- Wie lautet der Name Ihrer Lösung?: spfx-ecb-extension
- Welche Basislinienpakete möchten Sie für Ihre Komponente(n) als Ziel festlegen? Nur SharePoint Online (neustes)
- Welchen Typ von clientseitiger Komponente möchten Sie erstellen?: Erweiterung
- Welchen Typ von clientseitiger Erweiterung möchten Sie erstellen? ListView-Befehlssatz
- Was ist Ihr Befehlssatzname? CustomECB
An diesem Punkt installiert Yeoman die erforderlichen Abhängigkeiten und erstellt ein Gerüst für die Lösungsdateien und Ordner sowie die CustomFooter-Erweiterung. Das kann einige Minuten dauern.
Starten Sie Visual Studio Code (oder den Code-Editor Ihrer Wahl), und beginnen Sie, die Lösung zu entwickeln. Zum Starten von Visual Studio Code können Sie die folgende Anweisung ausführen.
code .
Definieren des neuen ECB-Elements
Um das gleiche Verhalten des ECB-Menüelements zu reproduzieren, das mit dem SharePoint-Feature-Framework erstellt wurde, müssen Sie die gleiche Logik mithilfe von clientseitigem Code innerhalb der neuen SharePoint-Framework-Lösung implementieren. Gehen Sie hierzu wie folgt vor:
Öffnen Sie die Datei ./src/extensions/customEcb/CustomEcbCommandSet.manifest.json. Kopieren Sie den Wert der Eigenschaft
id
, und bewahren Sie ihn an einem sicheren Ort auf, da Sie ihn später benötigen.Bearbeiten Sie innerhalb derselben Datei das Array von
items
im unteren Teil der Datei, um einen einzelnen Befehl für den Befehlssatz zu definieren. Rufen Sie den Befehl ShowDetails auf, und geben Sie dann einen Titel sowie einen Befehlstyp ein. Im folgenden Screenshot sehen Sie, wie die Manifestdatei aussehen soll.{ "$schema": "https://developer.microsoft.com/json-schemas/spfx/command-set-extension-manifest.schema.json", "id": "5d3bac4c-e040-44ed-ab43-464490d22762", "alias": "CustomEcbCommandSet", "componentType": "Extension", "extensionType": "ListViewCommandSet", "version": "*", "manifestVersion": 2, "requiresCustomScript": false, "items": { "ShowDetails": { "title": { "default": "Show Details" }, "type": "command" } } }
Öffnen Sie die Datei ./src/extensions/customEcb/CustomEcbCommandSet.ts , und bearbeiten Sie den Inhalt gemäß dem folgenden Codeausschnitt:
import { Guid } from '@microsoft/sp-core-library'; import { override } from '@microsoft/decorators'; import { BaseListViewCommandSet, Command, IListViewCommandSetListViewUpdatedParameters, IListViewCommandSetExecuteEventParameters } from '@microsoft/sp-listview-extensibility'; import { Dialog } from '@microsoft/sp-dialog'; import * as strings from 'CustomEcbCommandSetStrings'; export interface ICustomEcbCommandSetProperties { targetUrl: string; } export default class CustomEcbCommandSet extends BaseListViewCommandSet<ICustomEcbCommandSetProperties> { @override public onInit(): Promise<void> { return Promise.resolve(); } @override public onListViewUpdated(event: IListViewCommandSetListViewUpdatedParameters): void { const compareOneCommand: Command = this.tryGetCommand('ShowDetails'); if (compareOneCommand) { // This command should be hidden unless exactly one row is selected. compareOneCommand.visible = event.selectedRows.length === 1; } } @override public onExecute(event: IListViewCommandSetExecuteEventParameters): void { switch (event.itemId) { case 'ShowDetails': const itemId: number = event.selectedRows[0].getValueByName("ID"); const listId: Guid = this.context.pageContext.list.id; window.location.replace(`${this.properties.targetUrl}?ID=${itemId}&List=${listId}`); break; default: throw new Error('Unknown command'); } } }
Beachten Sie die
import
-Anweisung am Anfang der Datei, die auf den TypGuid
verweist, der die ID der aktuellen Liste enthalten soll.Die Schnittstelle
ICustomEcbCommandSetProperties
deklariert eine einzelne Eigenschaft namenstargetUrl
, die verwendet werden kann, um die URL der Zielseite anzugeben, die beim Auswählen des ECB-Menüelements geöffnet werden soll.Darüber hinaus behandelt die Überschreibung der
onExecute()
-Methode die Ausführung der benutzerdefinierten Aktion. Beachten Sie den Codeauszug, der die ID des aktuell ausgewählten Elements aus demevent
-Argument sowie die ID der Quellliste aus dempageContext
-Objekt abruft.Beachten Sie schließlich auch die Überschreibung der
onListViewUpdated()
-Methode, die standardmäßig den BefehlShowDetails
nur dann aktivierte, wenn ein einzelnes Element ausgewählt wird.Die Umleitung an die Ziel-URL erfolgt durch die Verwendung von klassischem JavaScript-Code und der Funktion
window.location.replace()
. Sie können jeden beliebigen TypeScript-Code in deronExecute()
-Methode schreiben. Um hier nur ein Beispiel zu nennen, können Sie das Dialog-Framework des SharePoint-Frameworks verwenden, um ein neues Dialogfeld zu öffnen und mit Benutzern zu interagieren.Hinweis
Weitere Informationen zum SharePoint-Framework Dialog Framework finden Sie unter Verwenden von benutzerdefinierten Dialogfeldern mit SharePoint-Framework Erweiterungen.
In der folgenden Abbildung ist die resultierende Ausgabe enthalten.
Testen der Lösung im Debugmodus
Kehren Sie zum Konsolenfenster zurück, und führen Sie den folgenden Befehl aus, um die Lösung zu erstellen und den lokalen Node.js-Server zum Hosten der Lösung auszuführen.
gulp serve --nobrowser
Öffnen Sie Ihren bevorzugten Browser, und wechseln Sie zu einer „modernen“ Bibliothek einer beliebigen „modernen“ Teamwebsite. Hängen Sie die folgenden Abfragezeichenfolgeparameter an die AllItems.aspx-Seiten-URL an.
?loadSpfx=true&debugManifestsFile=https://localhost:4321/temp/manifests.js&customActions={"6c5b8ee9-43ba-4cdf-a106-04857c8307be":{"location":"ClientSideExtension.ListViewCommandSet.ContextMenu","properties":{"targetUrl":"ShowDetail.aspx"}}}
Ersetzen Sie in der vorherigen Abfragezeichenfolge die GUID durch den
id
-Wert aus der Datei CustomEcbCommandSet.manifest.json ersetzen, den Sie gespeichert und aufbewahrt haben.Darüber hinaus gibt es eine
location
Eigenschaft, die den Wert von ClientSideExtension.ListViewCommandSet.ContextMenu annimmt, die SPFx anweist, den Befehlssatz als ECB-Menüelement zu rendern. Nachfolgend finden Sie alle Optionen für dielocation
-Eigenschaft:- ClientSideExtension.ListViewCommandSet.ContextMenu: Das Kontextmenü der Elemente.
- ClientSideExtension.ListViewCommandSet.CommandBar: im oberen Befehlssatzmenü in einer Liste oder Bibliothek.
- ClientSideExtension.ListViewCommandSet: Sowohl das Kontextmenü als auch die Befehlsleiste (entspricht
SPUserCustomAction.Location="CommandUI.Ribbon"
).
Weiterhin in der Abfragezeichenfolge gibt es eine Eigenschaft namens
properties
, die die JSON-Serialisierung eines Objekts vom TypICustomEcbCommandSetProperties
darstellt, der dem Typ der benutzerdefinierten Eigenschaften entspricht, die vom benutzerdefinierten Befehlssatz für das Rendering angefordert werden.Beachten Sie, dass Beim Ausführen der Seitenanforderung ein Warnmeldungsfeld mit dem Titel "Debugskripts zulassen?" angezeigt wird, in dem Sie aus Sicherheitsgründen Ihre Zustimmung zum Ausführen von Code von localhost anfordern. Wenn Sie die Projektmappe lokal debuggen und testen möchten, müssen Sie ihr das Laden von Debugskripts erlauben.
Hinweis
Alternativ können Sie Serverkonfigurationseinträge in der Datei config/serve.json in Ihrem Projekt erstellen, um das Erstellen der Abfragezeichenfolgenparameter zum Debuggen zu automatisieren, wie in diesem Dokument beschrieben: Debuggen von SharePoint-Framework-Lösungen auf modernen SharePoint-Seiten
Packen und Hosten der Lösung
Wenn Sie mit dem Ergebnis zufrieden sind, können Sie die Lösung nun packen und in der eigentlichen Hostinginfrastruktur hosten.
Bevor Sie das Bundle und das Paket erstellen, müssen Sie eine XML-Feature-Framework-Datei deklarieren, um die Erweiterung bereitzustellen.
Überprüfen von Feature-Framework-Elementen
Öffnen Sie im Code-Editor den Unterordner /sharepoint/assets des Projektmappenordners, und bearbeiten Sie die dateielements.xml . Der folgende Codeauszug gibt an, wie die Datei aussehen sollte.
<?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction Title="CustomEcb" RegistrationId="101" RegistrationType="List" Location="ClientSideExtension.ListViewCommandSet.ContextMenu" ClientSideComponentId="6c5b8ee9-43ba-4cdf-a106-04857c8307be" ClientSideComponentProperties="{"targetUrl":"ShowDetails.aspx"}"> </CustomAction> </Elements>
Wie Sie sehen, ähnelt sie der SharePoint-Feature-Framework-Datei des „klassischen“ Modells. Sie verwendet jedoch das Attribut
ClientSideComponentId
, um dieid
der benutzerdefinierten Erweiterung zu referenzieren, sowie das AttributClientSideComponentProperties
, um die benutzerdefinierten Konfigurationseigenschaften zu konfigurieren, die für die Erweiterung erforderlich sind.Öffnen Sie die Datei ./config/package-solution.json in der Projektmappe. In der Datei sehen Sie, dass im Abschnitt ein Verweis auf die elements.xml Datei vorhanden
assets
ist.{ "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json", "solution": { "name": "spfx-ecb-extension-client-side-solution", "id": "b8ff6fdf-16e9-4434-9fdb-eac6c5f948ee", "version": "1.0.2.0", "features": [ { "title": "Custom ECB Menu Item.", "description": "Deploys a custom ECB menu item sample extension", "id": "f30a744c-6f30-4ccc-a428-125a290b5233", "version": "1.0.0.0", "assets": { "elementManifests": [ "elements.xml" ] } } ] }, "paths": { "zippedPackage": "solution/spfx-ecb-extension.sppkg" } }
Bündeln, Packen und Bereitstellen der SharePoint-Framework-Komponente
Vorbereiten und Bereitstellen der Lösung für den SharePoint Online-Mandanten:
Führen Sie die folgende Aufgabe aus, um Ihre Lösung in einem Bundle zu packen. Dadurch wird ein Releasebuild Ihres Projekts erstellt:
gulp bundle --ship
Führen Sie die folgende Aufgaben aus, um Ihre Lösung zu packen. Dieser Befehl erstellt ein *.sppkg-Paket im Ordner sharepoint/solution .
gulp package-solution --ship
Laden Sie das neu erstellte Paket mit ihrer clientseitigen Lösung in den App-Katalog in Ihrem Mandanten hoch. Alternativ können Sie es auch per Drag-and-Drop verschieben. Klicken Sie dann auf die Schaltfläche Bereitstellen.
Installieren und Ausführen der Lösung
Öffnen Sie den Browser, und navigieren Sie zu der gewünschten modernen Zielwebsite.
Navigieren Sie zur Seite Websiteinhalte, und wählen Sie App, um eine neue App hinzuzufügen.
Wählen Sie zum Installieren einer neuen App Von Ihrer Organisation aus, um die im App-Katalog verfügbaren Lösungen zu durchsuchen.
Wählen Sie die Lösung mit dem Namen spfx-ecb-extension-client-side-solution aus, und installieren Sie sie auf der Zielwebsite.
Nachdem die Installation der Anwendung abgeschlossen ist, öffnen Sie die Documents-Bibliothek der Website, und sehen Sie sich das funktionsfähige ECB-Menüelement an, indem Sie ein einzelnes Dokument auswählen.
Genießen Sie Ihr neues benutzerdefiniertes ECB-Menüelement, das mithilfe der SharePoint-Framework-Erweiterungen erstellt wurde!