Menschen von oben fotografiert, die an einem Tisch sitzen.

adesso Blog

Der MS Planner bietet nativ (noch) keine Möglichkeit, wiederkehrende Aufgaben anzulegen. In meinem Blog-Beitrag beschreibe ich, wie diese Anforderung zusammen mit Power Automate erfüllt wird, und erweitere den Flow anschließend um weitere Features.

Der Lösungsansatz besteht aus drei Komponenten:

  • MS Planner
  • Einer Liste in MS Teams beziehungsweise SharePoint
  • Einem „Flow“ in MS Power Automate

Die drei Komponenten übernehmen folgende Aufgaben:

  • In der SharePoint-/Teams-Liste werden die Daten für die wiederkehrenden Aufgaben gespeichert, die Attribute entsprechen daher denen, die im Planner für Aufgaben vorhanden sind.
  • Der Power Automate Flow wird zeitgesteuert täglich ausgeführt und legt etwaige Aufgaben an.
  • Der Planner wird auf erprobte Weise für die Aufgabenbearbeitung eingesetzt.

Die Basis-Funktionalität wird anschließend erweitert:

1. Erzeugung von Checklisten anhand der Aufgaben
2. Setzen der Kategorien mit einem http-Konnektor (wie das funktioniert, erkläre ich im zweiten Teil meines Blog-Beitrags)

Im Folgenden zeige ich euch zunächst eine lauffähige Basisversion des Lösungsansatzes, die für eine Reihe von Anwendungsszenarien ausreichen sollte. Diese Lösung wird im weiteren Verlauf um Lösungen für die Punkte eins bis drei erweitert. Ich beschränke mich dabei auf die wesentlichen Konnektoren.

Basis-Szenario

Erstellen der SharePoint-/Teams-Liste

Die SharePoint- und/oder Teams-Liste ist der Ausgangspunkt für die wiederkehrenden Aufgaben. Im weiteren Verlauf meines Beitrags nehme ich an, dass die Liste recurring tasks genannt wird. Die Liste der Basisversion hat folgenden Aufbau:

Attribut Typ (dt. Bezeichnung) Bedeutung
Title Eine Textzeile Aufgabentitel im Planner
Intervall Ganze Zahl Ausführungsintervall
in Tagen
LastCreationDate Datum und Uhrzeit (Nur Datum) Datum der letzten Aufgabenerstellung
(Im Flow gesetzt)
NextCreationDate Datum und Uhrzeit (Nur Datum) Datum der nächsten Aufgabenerstellung
(Im Flow berechnet)
UserToAssign Person oder Gruppe Ein oder mehrere User oder Gruppen
aus dem ActiveDirectory
Description Mehrere Textzeilen (Nur Text) Die Beschreibung der Aufgabe im Planner
ProcessingTime Ganze Zahl (Standardwert: 1) Dauer der Aufgabenausführung
in Tagen

Power Automate Flow

In der dieser Abbildung ist die Power Automate Flow dargestellt.

Abrufen der SharePoint-Daten

Der Flow beginnt mit dem Abrufen der fälligen Aufgaben des Tages aus der SharePoint-Liste. Die Websiteadresse hat das Format https://xxx.sharepoint.com/sites/<>. xxx ist in der Regel der Unternehmensname, <<Teams-Raum>> ist der Name des Teams-Raumes ohne Leerzeichen. Nach Eingabe der Websiteadresse werden im Dropdown Listenname die möglichen Listen angezeigt. Für die weitere Verarbeitung soll die Liste gefiltert werden, hierzu müsst ihr die erweiterten Optionen einblenden und im Abschnitt Abfrage filtern folgende Formel eingeben:

	
	NextCreationDate eq ‘utcNow()‘
	

Wir haben das Listenattribut NextCreationDate mit der Eigenschaft Nur Datum angelegt. Die Funktion utcNow() liefert standardmäßig einen vollständigen Timestamp. Der Vergleich beider Werte in Power Automate mit dem Operator eq führt zu einem Fehler, da die Operanden unterschiedliche Typen aufweisen. Die Lösung verbirgt sich hinter den drei Punkten in der Funktion beziehungsweise hinter einem Klick auf die Funktion: Hier habt ihr die Möglichkeit, das Ergebnis von utcNow zu formatieren. Das richtige Format für unseren Vergleich erhalten wir mit

	
	utcNow(‘yyyy-MM-dd‘) 
	

Zunächst brauchen wir nur eine Flow-Variable:

Flow-Variable

Flow-Variable Typ Bedeutung
UserIDs String E-Mail-Adressen der
zugewiesenen User

Aufgaben des aktuellen Tages erstellen

Das Anlegen der Aufgaben eines Tages wird mit einer For-Each-Schleife erledigt, der Power-Automate-Terminus hierfür ist Auf alle anwenden. Value ist das Ergebnis des Konnektors Elemente abrufen. Innerhalb von Auf alle anwenden wird eine weitere Schleife durchlaufen, in der die UserIDs zu einem String zusammengefügt werden.

