Inhaltsverzeichnis
- 1. Warum null-Werte Flows abbrechen lassen
- 1.1. Zwei Ursachen laut Microsoft
- 1.2. Der Griff auf eine fehlende Ebene
- 2. Der Fragezeichen-Operator für optionale Properties
- 2.1. Vom unsicheren zum sicheren Zugriff
- 3. Standardwerte setzen mit coalesce
- 3.1. coalesce mit dem Fragezeichen-Operator kombinieren
- 4. Gezielt prüfen mit empty, equals und if
- 4.1. empty gegen equals mit null
- 4.2. Prüfung und Ersatzwert mit if
- 5. Fehler kontrolliert abfangen mit Try-Catch-Scopes
- 5.1. Aufbau der beiden Scopes
- 6. Die Techniken in der richtigen Reihenfolge
Ein null-Wert bricht einen Power-Automate-Flow selten wegen des fehlenden Werts selbst ab. Der häufigste Auslöser ist der Zugriff auf eine Property, die im JSON gar nicht existiert. Power Automate meldet das als InvalidTemplate oder mit dem Hinweis, dass eine Property nicht ausgewählt werden kann. Dieser Artikel zeigt, warum das passiert und mit welchen Ausdrücken Sie fehlende Werte zuverlässig abfangen, von coalesce und empty über den Fragezeichen-Operator bis zum Try-Catch-Muster mit Scopes.
Warum null-Werte Flows abbrechen lassen
Power Automate arbeitet intern mit JSON. Trigger und Aktionen liefern Objekte, und Ihre Ausdrücke greifen über den Feldnamen auf einzelne Werte zu. Solange das Feld existiert, ist alles gut. Fehlt das Feld dagegen, etwa weil ein Kontakt keine E-Mail-Adresse hat oder ein optionales Attribut nie befüllt wurde, dann verweist der Ausdruck ins Leere.
Zwei Ursachen laut Microsoft
Microsoft nennt zwei Ursachen, dokumentiert im Microsoft-Learn-Artikel zu Fehlern mit null-Feldern:
- Eine Aktion erhält einen null-Wert als Eingabe, obwohl sie einen anderen Typ erwartet, was zu unerwartetem Verhalten führt.
- Ein Ausdruck erwartet eine Zeichenkette, ein Objekt oder ein Array und bekommt stattdessen null.
Das Ergebnis ist ein Laufzeitfehler mit der Meldung InvalidTemplate. Unable to process template language expressions. The provided value is of type 'Null'.
Der Griff auf eine fehlende Ebene
Der zweite typische Fehlertext lautet sinngemäß, dass ein Template-Ausdruck nicht ausgewertet werden kann, weil eine Property nicht ausgewählt werden kann. Das passiert, wenn Sie auf eine verschachtelte Property wie body?.value?.email zugreifen und ein Zwischenobjekt fehlt.
Der Ausdruck versucht, eine Eigenschaft auf null zu lesen, und bricht ab. Wichtig zu verstehen: Nicht der leere String ist das Problem, sondern der Griff auf eine Ebene, die es nicht gibt.
Der Fragezeichen-Operator für optionale Properties
Das wichtigste Werkzeug gegen diesen Abbruch ist der Fragezeichen-Operator in der Ausdruckssyntax. Er wird direkt vor eine Property gesetzt und signalisiert, dass diese optional ist. Fehlt sie, liefert der Ausdruck schlicht null zurück, statt einen Fehler zu werfen.
Vom unsicheren zum sicheren Zugriff
Ein Zugriff ohne Absicherung sieht so aus: outputs('Get_record')['body']['emailaddress1']. Fehlt hier eine Ebene, bricht der Flow. Mit dem Fragezeichen-Operator wird daraus ein sicherer Zugriff: outputs('Get_record')?['body']?['emailaddress1']. Jedes Fragezeichen macht die folgende Property optional. Selbst wenn body null ist, liefert der Gesamtausdruck einfach null und läuft weiter.
Diese Schreibweise gehört an jede Stelle, an der Sie auf dynamische Werte aus einem Trigger oder einer Suche zugreifen, deren Vorhandensein nicht garantiert ist. Sie ist die Grundlage, auf der die folgenden Techniken für Standardwerte aufbauen.
Standardwerte setzen mit coalesce
Sobald der Zugriff selbst sicher ist, bleibt die Frage, was der Flow mit einem null-Wert tun soll. In den meisten Fällen wollen Sie einen Ersatzwert einsetzen. Dafür ist coalesce das schnellste Mittel, eine der zentralen Funktionen aus der Referenz der Ausdrucksfunktionen. Die Funktion prüft ihre Argumente der Reihe nach und gibt das erste zurück, das nicht null und nicht leer ist.
Ein Beispiel: coalesce(triggerBody()?['name'], 'Unbekannt') liefert den Namen aus dem Trigger, falls vorhanden, und sonst den Text Unbekannt. Für einen leeren String als Ersatz nutzen Sie coalesce(outputs('Compose')?['telefon'], ''). Sind alle Argumente leer, gibt coalesce selbst null zurück, weshalb Sie als letztes Argument immer einen echten Ersatzwert angeben sollten.
coalesce mit dem Fragezeichen-Operator kombinieren
Die Stärke von coalesce zeigt sich in der Kombination mit dem Fragezeichen-Operator. Der Ausdruck coalesce(outputs('Get_record')?['body']?['email'], 'keine Angabe') verhindert zunächst den Abbruch beim Zugriff und liefert dann einen lesbaren Ersatzwert. Diese beiden Techniken zusammen lösen die große Mehrheit aller null-Probleme in einem Flow.
Gezielt prüfen mit empty, equals und if
Manchmal genügt ein Standardwert nicht, und der Flow soll je nach Vorhandensein eines Werts unterschiedlich verzweigen. Dafür gibt es drei Ausdrücke, die sich sinnvoll ergänzen.
empty gegen equals mit null
empty(feld) ist wahr, wenn das Feld null, eine leere Zeichenkette, ein leeres Array oder ein leeres Objekt ist. Das ist die robusteste Prüfung auf fehlende Eingaben, weil sie mehrere Leer-Fälle auf einmal abdeckt. equals(feld, null) dagegen ist nur wahr, wenn das Feld exakt null ist, nicht aber bei einem leeren String. Für reine Existenzprüfungen ist empty deshalb meist die bessere Wahl.
Prüfung und Ersatzwert mit if
Wollen Sie Prüfung und Ersatzwert in einem Ausdruck kombinieren, nutzen Sie if. Der Ausdruck if(empty(outputs('Get_record')?['body']?['description']), 'keine Beschreibung', outputs('Get_record')?['body']?['description']) gibt einen Ersatztext aus, wenn die Beschreibung fehlt, und sonst den echten Wert. Das ist besonders praktisch in einem Compose oder direkt im Textfeld einer nachfolgenden Aktion.
In einer sichtbaren Bedingungsaktion arbeiten Sie ohne Ausdruck: Wählen Sie das dynamische Feld, setzen Sie die Operation auf ist nicht gleich und tragen Sie im Wertefeld den Ausdruck null ein. So verzweigt der Flow sauber danach, ob ein Wert vorhanden ist.
Die folgende Übersicht fasst zusammen, wann welcher Baustein passt.
| Baustein | Zweck | Typisches Beispiel |
|---|---|---|
| Fragezeichen-Operator | sicherer Zugriff auf optionale, verschachtelte Properties | outputs?['body']?['email'] |
| coalesce | ersten nicht-leeren Wert liefern, Standardwert setzen | coalesce(feld, 'Ersatz') |
| empty | auf null, leeren String, leeres Array prüfen | empty(variables('liste')) |
| equals mit null | exakt auf null prüfen | equals(feld, null) |
| if | Prüfung und Ersatzwert in einem Ausdruck | if(empty(feld), 'Ersatz', feld) |
Fehler kontrolliert abfangen mit Try-Catch-Scopes
Trotz sorgfältiger Ausdrücke lassen sich nicht alle Fehler vorhersehen, etwa wenn ein externer Konnektor unerwartet null zurückgibt. Für diese Fälle gibt es in Power Automate das Try-Catch-Muster mit Scopes und der Einstellung Ausführung konfigurieren.
Aufbau der beiden Scopes
Der Aufbau ist einfach. Sie legen einen Scope namens Try an, der die eigentliche Logik enthält. Danach folgt ein zweiter Scope namens Catch für die Fehlerbehandlung. Bei diesem Catch-Scope öffnen Sie über das Menü die Option Ausführung konfigurieren und aktivieren die Zustände ist fehlgeschlagen und wurde übersprungen. Damit läuft der Catch-Scope nur dann, wenn der Try-Scope scheitert.
Im Catch-Scope protokollieren Sie den Fehler, benachrichtigen ein Team oder setzen einen Ersatzwert. Über den Ausdruck result('Try') greifen Sie auf die Ergebnisse der Aktionen im Try-Scope zu und können die Fehlermeldung auslesen. So endet der Flow kontrolliert und nicht mit einem harten roten Abbruch, der niemanden informiert.
Diese Einstellung, in Power Automate als Ausführung konfigurieren bekannt, ist dasselbe Werkzeug, das Sie auch für gezielte Wiederholungen und für den Umgang mit gedrosselten Aufrufen brauchen. Wie Sie Grenzwerte und Wiederholungen im Griff behalten, zeigt unser Beitrag zu Power-Automate-Throttling und Action-Limits.
Die Techniken in der richtigen Reihenfolge
In der Praxis gehen Sie am besten von einfach zu robust vor:
- Sichern Sie zuerst jeden Zugriff auf dynamische Werte mit dem Fragezeichen-Operator ab.
- Setzen Sie danach mit
coalesceoderifsinnvolle Standardwerte, damit nachfolgende Aktionen niemals null erhalten. - Verzweigen Sie mit
emptyoderequals, wo der Flow abhängig vom Vorhandensein eines Werts unterschiedlich reagieren soll. - Legen Sie um kritische Abschnitte ein Try-Catch-Muster, damit unerwartete Fehler den Flow nicht lautlos rot enden lassen.
Diese defensive Bauweise ist ein Kernprinzip stabiler Automatisierung. Wie Sie Ihre Flows darüber hinaus effizient strukturieren, lesen Sie in unserem Leitfaden zur Effizienzsteigerung mit Power-Automate-Workflows in Dynamics 365. Und wenn Sie abwägen, ob Logik überhaupt in einen Flow gehört oder besser serverseitig läuft, hilft der Vergleich zwischen Business Rule, JavaScript, Plugin und Cloud Flow.
Wenn ein Flow bei Ihnen unregelmäßig abbricht und Sie die Ursache nicht eingrenzen können, sprechen Sie uns an. Wir prüfen Ihre Flows und machen sie belastbar gegen fehlende Werte.
Häufig gestellte Fragen
Warum bricht mein Power-Automate-Flow bei einem leeren Feld mit InvalidTemplate ab?

