Mit Flow hat uns Microsoft ein mächtiges Werkzeug zur Verfügung gestellt, welches hervorragend zu unserem Motto „do more, work less“ passt. In diesem Beitrag möchte ich über die Erfahrungen, welche ich beim Erstellen eines Flows gesammelt habe, schreiben.

Ausgangslage

Seit Kurzem verwenden wir intern eine SharePoint Communication Site (sehr empfehlenswert!), auf welchem unter anderem ein „News“-Webpart eingebaut ist. Die Geschäftsleitung möchte dort News publizieren, welche firmenweit von Interesse sind. Dies funktioniert soweit auch prima, nur gibt es keine Möglichkeit, diese News auch in Microsoft Teams anzeigen zu lassen. Somit muss sich die Geschäftsleitung darauf verlassen, dass die Mitarbeiter regelmässig auf die SharePoint Site schauen und nach News Ausschau halten, was erfahrungsgemäss ziemlich sicher nicht geschehen wird. 😉

Bühne frei für Power Automate!

Mit Flow sollte es möglich sein, nach der Erstellung eines Elements automatisch eine Nachricht an das Team in Microsoft Teams zu senden. Die Connectoren dafür sind vorhanden, es müssen somit nur die Reihenfolge und die richtigen Felder definiert werden.

Dies ist, wie sich herausgestellt hat, gar nicht so einfach zu bewerkstelligen. Der Ablauf sollte so aussehen:

  1. Wenn ein neuer News-Beitrag gepostet wird, dann …
  2. … sende eine Nachricht an das Team in Microsoft Teams

Zum News-Beitrag: Auf den ersten Blick unterscheidet SharePoint nicht zwischen einer normalen Page und einem News-Beitrag. Für unseren Flow bedeutet das, dass wir eine Möglichkeit suchen müssen, um zwischen einer Page und einem News-Beitrag zu unterscheiden. Denn wir möchten das Team nur dann informieren, wenn es Neuigkeiten gibt. Eine Webrecherche hat ergeben, dass sich „News“ durch das Vorhandensein von zwei Feldern von Pages unterscheiden:

  • „Promoted State“
  • „First Published Date“

Mit „Promoted State“ kann gesagt werden, ob es sich bei einer Page um eine „News“ handelt oder nicht. Mit „First Published Date“ hingegen kann eingesehen werden, wann die „News“ publiziert wurde. Wir werden beide Felder verwenden müssen, um einen guten Workflow mit Flow erstellen zu können.

Flow erstellen

Jetzt wo die technischen Details geklärt sind, machen wir uns ans Eingemachte:
Um die Erstellung eines Flow so einfach wie möglich zu machen, gehen wir auf die SharePoint-Site, auf „Site Contents“ und anschliessend auf „Site Pages“. Von dort aus kann dann ein Flow erstellt werden:

Im rechts erschienenen Fenster wählen wir den Flow „Post a message to Teams for a selected item“. Nun gelangen wir zur Flow-Bearbeitungsseite:

Mit einem Klick auf „Edit“ in der ersten Aktion erhalten wir die ID der „Liste“. Diese werden wir benötigen, um auf die entsprechende Ressource zugreifen zu können. Dementsprechend kopieren wir uns diese weg. Weil diese Vorlage nicht ganz dem entspricht, was wir erreichen möchten, schliessen wir diesen Flow wieder und erstellen einen neuen mit dem Knopf „Create from blank“:

Hier wählen wir den Trigger „SharePoint: When an item is created“ und werden auf die Flow-Erstellungsseite weitergeleitet:

Im Feld „Site Address“ wählen wir im Dropdown-Menü die entsprechende Site aus und fügen den „List Name“ von vorhin ein (mit dem „Umweg“ über ein Template spart man sich das Heraussuchen der ID 😉 ). Der Flow wird also ausgelöst, wenn ein neues Element auf unserer SharePoint-Site erstellt wird.

Damit unser Flow nicht bei jedem beliebigen Element ausgeführt wird, muss dieser unterscheiden können, ob es sich bei der erstellten Site um eine News Site handelt oder nicht. Dazu erstellen wir eine „Condition“:

Diese überprüft, ob der Wert im Feld „Promoted State“ (ein Float) ein Wert grösser als 0 steht. Wenn ja, dann handelt es sich um einen News-Beitrag. Wenn nicht, dann um eine „normale“ Page.
Hinweis: Ich habe es mit einer Condition versucht, die überprüft ob das Feld Promoted State leer ist oder nicht. Das hat aber nicht geklappt, weil der Datentyp nicht kompatibel ist. Auch das Umwandeln in einen String klappt nicht, weswegen ich bei der oben beschriebenen Lösung verblieben bin.

Innerhalb des „If no“-Bedingung muss nichts stehen, weil bei der Erstellung einer normalen Page in unserem Fall nichts unternommen werden soll.

In der „If yes“-Bedingung hingegen geht es mit einer „Do until“-Schleife weiter:

Kleiner Exkurs: eine „Do until“-Schleife führt die innerhalb der Schleife angegebenen Aktionen solange aus, bis eine bestimmte Bedingung erfüllt wurde oder die Schleife eine bestimmte Anzahl male durchgeführt wurde.

