2017-04-15 20 views
1

Ich erstelle ein benutzerdefiniertes Bearbeitungsformular für SharePoint, das mit der Bibliothek office-ui-fabric-react erstellt wurde. Ich habe vor kurzem eine Personenauswahl zu meinem Bearbeitungsformular hinzugefügt und festgestellt, dass Nachschlagespalten bei einem normalen "get" -REST-Aufruf nicht zurückgegeben werden. Es sieht so aus, als müssten Sie für jede Personenauswahl eine Auswahl treffen und erweitern.Benutzerdefiniertes Bearbeitungsformular mit Personenauswahl

Die Get-Anforderung, die ich zuvor eingerichtet hatte, sollte so wiederverwendbar wie möglich sein, indem automatisch der Listenname und die aktuelle Element-ID aufgerufen wird. An diesem Punkt habe ich das Gefühl, etwas auf die harte Tour zu machen und wollte sehen, ob jemand anderes Erfahrung mit Personenauswahlspalten in einem React SharePoint-Bearbeitungsformular hatte.

Mein aktueller Workflow zum Einstellen der Spaltenwerte ist wie folgt.

  1. bearbeiten Form componentDidMount Tritte eines Erhaltungs-Anforderung für alle aktuellen Spaltenwerte
  2. Die geladenen Werte werden in den Zustand versetzt
  3. Die Kind-Komponenten auf dem Edit-Formular senden this.state.loadedValues ​​als unten prop Wert
  4. Innerhalb der Unterkomponente wird der Wert wie scheint

Es ist derzeit auf this.props.value gesetzt, wenn ich wollte, dass meine Reaktion Komponenten mit den aktuellen Werten füllen, ich fir hätte Meinen normalen "get" REST-Aufruf für die üblichen Spalten und dann einen separaten REST-Aufruf ausführen und eine Auswahl treffen und für jede Personenauswahl erweitern, die ich meinem Formular hinzufüge. Gibt es einen besseren Weg, dies zu tun?

Hier ist die allgemeine Erhaltungs-Anforderung, die ich habe:

let req = new XMLHttpRequest; 
     return new Promise((resolve, reject) => { 
      req.open('GET', `${_spPageContextInfo.webAbsoluteUrl}/_api/Web/Lists/GetByTitle('${LIST_NAME}')/Items(${ITEM_ID})`, true); 
      req.setRequestHeader('Content-Type', 'application/json;odata=verbose'); 
      req.setRequestHeader('Accept', 'application/json;odata=verbose'); 

      req.onload = async() => { 
       // alert(req.status); 
       if (req.status === 200) { 
        let response = JSON.parse(req.response); 
        resolve(response.d); 
       } else { 
        reject(Error(req.statusText)); 
       } 
      }; 
      req.onerror =() => { 
       console.log(`Error: ${req.status}`); 
       reject(Error('Network Error')); 
      }; 
      req.send(null); 
     }); 

Antwort

0

ich so etwas gemacht, und ich habe einen einzigen REST Anruf alle Informationen zu bekommen, inklusive erweiterten Spalten. Sie müssen nur die Suchvorgänge erweitern, die anderen Spalten funktionieren nahtlos.

So etwas wie "Id, Title, PeopleField1/Id, PeopleField1/Title, PeopleField1/EMail, FieldX, FieldY" für die Spalten und nur "PeopleField1" für die Erweiterung.

Verwandte Themen