Freigeben über


Verwenden von benutzerdefinierten Dialogfeldern mit SharePoint-Framework-Erweiterungen

Benutzerdefinierte Dialogfelder können im Kontext von SharePoint Framework-Erweiterungen oder im Kontext von clientseitigen Webparts verwendet werden. Sie sind über das Paket @microsoft/sp-dialog verfügbar.

In diesem Artikel wird beschrieben, wie Sie ein benutzerdefiniertes Dialogfeld erstellen und im Kontext einer Erweiterung des Typs „ListView Command Set“ verwenden können.

Den Beispielcode, auf den in diesem Artikel Bezug genommen wird, finden Sie in unserem sp-dev-fx-extensions-Repository.

Wichtig

In diesem Tutorial wird davon ausgegangen, dass Sie Ihre Entwicklungsumgebung wie in Einrichten Ihrer Entwicklungsumgebung beschrieben eingerichtet haben.

Erstellen eines neuen Projekts

  1. Erstellen Sie ein neues Projektverzeichnis für Ihr Projekt, und ändern Sie den aktuellen Ordner in dieses Verzeichnis.

  2. Erstellen Sie ein neues Projekt, indem Sie den Yeoman SharePoint-Generator aus dem neuen Verzeichnis ausführen, das Sie erstellt haben:

    yo @microsoft/sharepoint
    
  3. 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):

    • 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? DialogDemo

    An diesem Punkt installiert Yeoman die erforderlichen Abhängigkeiten und erstellt ein Gerüst für die Lösungsdateien. Dieser Vorgang kann einige Minuten dauern.

  4. Sobald das erste Gerüst erstellt ist, geben Sie Folgendes ein, um Office UI Fabric für Ihre Lösung zu installieren:

    npm install office-ui-fabric-react  --save
    
  5. Öffnen Sie den Projektordner in einem Code-Editor. In diesem Artikel wird Visual Studio Code in den Schritten und Screenshots verwendet, Sie können jedoch einen beliebigen Editor verwenden. Um den Ordner in Visual Studio Code zu öffnen, verwenden Sie den folgenden Befehl in der Konsole:

    code .
    

Ändern des Erweiterungsmanifests

Konfigurieren Sie im Erweiterungsmanifest die Erweiterung so, dass nur eine Schaltfläche vorhanden ist. Öffnen Sie im Code-Editor die Datei ./src/extensions/dialogDemo/DialogDemoCommandSet.manifest.json . Ersetzen Sie den Abschnitt commands durch den folgenden JSON-Code:

{
  //...
  "items": {
    "COMMAND_1": {
      "title": { "default": "Open Custom Dialog" },
      "iconImageUrl": "icons/request.png",
      "type": "command"
    }
  }
}