Bevor es technisch weitergeht, eine kurze Erklärung, wieso diese Schleife überhaupt notwendig ist: Der Trigger „When an item is created“ wird ausgeführt, sobald SharePoint das Objekt erstellt hat. Flow wartet somit nicht bis der News-Beitrag „publiziert“ wurde oder überhaupt eine Überschrift hat. Dies ist natürlich problematisch, weil bei der Erstellung einer News doch einige Zeit vergehen kann. Aus diesem Grund muss überprüft werden, ob die News überhaupt publiziert wurde, bevor die Nachricht an das Team gesendet wird.

Bevor wir nun aber mit der Erstellung der Bedingung beginnen, erstellen wir die Aktionen, welche während der Schleife ausgeführt werden sollen. Wir machen dabei folgendes:

  • SharePoint Get item
  • Delay

Mit SharePoint Get item lesen wir das von SharePoint erstellte Objekt erneut ein. Dies müssen wir deshalb tun, damit Flow die Änderungen des Felds „FirstPublishedDate“ überhaupt mitbekommt. Mit Delay hingegen definieren wir eine einfache Wartezeit, bevor die Bedingung der Schleife erneut überprüft wird.

Bei der Aktion „Get item“ definieren wir auch wieder die Site und die Liste (wie beim Trigger) und geben zusätzlich die ID mit, welche vom Trigger durchgegeben wird:

Die Delay-Funktion ist selbsterklärend:

Um die Anzahl von Versuchen zu definieren, welche die Schleife durchführen wird, müssen wie den Inhalt der Felder unter „Change limits“ anpassen:

In diesem Fall wird die Überprüfung 60-mal durchgeführt, bevor die Schleife verlassen wird.

Nun zu der Bedingung: Power Automate bietet einige Funktionen, die (noch) nicht über das GUI verwendet werden können. Die Funktion „empty“ ist eine solche. Mit dieser kann überprüft werden, ob ein Feld leer ist oder nicht. Somit müssen wir in den „Advanced mode“ wechseln und das Feld wie folgt ausfüllen:

Wichtig ist hierbei, dass das Feld „FirstPublishedDate“ von der Aktion „Get_item“ und nicht von der ersten Aktion „When an item is created“ verwendet wird! Bei der Erstellung des Objekts hat unser News-Beitrag noch kein „FirstPublishedDate“, weil dieser noch nicht publiziert wurde. Sobald sich das ändert und die Aktion „Get item“ ausgeführt wird, wird die Bedingung oben erfüllt.

Die „Do until“-Schleife überprüft in unserem Fall für 60 x 5 Minuten, ob die News publiziert wurde. Wenn diese Zeit verstreicht, ohne dass die News publiziert wurde, dann bleibt das Feld „FirstPublishedDate“ leer und wir können mit einer weiteren Condition entscheiden, was mit der Site passiert.

Nun da wir die „Do until“-Schleife fertig haben, können wir mit einer weiteren Condition (diese muss zwingend ausserhalb der „Do until“-Schleife sein!) fortfahren:

Auch hier wechseln wir wieder in den „advanced mode“ um die „empty“-Funktion verwenden zu können. Wir überprüfen somit, ob das Feld „First Published Date“ leer ist. Wenn ja, dann möchten wir den unveröffentlichten News-Beitrag löschen (fünf Stunden sollten genügen, um einen News-Beitrag fertigzustellen ;-)). Wenn nein, dann soll das Team informiert werden.

In der „If yes“-Bedingung erstellen wir die Löschen-Aktion. Die Felder können wir mit denselben Eingaben wie weiter oben ausfüllen:

Die letzte Aktion bestehe darin, nach Erstellung und Publizierung der Site eine Nachricht an das Team in Microsoft Teams zu senden. Dazu erstellen wir eine „Teams Post message“ Aktion in der „If no“-Bedingung. Im Dropdown-Menü können wir das Team und den Kanal auswählen. Im Feld „Message“ können wir nun die Felder angeben, welche wir möchten. In unserem Fall wird der Titel der News und ein Link zur zugehörigen SharePoint-Page gepostet:

Das wars, der Flow ist soweit fertig erstellt und kann nun mit dem Knopf „Create flow“ oben rechts erstellt werden.

Test durchführen

Bevor wir allen von unserem tollen Flow berichten, müssen wir das Ganze noch testen. Dazu gehen wir wie folgt vor:

  • News erstellen und publizieren
  • Nachricht in Teams kontrollieren
  • Weitere News erstellen aber nicht publizieren
  • Nach Ablauf der Zeit (evtl. Wartezeit in der Schleife verkürzen, damit ihr nicht fünf Stunden warten müsst) kontrollieren, ob die unveröffentlichte Page gelöscht wurde
  • Neue Page (keine News!) erstellen und kontrollieren ob Flow korrekt entscheidet und diese ignoriert

Einige Beobachtungen

Die Hilferessourcen von Microsoft sind, wenn überhaupt, nur sehr spärlich vorhanden, was bedeutet, dass viele Dinge durch ausprobieren herausgefunden werden müssen. Bedingungen stellen erfahrungsgemäss die grösste Fehlerquelle dar, weswegen es sich anbietet, diese gründlich zu testen. In diesem Fall habe ich nach jeder Bedingung eine angepasste Nachricht in Microsoft Teams posten lassen. Wenn also die Nachricht „Die Seite wurde nicht veröffentlicht“ gepostet wird obwohl die Veröffentlichung bereits stattgefunden hat, dann weiss ich, dass ich die Bedingung nochmals überprüfen muss.

Danke fürs Lesen/Teilen/Kommentieren! 🙂