Massenaktualisierung von benutzerdefinierten Feldern und Erstellen von Projektwebsites aus einem Workflow in Project Online

Um Kunden dabei zu helfen, die Project Online optimal zu nutzen und die Erweiterbarkeit und Flexibilität des Diensts zu verbessern, haben wir dem clientseitigen Objektmodell zwei Methoden hinzugefügt, die Sie in Project Online Apps und Workflows verwenden können.

Wert
UpdateCustomFields
Benutzerdefinierte Felder des Projekts werden per Massenaktualisierung aktualisiert. Nur für Project Online. Nur in der REST-API verfügbar.
CreateProjectSite
Erstellt eine Project-Website. Nur für Project Online. Verfügbar in der REST-API, dem verwalteten Clientobjektmodell und dem JavaScript-Clientobjektmodell.

Diese Methoden bieten nicht nur mehr Flexibilität, sie bieten auch erhebliche Leistungsverbesserungen beim Speichern und Veröffentlichen von Projekten in einem Workflow. In diesem Artikel wird beschrieben, wie Sie die Methoden in der REST-API verwenden, und es wird beschrieben, wie Sie einen Workflow erstellen, der benutzerdefinierte Felder per Massenaktualisierung aktualisiert, sowie einen Workflow, der eine Project-Website erstellt.

Hinweis

Weitere Informationen zum Aufrufen von REST-APIs aus SharePoint 2013-Workflows finden Sie unter Grundlegendes und Verwenden der SharePoint 2013-REST-Schnittstelle und Aufrufen der SharePoint 2013-Rest-API aus einem SharePoint Designer Workflow.

Massenaktualisierung von benutzerdefinierten Projektfeldern aus einem Workflow

Bisher konnten Workflows jeweils nur ein benutzerdefiniertes Feld aktualisieren. Die aktualisierung von benutzerdefinierten Projektfeldern nacheinander kann zu einer schlechten Endbenutzererfahrung führen, wenn Benutzer zwischen Projektdetailseiten wechseln. Jedes Update erforderte eine separate Serveranforderung mithilfe der Aktion Projektfeld festlegen , und das Aktualisieren mehrerer benutzerdefinierter Felder in einem Netzwerk mit hoher Latenz und geringer Bandbreite führte zu einem nicht trivialen Mehraufwand. Um dieses Problem zu beheben, haben wir der REST-API die UpdateCustomFields-Methode hinzugefügt, mit der Sie benutzerdefinierte Felder per Massenaktualisierung aktualisieren können. Um UpdateCustomFields zu verwenden, übergeben Sie ein Wörterbuch, das die Namen und Werte aller benutzerdefinierten Felder enthält, die Sie aktualisieren möchten.

Die REST-Methode befindet sich am folgenden Endpunkt:

https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

Hinweis

Ersetzen Sie den <site-url> Platzhalter in den Beispielen durch die URL Ihrer Project Web App-Website (PWA) und den <guid> Platzhalter durch Ihre Projekt-UID.

In diesem Abschnitt wird beschrieben, wie Sie einen Workflow erstellen, der benutzerdefinierte Felder für ein Projekt per Massenaktualisierung aktualisiert. Der Workflow folgt den folgenden allgemeinen Schritten:

  • Warten Sie, bis das Projekt, das Sie aktualisieren möchten, eingecheckt wird.

  • Erstellen Sie ein Dataset, das alle Aktualisierungen benutzerdefinierter Felder für das Projekt definiert.

  • Sehen Sie sich das Projekt an.

  • Rufen Sie UpdateCustomFields auf, um die Aktualisierungen des benutzerdefinierten Felds auf das Projekt anzuwenden.

  • Protokollieren Sie relevante Informationen in der Workflowverlaufsliste (falls erforderlich).

  • Veröffentlichen Sie das Projekt.

  • Checken Sie das Projekt ein.

Der endgültige End-to-End-Workflow sieht wie folgt aus:

End-to-End-Workflow