Erstellen eines benutzerdefinierten Dialogfelds

  1. Erstellen Sie eine neue Datei mit dem Namen ColorPickerDialog.tsx im Ordner ./src/extensions/dialogDemo/.

  2. Fügen Sie die folgenden Importanweisungen oben in der neu erstellten Datei hinzu: Sie erstellen Ihr benutzerdefiniertes Dialogfeld mithilfe der React-Komponenten der Office UI Fabric, die Implementierung erfolgt daher in React.

    import * as React from 'react';
    import * as ReactDOM from 'react-dom';
    import { BaseDialog, IDialogConfiguration } from '@microsoft/sp-dialog';
    import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';
    import { ColorPicker } from 'office-ui-fabric-react/lib/ColorPicker';
    import { DialogFooter, DialogContent } from 'office-ui-fabric-react/lib/Dialog';
    import { IColor } from 'office-ui-fabric-react/lib/Color';
    
  3. Fügen Sie die folgende Schnittstellendefinition direkt unterhalb den Importanweisungen hinzu: Diese wird verwendet, um Informationen und Funktionen zwischen den Erweiterung des Typs „ListView Command Set“ und Ihrem benutzerdefinierten Dialogfeld zu übergeben.

    interface IColorPickerDialogContentProps {
      message: string;
      close: () => void;
      submit: (color: IColor) => void;
      defaultColor?: IColor;
    }
    
  4. Fügen Sie die folgende Klasse direkt unterhalb der Schnittstellendefinition hinzu: Diese React-Klasse ist für das Rendern der Benutzeroberflächen innerhalb des benutzerdefinierten Dialogfelds verantwortlich. Beachten Sie, dass die React-Komponenten der Office UI Fabric für das tatsächliche Rendern verwendet wird und die erforderlichen Eigenschaften nur übergeben werden.

    class ColorPickerDialogContent extends React.Component<IColorPickerDialogContentProps, {}> {
      private _pickedColor: IColor;
    
      constructor(props) {
        super(props);
        // Default Color
        this._pickedColor = props.defaultColor || { hex: 'FFFFFF', str: '', r: null, g: null, b: null, h: null, s: null, v: null };
      }
    
      public render(): JSX.Element {
        return <DialogContent
        title='Color Picker'
        subText={this.props.message}
        onDismiss={this.props.close}
        showCloseButton={true}
        >
        <ColorPicker color={this._pickedColor} onChange={this._onColorChange} />
        <DialogFooter>
            <DefaultButton text='Cancel' title='Cancel' onClick={this.props.close} />
            <PrimaryButton text='OK' title='OK' onClick={() => { this.props.submit(this._pickedColor); }} />
        </DialogFooter>
        </DialogContent>;
      }
    
      private _onColorChange = (ev: React.SyntheticEvent<HTMLElement, Event>, color: IColor) => {
        this._pickedColor = color;
      }
    }
    
  5. Fügen Sie die folgende Klassendefinition für Ihr benutzerdefiniertes Dialogfeld unter der ColorPickerDialogContent -Klasse hinzu, die Sie soeben hinzugefügt haben. Dies ist das tatsächliche benutzerdefinierte Dialogfeld, das durch Klicken auf die Schaltfläche „ListView Command Set“ aufgerufen und von BaseDialog geerbt wird.

    export default class ColorPickerDialog extends BaseDialog {
      public message: string;
      public colorCode: IColor;
    
      public render(): void {
        ReactDOM.render(<ColorPickerDialogContent
        close={ this.close }
        message={ this.message }
        defaultColor={ this.colorCode }
        submit={ this._submit }
        />, this.domElement);
      }
    
      public getConfig(): IDialogConfiguration {
        return { isBlocking: false };
      }
    
      protected onAfterClose(): void {
        super.onAfterClose();
    
        // Clean up the element for the next dialog
        ReactDOM.unmountComponentAtNode(this.domElement);
      }
    
      private _submit = (color: IColor) => {
        this.colorCode = color;
        this.close();
      }
    }
    

Verknüpfen des Dialogfelds mit dem Klickereignis für die per „ListView Command Set“ implementierte Schaltfläche

Zur Verknüpfung des benutzerdefinierten Dialogfelds mit Ihrer benutzerdefinierten Erweiterung des Typs „ListView Command Set“ fügen Sie nun den zur Initiierung des Dialogfelds erforderlichen Code in die Klickoperation der Schaltfläche ein.

  1. Öffnen Sie im Code-Editor die Datei DialogDemoCommandSet.ts im Ordner ./src/extensions/dialogDemo/.

  2. Fügen Sie die folgenden Importanweisungen unterhalb den vorhandenen Strings zum Import ein. Diese dienen der Verwendung des Dialogfelds im Zusammenhang mit Ihrem ListView-Befehlssatz und der Verwendung des gewählten IColor-Typs, um Farben an das und aus dem Dialogfeld zu übergeben.

    import ColorPickerDialog from './ColorPickerDialog';
    import { IColor } from 'office-ui-fabric-react/lib/Color';
    
  3. Fügen Sie die folgende _colorCode Variablendefinition oberhalb der onInit Funktion in der DialogDemoCommandSet -Klasse hinzu. Dies wird verwendet, um das Ergebnis des Dialogfelds für die Farbauswahl zu speichern.

    private _colorCode: IColor;
    
  4. Aktualisieren Sie die onExecute Funktion wie folgt. Durch diesen Code wird Folgendes ausgeführt:

    • Er initiiert das benutzerdefinierte Dialogfeld.
    • Er übergibt eine Nachricht an das Dialogfeld, die als Titel verwendet wird.
    • Er übergibt einen Farbcode an das Dialogfeld (den Standardwert, falls nicht anders festgelegt).
    • Er rendert das benutzerdefinierte Dialogfeld.
    • Er empfängt und speichert den Rückgabewert des Dialogfelds.
    • Er zeigt den empfangenen Wert mithilfe der Funktion Dialog.alert() in einem Standarddialogfeld an.
    @override
    public onExecute(event: IListViewCommandSetExecuteEventParameters): void {
      switch (event.itemId) {
        case 'COMMAND_1':
          Dialog.alert(`${this.properties.sampleTextOne}`);
          const dialog: ColorPickerDialog = new ColorPickerDialog();
          dialog.message = 'Pick a color:';
          // Use 'FFFFFF' as the default color for first usage
          let defaultColor : IColor = { hex: 'FFFFFF', str: '', r: null, g: null, b: null, h: null, s: null, v: null };
          dialog.colorCode = this._colorCode|| defaultColor;
          dialog.show().then(() => {
            this._colorCode = dialog.colorCode;
            Dialog.alert(`Picked color: ${dialog.colorCode.hex}`);
          });
          break;
        default:
          throw new Error('Unknown command');
      }
    }
    

