Power Automate: Validierung einer GUID
Power Automate ist ein mächtige Low-Code-Plattform die ich aus meinem Arbeitsalltag gar nicht mehr wegdenken möchte. Die Idee hinter Low-Code-Entwicklung ist, Anwendungen durch das Zusammenfügen vorgefertigter Softwarebausteine ohne viel Programmierung zu erstellen. Microsoft bietet mit Power Automate eine Plattform mit Schnittstellen zu den eigenen Produkten, aber auch vielen Drittanbieterlösungen. Leider hat der Low-Code-Ansatz aber auch seine Schattenseiten, denn manchmal möchte man mehr als die Plattform hergibt. Ein Beispiel sind reguläre Ausdrücke (Regular Expressions), die in der Programmierung als allgemeines Muster für die Suche in Zeichenketten genutzt werden. Sie ermöglichen z.B. die Überprüfung von Variableninhalten auf die Übereinstimmung mit bestimmten Mustern.
Es gibt in Power Automate keinen direkte Möglichkeit reguläre Ausdrücke zu verwenden. Ein Umweg über JavaScripts in Excel Online ist zwar möglich, aber wirklich sehr umständlich. Ein weiterer Ansatz wäre der Weg über eine Azure Function, der per http-Request aus einem Flow der reguläre Ausdruck und der zu prüfende Text übergeben werden, die dann das Ergebnis der RegEx-Prüfung in ihrer Response liefert.
Vor Kurzem habe ich mit einem Kollegen über dem Problem der Validierung einer GUID in Power Automate gesprochen bei der normalerweise eine RegEx eine sehr einfache Lösung gewesen wäre. Am Ende habe ich eine Demo-App entworfen, die zwar keine RegEx implementiert, aber mit den Boardmitteln von Power Automate ermitteln kann, ob es sich um eine gültige GUID handelt.
Eine GUID (Globally Unique Identifier) ist eine eindeutige Zahl, die in der Regel als 128-Bit-Wert dargestellt wird. Sie wird verwendet, um ein eindeutiges Identifikationsmerkmal für Objekte in verschiedenen Systemen und Anwendungen bereitzustellen. Sie werden in der Regel automatisch generiert und sind in der Regel als Hexadezimalzeichenfolge dargestellt:
415d374c-4dac-4dd0-8486-c6e170f2801f
Der Wert einer GUID wird als Sequenz von hexadezimalen Zeichen dargestellt, die in Blöcken von 8, 4, 4, 4 und 12 Zeichen gruppiert sind und durch vier Bindestriche voneinander getrennt sind. Im ersten Schritt prüft mein Flow ob der String die Länge 36 hat (length(variables(‚MyGUID‘))) und ob sich an den Positionen 9, 14, 19 und 24 ein Bindestrich befinden (substring(variables(‚MyGUID‘),8,1)).

Die in den Expressions verwendete Variable MyGUID enthält meinen Test-String mit der zu prüfenden GUID. Die Einzelnen Bedingungen der Condition sind per AND-Verknüpfung verbunden und müssen alle erfüllt sein. Wenn diese Prüfung fehlschlägt, kann man weitere Untersuchung der Variablen abbrechen, da es sich nicht um das korrekte Format handelt.
Stimmt das Format kann man im True-Zweig an die Prüfung des Inhalts gehen. Ich verwende eine Do-Until-Schleife, die prüft, ob der erste Buchstabe meiner GUID-Variablen ein Bindestrich oder ein Hexadezimalzeichen ist. Das können Zahlen von 0-9 und Buchstaben von a-f sein. Nach der Prüfung des ersten Buchstabens wird die GUID-Variable um ein Zeichen gekürzt, der Schleifenzähler um eins erhöht und es geht in den nächsten Schleifendurchlauf. Finde ich ein ungültiges Zeichen setze ich den Schleifenzähler auf das Maximum, setze meine boolsche Variable IsHex auf False und verhindere so weitere Schleifendurchläufe.
Hier ein Gesamtüberblick des Flows:

Hast du eine eleganteren Ansatz für dieses Problem gefunden? Lass es mich in den Kommentaren wissen!