So erstellen Sie einen Workflow, der benutzerdefinierte Felder per Massenaktualisierung aktualisiert

  1. Optional. Speichern Sie die vollständige URL Ihres Projekts in einer Variablen, die Sie im gesamten Workflow verwenden können.

    Speichern der PROJEKT-URL in einer Variablen

  2. Fügen Sie dem Workflow die Aktion Auf Projektereignis warten hinzu, und wählen Sie das Ereignis Beim Einchecken eines Projekts aus.

    Warten Sie, bis das Projekt eingecheckt ist..

  3. Erstellen Sie mithilfe der Aktion Wörterbuch erstellen ein requestHeader-Wörterbuch. Sie verwenden denselben Anforderungsheader für alle Webdienstaufrufe in diesem Workflow.

    Erstellen des requestHeader-Wörterbuchs

  4. Fügen Sie dem Wörterbuch die folgenden beiden Elemente hinzu.

    Name Typ Wert
    Annehmen
    Zeichenfolge
    application/json; odata=verbose
    Content-Type
    Zeichenfolge
    application/json; odata=verbose

    Hinzufügen eines Accept-Headers

  5. Erstellen Sie mithilfe der Aktion Wörterbuch erstellen ein requestBody-Wörterbuch. Dieses Wörterbuch speichert alle Feldaktualisierungen, die Sie anwenden möchten.

    Jede Aktualisierung eines benutzerdefinierten Felds erfordert vier Zeilen: den Metadatentyp (1), (2) den Schlüssel, den Wert (3) und den Werttyp (4).

    • __metadata/Typ Der Metadatentyp des Felds. Dieser Datensatz ist immer gleich und verwendet die folgenden Werte:

      • Name: customFieldDictionary(i)/__metadata/type (wobei i der Index jedes benutzerdefinierten Felds im Wörterbuch ist, beginnend mit 0)

      • Typ: Zeichenfolge

      • Wert: SP. Keyvalue

      Definieren eines benutzerdefinierten Feldupdates

    • Schlüssel Der interne Name des benutzerdefinierten Felds im folgenden Format: Custom_ce23fbf43fa0e411941000155d3c8201

      Sie können den internen Namen eines benutzerdefinierten Felds finden, indem Sie zum InternalName-Endpunkt navigieren: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/InternalName

      Wenn Sie Ihre benutzerdefinierten Felder manuell erstellt haben, unterscheiden sich die Werte von Website zu Website. Wenn Sie planen, den Workflow an mehreren Standorten wiederzuverwenden, stellen Sie sicher, dass die benutzerdefinierten Feld-IDs korrekt sind.

    • Wert Der Wert, der dem benutzerdefinierten Feld zugewiesen werden soll. Für benutzerdefinierte Felder, die mit Nachschlagetabellen verknüpft sind, müssen Sie die internen Namen der Nachschlagetabelleneinträge anstelle der tatsächlichen Nachschlagetabellenwerte verwenden.

      Sie finden den internen Namen des Nachschlagetabelleneintrags am folgenden Endpunkt: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/LookupEntries('<guid>')/InternalName

      Wenn Sie ein benutzerdefiniertes Nachschlagetabellenfeld eingerichtet haben, das mehrere Werte akzeptiert, verwenden Sie ;# , um Werte zu verketten (wie im Beispielwörterbuch unten gezeigt).

    • Valuetype Der Typ des benutzerdefinierten Felds, das Sie aktualisieren.

      • Verwenden Sie Edm.String für die Felder Text, Dauer, Flag und LookupTable.

      • Verwenden Sie für Zahlenfelder Edm.Int32, Edm.Double oder einen anderen von OData akzeptierten Zahlentyp.

      • Verwenden Sie für Datumsfelder Edm.DateTime.

      Im folgenden Beispielwörterbuch werden Updates für drei benutzerdefinierte Felder definiert. Die erste ist für ein benutzerdefiniertes Nachschlagetabellenfeld mit mehreren Werten, das zweite für ein Zahlenfeld und das dritte für ein Datumsfeld. Beachten Sie, wie der customFieldDictionary-Index inkrementiert wird.

      Hinweis

      Diese Werte dienen nur zu Veranschaulichungszwecken. Die Schlüssel-Wert-Paare, die Sie verwenden, hängen von Ihren PWA-Daten ab.

      Name Typ Wert
      customFieldDictionary(0)/__metadata/type
      Zeichenfolge
      SP. Keyvalue
      customFieldDictionary(0)/Key
      Zeichenfolge
      Custom_ce23fbf43fa0e411941000155d3c8201
      customFieldDictionary(0)/Value
      Zeichenfolge
      Entry_b9a2fd69279de411940f00155d3c8201;#Entry_baa2fd69279de411940f00155d3c8201
      customFieldDictionary(0)/ValueType
      Zeichenfolge
      Edm.String
      customFieldDictionary(1)/__metadata/type
      Zeichenfolge
      SP. Keyvalue
      customFieldDictionary(1)/Key
      Zeichenfolge
      Custom_c7f114c97098e411940f00155d3c8201
      customFieldDictionary(1)/Value
      Zeichenfolge
      90.5
      customFieldDictionary(1)/ValueType
      Zeichenfolge
      Edm.Double
      customFieldDictionary(2)/__metadata/type
      Zeichenfolge
      SP. Keyvalue
      customFieldDictionary(2)/Key
      Zeichenfolge
      Custom_c6fb67e0b9a1e411941000155d3c8201
      customFieldDictionary(2)/Value
      Zeichenfolge
      2015-04-01T00:00:00
      customFieldDictionary(2)/ValueType
      Zeichenfolge
      Edm.DateTime

      Wörterbuch, das benutzerdefinierte Feldaktualisierungen definiert

  6. Fügen Sie die Aktion HTTP-Webdienst aufrufen hinzu, um das Projekt auszuchecken.

    Aufrufen der Checkout-Methode

  7. Bearbeiten Sie die Eigenschaften des Webdienstaufrufs, um den Anforderungsheader anzugeben. Klicken Sie zum Öffnen des Dialogfelds Eigenschaften mit der rechten Maustaste auf die Aktion, und wählen Sie Eigenschaften aus.

    Angeben des Anforderungsheaders in Webdienstaufrufeigenschaften

  8. Fügen Sie die Aktion HTTP-Webdienst aufrufen hinzu, um die UpdateCustomFields-Methode aufzurufen.

    Erstellen einer Aktion

    Notieren Sie sich das /Draft/ Segment in der Webdienst-URL. Die vollständige URL sollte wie folgt aussehen: https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

    Aufrufen der UpdateCustomFields-Methode.

  9. Bearbeiten Sie die Eigenschaften des Webdienstaufrufs, um die Parameter RequestHeader und RequestContent an die von Ihnen erstellten Wörterbücher zu binden. Sie können auch eine neue Variable zum Speichern von ResponseContent erstellen.

    Binden der Wörterbücher an den Anforderungsheader und Inhalt

  10. Optional. Lesen Sie das Antwortwörterbuch, um den Status des Warteschlangenauftrags zu überprüfen und die Informationen in der Workflowverlaufsliste zu protokollieren.

    Einrichten der Protokollierung

  11. Fügen Sie dem Veröffentlichungsendpunkt einen Webdienstaufruf hinzu, um das Projekt zu veröffentlichen. Verwenden Sie immer denselben Anforderungsheader.

    Aufrufen der Publish-Methode.

    Eigenschaften für den Aufruf des Veröffentlichungswebdiensts

  12. Fügen Sie dem Checkin-Endpunkt einen endgültigen Webdienstaufruf hinzu, um das Projekt einzuchecken.

    Aufrufen der Checkin-Methode

    Eigenschaften für den Checkin-Webdienstaufruf