Testen des benutzerdefinierten Dialogfelds im Mandanten

  1. Öffnen Sie die Datei serve.json in dem Ordner ./config/, und aktualisieren Sie die aktuellen Einstellungen in der Datei. Diese Datei ermöglicht ein einfacheres Debuggen von SharePoint-Framework-Erweiterungen. Sie können den Dateiinhalt an die entsprechenden Mandanten- und Websitedetails anpassen, die zum Testen der Erweiterung verwendet werden sollen. Ein wichtiger Wert, der in der JSON-Definition an den entsprechenden Mandanten angepasst werden muss, ist die pageUrl-Eigenschaft.

  2. pageUrl muss auf eine Listen-URL verweisen, wo die Dialogfeldfunktionalität getestet werden soll.

      "serveConfigurations": {
        "default": {
          "pageUrl": "https://yourtenantname.sharepoint.com/Shared%20Documents/Forms/AllItems.aspx",
          "customActions": {
            "9b98b919-fe5e-4758-ac91-6d62e582c4fe": {
              "location": "ClientSideExtension.ListViewCommandSet.CommandBar",
              "properties": {
                "sampleTextOne": "One item is selected in the list",
                "sampleTextTwo": "This command is always visible."
              }
            }
          }
        },
    

    Hinweis

    Der eindeutige Bezeichner der Erweiterung wird während der anfänglichen Gerüsterstellung automatisch auf diese Datei aktualisiert. Wenn Sie die Eigenschaften ändern, die Ihre Erweiterung verwendet, sollten Sie die Datei serve.json vor dem Debuggen entsprechend aktualisieren.

  3. Wechseln Sie zurück zur Konsole, und führen Sie den folgenden Befehl aus:

    gulp serve
    

Nun wird die Bündelung der Lösung angestoßen, und das resultierende Manifest wird von der localhost-Adresse ausgeliefert. Aufgrund der Konfiguration in der Datei serve.json wird auch ein Browser in der angegebenen URL geöffnet, bei dem die Abfrageparameter automatisch auf Grundlage der Lösungskonfiguration festgelegt sind.

  1. Klicken Sie bei Aufforderung auf Debugskripts laden, um das Laden der Debugmanifeste zu akzeptieren.

    Warnung zum Zulassen von Debugskripts

    Beachten Sie, dass die neue Schaltfläche nicht standardmäßig in der Symbolleiste angezeigt wird, da Sie für die Standardlösung ein Element aus der Liste auswählen müssen. Wenn keine Elemente in der Liste oder Bibliothek angezeigt werden, erstellen Sie ein Element, oder laden Sie ein Dokument hoch.

  2. Wählen Sie ein Element aus der Liste oder der Bibliothek aus. Die Schaltfläche wird nun in der Symbolleiste mit dem Text Open Custom Dialog angezeigt.

    Die Schaltfläche „Open Cusotm Dialog“ wird auf der Symbolleiste angezeigt

  3. Klicken Sie auf die Schaltfläche Open Custom Dialog. Ihr benutzerdefiniertes Dialogfeld wird nun in der Listenansicht gerendert.

    Im Dialogmodus gerenderte Farbauswahl

  4. Wählen Sie eine Farbe in der Farbauswahl aus, und klicken Sie dann auf OK, um zu testen, wie der Code den ausgewählten Wert zurück an den Aufrufer zurückgibt. Die Auswahl wird dann mithilfe des standardmäßigen Warndialogfelds angezeigt.

    Dialogfeld mit Details zur ausgewählten Farbe

    Hinweis

    Wenn Sie einen Fehler in der Dokumentation oder im SharePoint-Framework finden, melden Sie ihn an das SharePoint Engineering unter Verwendung der Fehlerliste im sp-dev-docs-Repository. Vielen Dank im Voraus für Ihr Feedback.

Siehe auch