Der Fehler entsteht fast nie durch den leeren Wert selbst, sondern durch den Zugriff auf eine Property, die im JSON gar nicht vorhanden ist. Wenn ein Ausdruck eine Zeichenkette, ein Objekt oder ein Array erwartet, aber null erhält, meldet Power Automate InvalidTemplate. Setzen Sie den Fragezeichen-Operator vor die betroffene Property, dann liefert der Ausdruck null statt eines Abbruchs.
Was macht die coalesce-Funktion in Power Automate genau?

coalesce prüft ihre Argumente der Reihe nach und gibt den ersten Wert zurück, der nicht null und nicht leer ist. Der Ausdruck coalesce(triggerBody()?['name'], 'Unbekannt') liefert also den Namen, falls vorhanden, und sonst den Text Unbekannt. Sind alle Argumente leer, gibt coalesce selbst null zurück.
Wie prüfe ich in einer Bedingung, ob ein Wert null ist?

Fügen Sie eine Bedingung ein, wählen Sie das dynamische Feld, setzen Sie die Operation auf ist nicht gleich und tragen Sie im Wertefeld den Ausdruck null ein. Alternativ nutzen Sie im Ausdruckseditor equals(feld, null) oder empty(feld). empty prüft dabei zusätzlich auf leere Zeichenketten und leere Arrays.
Was ist der Unterschied zwischen empty und equals mit null?

