Tutorial zur
Urlaubsgenehmigung
mit SharePoint und
Power Automate Teil 8/9: Die Einrichtung in Power Automate – Flow 5 'Urlaubsantrag stornieren'
Fortsetzung der Tutorial-Reihe zur Urlaubsgenehmigung: Nicht immer läuft im Leben alles wie geplant – umso besser, wenn man flexibel 🤹♂️ darauf reagieren kann. Mithilfe des Flows ‘Urlaubsantrag stornieren’ können Anträge storniert 🔙 werden, unabhängig davon, ob der Genehmigungsprozess noch läuft oder bereits genehmigt wurde.
Abschluss der Einrichtung in Power Automate
Sie haben es fast geschafft! Der Flow zur Stornierung von Urlaubsanträgen ist das letzte Teil 🧩 im Power Automate-Puzzle. Erstellen Sie wieder einen automatisierten Cloud-Flow und überspringen Sie das Fenster ‘Automatisierten Cloud-Flow erstellen’. Suchen Sie nach dem Forms-Trigger ‘Bei Übermitteln einer neuen Antwort’ und setzen Sie für die Formular-ID die Umgebungvariable ‘EV Formular Urlaub stornieren’ ein.
Als zweite Aktion setzen Sie die Forms-Aktion ‘Antwortdetails abrufen’ mit der Formular-ID ‘EV Formular Urlaub stornieren’ und als Antwort-ID die ‘Antwort-ID’ aus dem Trigger.
Initialisieren Sie anschließend die folgenden flowinternen Variablen. Für die Variable AntragsNr können Sie den Rückgabewert ‘Antragsnr.’ aus ‘Antwortdetails abrufen’ einsetzen, die anderen können leer bleiben – denn sie werden über den Verlauf des Flows gefüllt.
Name | Typ |
---|---|
AntragsNr | Zeichenfolge |
Genehmigungsstatus | Zeichenfolge |
AntragstellendePerson | Zeichenfolge |
NutzendePerson | Zeichenfolge |
EmailVorgesetztePerson | Zeichenfolge |
Urlaubsform | Zeichenfolge |
HalberTag | Zeichenfolge |
FeldLeeren | Zeichenfolge |
LookupID | Float |
Urlaubstage | Float |
GenehmigterUrlaubTage | Float |
GenehmigteTage | Float |
Setzen Sie die Office-365-Users-Aktion ‘Nach Benutzern suchen’ mit dem Rückgabewert ‘Responders’ Email’ als Suchbegriff. Legen Sie danach die Variable ‘NutzendePerson’ fest mit dem Wert ‘Anzeigename’. Durch diese Abfrage entsteht eine Auf-alle-anwenden-Schleife. Verlassen Sie diese und rufen Sie mit der SharePoint-Aktion ‘Elemente abrufen’ die vorhandenen Anträge ab. Geben Sie für die Websiteadresse die Umgebungsvariable ‘EV Site Urlaubsgenehmigung’ und für den Listennamen die Umgebungsvariable ‘EV Liste Urlaubsanträge’ an. Filtern Sie die Abfrage auf Title eq '@{variables('AntragsNr')}'
.
Im nächsten Schritt werden die Variablen festgelegt, die Werte aus dem Antrag benötigen. Legen Sie diese alle innerhalb der gleichen Auf-alle-anwenden-Schleife ‘Werte festlegen’ fest, welche sich auf die SharePoint-Aktion ‘Urlaubsanträge: Antrag abrufen’ bezieht.
Name | Wert |
---|---|
Genehmigungsstatus | Rückgabewert zu ‘Inhaltsgenehmigungsstatus’ |
LookupID | Rückgabewert zu ‘Urlaubstage ID’ |
AntragstellendePerson | Rückgabewert zu ‘Name Antragsteller Display Name’ |
Urlaubstage | float(items('Werte_festlegen')?['Urlaubstage']) |
Fügen Sie eine neue Bedingung ein und prüfen Sie, ob die Variable ‘AntragstellendePerson’ gleich ‘NutzendePerson’ ist. Erzeugen Sie im „Nein“-Zweig eine E-Mail, welche die Person, die das Formular genutzt hat, darüber informiert, dass die angegebene Antragsnummer zu einem fremden Antrag gehört. Setzen Sie danach die Steuerung-Aktion ‘Beenden’ mit dem Status ‘Abgebrochen’.
Beispieltext:
Sie haben versucht einen Antrag zu stornieren, der von jemand anderem gestellt wurde.
Sie können nur solche Anträge stornieren, die Sie selbst gestellt haben.
Pfad AntragstellendePerson gleich NutzendePerson: Ja
Im „Ja“-Zweig kann es zu zwei Konstellationen kommen. Entweder ein Antrag ist bereits genehmigt oder ein Antrag liegt dem/der Genehmigenden zur Genehmigung vor. In beiden Fällen soll auch der/die Vorgesetzte darüber informiert werden, dass der Antrag storniert wurde. Ist der Antrag bereits genehmigt, soll eine Genehmigung der Stornierung durchgeführt werden.
Legen Sie die Office-365-Users-Aktion ‘Vorgesetzten abrufen’ an, mit dem Rückgabewert ‘Benutzerprinzipalname’ aus der Aktion ‘Nach Benutzern suchen’. Anschließend setzten Sie den daraus ermittelten Wert ‘Mail’ in die flowinterne Variable ‘EmailVorgesetztePerson’ ein. Bleiben Sie für diesen und die folgenden Schritte innerhalb der Auf-alle-anwenden-Schleife.
Fügen Sie eine neue Bedingung ein, die die Variable Genehmigungsstatus ist gleich Approved überprüft.
Pfad Status ist genehmigt: Nein
Im „Nein“-Zweig dieser neuen Bedingung fügen Sie die Power-Automate-Management-Aktion ‘Flow-Ausführung abbrechen’ ein. Setzen Sie die Umgebungsvariablen ‘EV Power Automate Umgebung ID’ (Umgebung) und ‘EV Flow ID’ (Flow) und geben Sie als ‘Ausführungs-ID’ den Rückgabewert ‘Flow ID’ aus der Aktion ‘Urlaubsanträge: Antrag abrufen’ an. Bleiben Sie innerhalb der Auf-alle-anwenden-Schleife.
Nachdem Sie dadurch den laufenden Genehmigungsflow beendet haben, können Sie die am Antrag hinterlegte Flow ID entfernen. Setzen Sie die SharePoint-Aktion ‘Element aktualisieren’ ein. Geben Sie alle Werte, die mit einem roten Asterisk * markiert sind, an, setzen Sie den Wert ‘Storniert’ auf ‘Ja’ und fügen Sie die Variable ‘FeldLeeren’ im Wert ‘Flow ID’ an. Leeren Sie die anderen vorausgefüllten Felder, um diese Werte im Antrag nicht zu überschreiben.
Danach wird für diesen Pfad die Outlook-Aktion ‘E-Mail senden’ benötigt, um sowohl dem/der Genehmigenden als auch dem/der Antragstellenden zurückzumelden, dass der Antrag erfolgreich storniert wurde.
Beispieltext:
Der Urlaubsantrag Nr. @{variables(‘AntragsNr’)} wurde von @{variables(‘AntragstellendePerson’)} storniert.
Der Flow für den Genehmigungsprozess wurde gestoppt.
Pfad Status ist genehmigt: Ja
In diesem Schritt soll eine neue Genehmigung erstellt werden, da ein Antrag storniert werden soll, der bereits genehmigt wurde. Legen Sie dafür zuerst die beiden Variablen ‘Urlaubsform’ und ‘HalberTag’ fest. Wenn Sie auf ein Element einer multiplen Abfrage – z. B. innerhalb einer Auf-allen-anwenden-Schleife – zugreifen wollen, können Sie über die Konstruktion items()
folgendermaßen darauf zugreifen:
items(Name der Schleife)?[Wert]
if(abzufragender Ausdruck, wenn ja, wenn nein)
Name | Wert |
---|---|
Urlaubsform | if(items('Genehmigung_erstellen')?['Sonderurlaub'], 'Sonderurlaub', 'Urlaub') |
HalberTag | if(items('Genehmigung_erstellen')?['Halber_x0020_Tag'], 'Ja', 'Nein') |
Fügen Sie als Nächstes die Teams-Aktion ‘Genehmigung erstellen’ ein. Setzen Sie den ‘Genehmigungstyp’ auf ‘Genehmigen/ablehnen: Erste Antwort’, vergeben Sie einen für Sie aussagekräftigen Titel und weisen Sie die Variable ‘EmailVorgesetztePerson’ zu. Im Feld ‘Details’ geben Sie die Daten an, die für die Genehmigungsnachricht relevant sind. Mit dem Rückgabewert ‘Link zu Element’ aus der Abfrage ‘Urlaubsanträge: Antrag abrufen’ können Sie einen Link angeben. Den Wert ‘Neuzuweisung aktivieren’ sollten Sie auf ‘Nein’ setzen, sofern Sie nicht ausdrücklich wünschen, dass die Genehmigung an eine andere Person neu zugewiesen werden kann. Bedenken Sie, dass dies nicht explizit an den Flow zurückgemeldet wird und Sie dadurch keine Nachverfolgung der Neuzuweisung erhalten.
Damit der Flow auf eine Rückmeldung wartet, erstellen Sie die Teams-Aktion ‘Auf Genehmigung warten’ und geben die ‘Genehmigungs-ID’ der vorhergehenden Aktion an.
Beispieltext:
@{variables(‘AntragstellendePerson’)} möchte den Urlaubsantrag Nr. @{variables(‘AntragsNr’)} stornieren.
Zeitraum: @{formatDateTime(convertTimeZone(items(‘Genehmigung_erstellen’)?[‘Startdatum’], ‘UTC’, ‘W. Europe Standard Time’),‘dd.MM.yyyy’, ‘DE’)} - @{formatDateTime(convertTimeZone(items(‘Genehmigung_erstellen’)?[‘Enddatum’], ‘UTC’, ‘W. Europe Standard Time’),‘dd.MM.yyyy’, ‘DE’)}
Urlaubstage: @{variables(‘Urlaubstage’)}
Halber Tag: @{variables(‘HalberTag’)}
Urlaubsform: @{variables(‘Urlaubsform’)}
Bleiben Sie innerhalb der ‘Genehmigung erstellen’-Schleife und erzeugen Sie eine neue Bedingung, bei der das Ergebnis der Genehmigung auf ist gleich Approve geprüft wird. Erzeugen Sie im „Nein“-Zweig eine neue Outlook-E-Mail, in der die antragstellende Person darüber informiert wird, dass der Stornierungsantrag abgelehnt wurde.
Beispieltext:
Eine Stornierung des Urlaubsantrags Nr. @{variables(‘AntragsNr’)} wurde abgelehnt.
Kommentar: @{items(‘E-Mail:_Storno_abgelehnt’)?[‘comments’]}
Pfad Storno ist genehmigt: Ja
Wählen Sie die Outlook-Aktion ‘Ereignis löschen’ aus und geben Sie den Kalender ‘Urlaub’ sowie den Rückgabewert ‘Event ID’ aus der SharePoint-Aktion ‘Urlaubsanträge: Antrag abrufen’ an, um das am Antrag hinterlegte Ereignis aus dem gemeinsamen Kalender zu entfernen.
Fügen Sie die SharePoint-Aktion ‘Element aktualisieren’ ein. Nutzen Sie die Ihnen bekannten Umgebungsvariablen, um auf die Liste ‘Urlaubsanträge’ zuzugreifen und füllen Sie die Felder mit dem roten Asterisk * mit den Werten aus der Aktion ‘Urlaubsanträge: Antrag abrufen’. Setzen Sie den Wert ‘Storniert’ auf ‘Ja’ und leeren Sie alle anderen vorausgefüllten Felder, um nichts versehentlich zu überschreiben. Den Wert ‘Event ID’ leeren Sie im Antrag, indem Sie die Variable ‘FeldLeeren’ einfügen.
Um nun die Anzahl der genehmigten Tage in der SharePoint-Liste ‘Urlaubstage’ anzupassen, rufen Sie den Eintrag aus der Liste ab und legen für die Variable ‘GenehmigterUrlaubTage’ fest, ob die Zahl der insgesamt genehmigten Urlaubstage oder die bereits genehmigten Sonderurlaubstage gespeichert wird. In der Fx-Formel für den Ausdruck prüfen Sie über if()
und startsWith()
, ob die weiter oben im Flow festgelegte Variable ‘Urlaubsform’ mit dem Wort ‘Sonder’ beginnt. Ist dies der Fall, dann wird der Rückgabewert ‘Genehmigter Sonderurlaub’ übernommen, wenn nicht, wird der Rückgabewert ‘Genehmigt’ eingefügt.
if(startsWith(variables('Urlaubsform'), 'Sonder'), outputs('Urlaubstage:_Eintrag_abrufen')?['body/Genehmigter_x0020_Sonderurlaub'], outputs('Urlaubstage:_Eintrag_abrufen')?['body/Genehmigt'])
Legen Sie danach die Variable ‘GenehmigteTage’ fest, um den neuen Wert zu berechnen. Dafür ziehen Sie mittels der Fx-Formel sub(x, y)
den Wert y (= Subtrahend) von dem Wert x (= Minuend) ab.
sub(variables('GenehmigterUrlaubTage'),variables('Urlaubstage'))
Über die SharePoint-Aktion ‘Element aktualisieren’ können Sie nun den Eintrag in der Liste ‘Urlaubstage’ anpassen. Setzen Sie die Umgebungsvariablen sowie die Variable ‘LookupID’, füllen Sie die mit dem roten Asterisk * markierten Felder mit den passenden Rückgabewerten aus der Aktion ‘Urlaubstage: Eintrag abrufen’ und leeren Sie die übrigen Felder. Die beiden Werte für ‘Genehmigt’ und ‘Genehmigter Sonderurlaub’ werden wie folgt ermittelt: Genau wie beim Festlegen der Variable ‘Urlaubsform’ ermitteln Sie den benötigten Wert darüber, ob eben jene Variable mit dem Wort ‘Sonder’ beginnt.
Ist dies der Fall, so wird der bisherige Wert für ‘Genehmigt’ übernommen und die Variable ‘GenehmigteTage’ wird in das Feld ‘Genehmigter Sonderurlaub’ eingefügt. Ist dies nicht der Fall, so wird ‘GenehmigteTage’ in ‘Genehmigt’ eingefügt und der bisherige Wert für ‘Genehmigter Sonderurlaub’ wird übernommen.
Name | Wert |
---|---|
Genehmigt | if(startsWith(variables('Urlaubsform'), 'Sonder'), outputs('Urlaubstage:_Eintrag_abrufen')?['body/Genehmigt'], variables('GenehmigteTage')) |
Genehmigter Sonderurlaub | if(startsWith(variables('Urlaubsform'), 'Sonder'), variables('GenehmigteTage'), outputs('Urlaubstage:_Eintrag_abrufen')?['body/Genehmigter_x0020_Sonderurlaub']) |
Danach sollte noch eine E-Mail erzeugt werden, die die antragstellende sowie die genehmigende Person darüber informiert, dass die Stornierung des Antrags erfolgreich ausgeführt wurde.
Als letzten Schritt setzen Sie am Ende des Pfades ‘AntragstellendePerson ist gleich NutzendePerson’ die Steuerung-Aktion ‘Beenden’ mit dem Status ‘Erfolgreich’.
Denken Sie daran, alle Aktualisierungen in Ihrer Power Automate-Lösung zu veröffentlichen und zu exportieren.
Herzlichen Glückwunsch 🎉 – Sie haben alle Flows erstellt, die Sie für die Urlaubsgenehmigung benötigen! Im letzten Schritt dieses Tutorials werden Sie einen Testlauf durchführen, um die Flows zu überprüfen und gegebenenfalls zu korrigieren. Ihre Urlaubsgenehmigung steht jetzt in den Startlöchern! 🚀
Weiter geht’s mit dem Tutorial zur Urlaubsgenehmigung in ➡️ Teil 9/9: Testlauf und Administration der Urlaubsgenehmigung.