Die beiden Zeitintervall-Konnektoren berechnen das Fälligkeitsdatum (anhand des Attributs processingtime) sowie das Datum, an dem die Aufgabe das nächste Mal ausgeführt werden soll (anhand von Intervall). Der Planner benötigt für die User einen String aus E-Mail-Adressen, separiert durch Semikolon. Der String wird in der Schleife Verantwortliche Nutzer zu Variablen hinzufügen gebildet. Die Planner-Aufgabe wird mit folgenden Einstellungen erzeugt:

Aufgabe erstellen mit mehreren Usern durch die String-Variable UserIDs

Aufgabe erstellen mit mehreren Usern durch die String-Variable UserIDs

Unter Gruppen-ID wird der Name des Teams-Raumes ausgewählt beziehungsweise sollte dieser vorbelegt sein. Die Plan-ID ist der Name des Planners in Teams. Als Projektleiter erstelle ich ein monatliches Reporting, daher setze ich in den Titel der Aufgabe den Titel aus der SharePoint-Liste zusammen mit dem Monat/Jahr. Falls ihr das so übernehmen möchtet, hier die Formatierung von

	
	utcNow('MM/yy').
	
Aufgabe und SharePoint-Eintrag aktualisieren

Die Beschreibung wird mit Aufgabe aktualisieren hinzugefügt. Abschließend wird der Teams-Listeneintrag auf das zukünftige, zuvor berechnete Ausführungsdatum gesetzt und die letzte Ausführung auf das aktuelle Datum gesetzt.

Erweitertes Szenario

Überblick über die Veränderungen im erweiterten Flow

Für das erweiterte Szenario wird die SharePoint-Liste erweitert und es werden weitere Variablen im Flow benötigt. Erweiterung der SharePoint-Liste:

Attribut Attribut Bedeutung
CheckListItems Textfeld, mehrzeilig Checklisteinträge, mit
Zeilenumbruch getrennt

Zusätzliche Flow-Variablen:

Flow-Variable Typ Bedeutung
ChecklistItems Array Array für Checklist-Einträge

In der dieser Abbildung ist die äußere Schleife mit den Anpassungen für Checklisten dargestellt.

Checklist-Einträge erstellen

Checklist-Einträge lassen sich auf verschiedene Arten in der Teams-Liste speichern. Ich habe mich für eine einfach zu implementierende Variante entschieden: Ich habe ein mehrzeiliges Textfeld CheckListItems zur Liste hinzugefügt und füge hinter jedem Eintrag einen Zeilenumbruch ein. Vorher prüfe ich, ob das Attribut für ChecklistItems gefüllt ist, hierzu wird die Empty-Funktion genutzt:

	
	empty(items('Auf_alle_anwenden')?['CheckListItems'])
	

Der False-Pfad der Bedingung ist leer. Im True-Pfad befindet sich der Konnektor Verfassen. Dieser zerlegt den String aus der SharePoint-Liste in ein Array. Hierzu wird, wie in vielen Programmiersprachen, die Funktion Split verwendet. Die Herausforderung hierbei ist, den Zeilenumbruch einzufügen, da ein Ascii/UTF8-Zeichen nicht zum gewünschten Ergebnis führt. Gelöst wird dies durch

	
	decodeUriComponent('%0A')
	

Die vollständige Split-Funktion lautet bei mir wie folgt:

	
	split(items('Auf_alle_anwenden')?['CheckListItems'],decodeUriComponent('%0A'))
	

Das soeben erzeugte Array wird nun durchlaufen, dabei die benötigte Struktur für die Checklist-Einträge erzeugt und im Array ChecklistItems abgelegt:

JSON-Struktur für Checklisteinträge füllen und im Array ChecklistItems ablegen

JSON-Struktur für Checklisteinträge füllen und im Array ChecklistItems ablegen

Die Kategorien werden später auf gleiche Weise gebildet.

Beim Aktualisieren der Aufgabe kann das erzeugte Array direkt hinzugefügt werden, dazu müsst ihr im Bereich der Prüfliste auf das Symbol mit „T“ klicken.

Die nützlichen Funktionen des Planners lassen sich mit Power Automate um weitere wertvolle Möglichkeiten erweitern. Power Automate unterstützt euch bei der Entwicklung mit diversen Hilfestellungen, so dass der Start sehr niederschwellig ist.

In diesem Blog-Beitrag habe ich existierende Bausteine aus Power Automate „legoartig“ zusammengestellt, um zwei Anforderungen an den Planner zu realisieren. Power Automate kann auch REST-APIs aufrufen und somit sind die möglichen Anwendungsfälle nicht auf die vorhandenen Power-Automate-Bausteine begrenzt. Im zweiten Teil meines Beitrags zeige ich euch, wie mit Power Automate die MS Graph API aufgerufen wird. Inhaltlich setze ich das Thema Planner fort und zeige eine Möglichkeit, Kategorien im Planner mit der Graph API anzulegen.

Weitere spannende Themen aus der adesso-Welt findet ihr in unseren bisher erschienenen Blog-Beiträgen.

Bild Alexander Zielinski

Autor Alexander Zielinski

Alexander Zielinski berät Unternehmen in den Bereichen Digitalisierung und IT Servicemanagement und hat in diesen Bereichen mehr als 10 Jahre Erfahrung. Sein branchenschwerpunkt liegt in der gesetzlichen Krankenversicherung.

Diese Seite speichern. Diese Seite entfernen.