equals(feld, null) ist wahr, wenn das Feld exakt null ist. empty(feld) ist zusätzlich auch dann wahr, wenn das Feld eine leere Zeichenkette, ein leeres Array oder ein leeres Objekt ist. Für die meisten Prüfungen auf fehlende Eingaben ist empty die robustere Wahl, weil es beide Fälle abdeckt.
Wie baue ich ein Try-Catch-Muster in Power Automate?

Legen Sie zwei Scopes an, einen Try-Scope mit der eigentlichen Logik und einen Catch-Scope für die Fehlerbehandlung. Öffnen Sie beim Catch-Scope die Einstellung Ausführung konfigurieren und aktivieren Sie ist fehlgeschlagen und wurde übersprungen. So läuft der Catch-Scope nur, wenn der Try-Scope scheitert, und der Flow endet kontrolliert statt mit einem harten Abbruch.
Warum greift der Fragezeichen-Operator, wenn coalesce allein nicht reicht?

coalesce fängt einen null-Wert ab, kann den Fehler aber nicht verhindern, der schon beim Zugriff auf eine nicht existierende verschachtelte Property entsteht. Erst der Fragezeichen-Operator erlaubt den Zugriff auf eine fehlende Property, ohne dass der Ausdruck bricht. In der Praxis kombiniert man beide, etwa coalesce(outputs?['body']?['email'], 'keine Angabe').
Inhaltsverzeichnis
- 1. Warum null-Werte Flows abbrechen lassen
- 1.1. Zwei Ursachen laut Microsoft
- 1.2. Der Griff auf eine fehlende Ebene
- 2. Der Fragezeichen-Operator für optionale Properties
- 2.1. Vom unsicheren zum sicheren Zugriff
- 3. Standardwerte setzen mit coalesce
- 3.1. coalesce mit dem Fragezeichen-Operator kombinieren
- 4. Gezielt prüfen mit empty, equals und if
- 4.1. empty gegen equals mit null
- 4.2. Prüfung und Ersatzwert mit if
- 5. Fehler kontrolliert abfangen mit Try-Catch-Scopes
- 5.1. Aufbau der beiden Scopes
- 6. Die Techniken in der richtigen Reihenfolge
Sie haben Fragen zu Dynamics 365?
Wir haben die Antworten.
Vereinbaren Sie einfach ein unverbindliches Erstgespräch mit einem Dynamics-Experten.
Termin vereinbaren



