Erstellen einer Projektwebsite aus einem Workflow

Jedes Projekt kann über eigene dedizierte SharePoint-Websites verfügen, auf denen Teammitglieder zusammenarbeiten, Dokumente freigeben, Probleme auslösen können usw. Bisher konnten Websites nur automatisch bei der ersten Veröffentlichung oder manuell vom Projektmanager in Project Professional oder vom Administrator in PWA-Einstellungen erstellt werden, oder sie konnten deaktiviert werden.

Wir haben die CreateProjectSite-Methode hinzugefügt, damit Sie auswählen können, wann Projektwebsites erstellt werden sollen. Dies ist besonders nützlich für Organisationen, die ihre Websites automatisch erstellen möchten, wenn ein Projektvorschlag eine bestimmte Phase in einem vordefinierten Workflow erreicht, anstatt bei der ersten Veröffentlichung. Durch das Verschieben der Erstellung einer Projektwebsite wird die Leistung beim Erstellen eines Projekts erheblich verbessert.

Voraussetzung: Bevor Sie CreateProjectSite verwenden können, muss die Einstellung Benutzern die Auswahl erlauben für die Projektwebsiteerstellung in PWA-Einstellungen>Verbundene SharePoint-Websites-Einstellungen> festgelegt werden.

Festlegen von

So erstellen Sie einen Workflow, der eine Project-Website erstellt

  1. Erstellen oder bearbeiten Sie einen vorhandenen Workflow, und wählen Sie den Schritt aus, in dem Sie Ihre Projektwebsites erstellen möchten.

  2. Erstellen Sie mithilfe der Aktion Wörterbuch erstellen ein requestHeader-Wörterbuch.

    Erstellen des requestHeader-Wörterbuchs

  3. Fügen Sie dem Wörterbuch die folgenden beiden Elemente hinzu.

    Name Typ Wert
    Annehmen
    Zeichenfolge
    application/json; odata=verbose
    Content-Type
    Zeichenfolge
    application/json; odata=verbose

    Hinzufügen eines Accept-Headers

  4. Fügen Sie die Aktion HTTP-Webdienst aufrufen hinzu. Ändern Sie den Anforderungstyp, um POST zu verwenden, und legen Sie die URL im folgenden Format fest:

    https://<site-url>/_api/ProjectServer/Projects('<guid>')/CreateProjectSite('New web name')

    Erstellen des CreateProjectSite-Endpunkt-URI

    Übergeben Sie den Namen der Project-Website als Zeichenfolge an die CreateProjectSite-Methode . Um den Projektnamen als Websitenamen zu verwenden, übergeben Sie eine leere Zeichenfolge. Achten Sie darauf, eindeutige Namen zu verwenden, damit die nächste Von Ihnen erstellte Projektwebsite funktioniert.

  5. Bearbeiten Sie die Eigenschaften des Webdienstaufrufs, um den RequestHeader-Parameter an das erstellte Wörterbuch zu binden.

    Binden des Wörterbuchs an die Anforderung

Siehe auch