Die Power Platform entwickelt sich rasant weiter und mit ihr die Möglichkeiten, Apps professioneller und modular aufzubauen. Zwei der spannendsten Neuerungen in Power Fx, der Formelsprache von Power Apps, sind derzeit als Vorschau und Experimentelle Features verfügbar: Benutzerdefinierte Funktionen (User Defined Functions, UDFs) und Benutzerdefinierte Typen (User Defined Types, UDTs).
In diesem Beitrag zeige ich dir, was diese Features können, warum sie wichtig sind und wie du sie in deiner App einsetzen kannst.
Was sind UDFs und UDTs und warum sie sich lohnen?
In Power Apps können Formeln schnell komplex und unübersichtlich werden – insbesondere, wenn dieselbe Logik an mehreren Stellen verwendet wird. Auch die strukturierte Verarbeitung von Daten wie Records oder Tabellen kann schnell unklar werden, besonders bei der Arbeit mit Schnittstellen oder mehreren Komponenten.
Mit UDFs kannst du deine eigene Funktion mit Namen, Parametern und Rückgabewert definieren – und sie beliebig oft in deiner App aufrufen.
Mit UDTs legst du fest, wie ein bestimmter Datentyp aufgebaut ist: Welche Felder gibt es? Welchen Typ hat jedes Feld?
Beide Funktionen helfen dir dabei:
- Redundanz in deiner Logik zu vermeiden
- Lesbarkeit und Wartbarkeit zu verbessern
- Fehler frühzeitig zu vermeiden durch klare Typisierung
Voraussetzungen zur Nutzung
Da sich UDFs und UDTs derzeit im Preview-Modus befinden, müssen sie im Power Apps Studio explizit aktiviert werden.
So geht’s:
- Öffne deine App im Bearbeitungsmodus
Aktiviere anschliessend folgende Einstellungen:
- Neues Analysemodul
→ Einstellungen > Updates > Neu
Aktiviere: Neues Analysemodul - Benutzerdefinierte Funktionen
→ Einstellungen > Updates > Vorschau
Aktiviere: Benutzerdefinierte Funktionen - Benutzerdefinierte Typen
→ Einstellungen > Updates > Experimentell
Aktiviere: Benutzerdefinierte Typen
Benutzerdefinierte Funktionen (UDFs)
Mit UDFs kannst du eigene Power Fx-Funktionen schreiben, mit Namen, Parametern und einem klaren Rückgabewert. Statt dieselbe Berechnung oder Logik an verschiedenen Stellen zu wiederholen, definierst du sie einmal und rufst sie überall auf, wo du sie brauchst.
Beispiel: Funktion zum Verdoppeln
Du kannst diese Funktion nun überall in deiner App verwenden:
Beispiel: Mehrwertsteuer berechnen
Unterstützte Datentypen
Derzeit werden folgende Datentypen in UDFs unterstützt:
- Text
- Number
- Boolean
- Color
- HyperLink
- GUID
- Date
- DateTime
- Time
- Dynamic
- Hinzugefügte Datenquellen
- UDT
Behavior vs. Non-Behavior Funktion
Non-Behavior Funktionen
Diese geben nur einen Wert zurück, ohne Auswirkungen auf den Zustand der App.
Beispiele:
Diese Funktionen geben nur Werte zurück, ohne direkt Auswirkung auf die App zu haben.
Behavior Funktionen
Diese führen eine Aktion aus: Sie setzen z. B. eine Variable, zeigen eine Nachricht an oder navigieren zu einem anderen Bildschirm.
Beispiele:
Diese Funktionen haben einen direkten Einfluss auf die App
Behavior Funktionen in UDFs einsetzen
Normalerweise dürfen UDFs nur Non-Behavior Funktionen enthalten.
Will man jedoch Verhaltenslogik (z. B. Navigate, Set) einbauen, muss man den Code in geschweifte Klammern {} setzen:
Benutzerdefinierte Typen (UDTs)
UDTs ermöglichen es, strukturierte Datentypen zu definieren, mit klar benannten Feldern und festen Typen. So kannst du sicherstellen, dass deine Daten immer korrekt aufgebaut sind.
Beispiel Produkttyp:
Damit legt man fest, dass ein Produkt immer einen Namen, Preis und Lagerbestand enthält – und nichts anderes.
Beispiel Warenwert berechnen:
Durch die Definition des UDT kann man diesen jetzt als Parametertyp verwenden.
Verwendung:
Listen-Typ
Damit kann man Listen typisieren, somit kann man ganze Listen an Funktionen übergeben.
Weitere Funktion: RecordOf
Neben Type(…) steht auch die Funktion RecordOf(…) zur Verfügung. Sie erzeugt einen einzelnen Typ, der zu einem zuvor definierten Listen-Typ passt.
Dabei ist ProduktlisteTyp ein vorher definierter Listen-Typ. RecordOf akzeptiert nicht direkt eine Type-Spezifikation wie Type(…), sondern erwartet den Namen eines bestehenden Listen-Typs. Das ist nützlich, wenn man z. B. ein neues Objekt mit derselben Struktur erstellen will, wie es bereits im Listen-Typ definiert wurde.
Vorteile von UDTs
- Klare Datenstruktur, keine unklaren oder inkonsistenten Records mehr
- Verbesserte Lesbarkeit und Dokumentation im Code
- Ideal für Schnittstellen, Komponenten, Sammlungen
- In Kombination mit UDFs: vollständige Kontrolle über Eingaben und Ausgaben
UDTs zur Verarbeitung von JSON-Daten aus Power Automate
Ein häufiger Anwendungsfall in Power Apps ist die Zusammenarbeit mit Power Automate. Power Automate liefert dabei manchmal strukturierte JSON-Daten zurück. Ohne klare Typisierung kann die Arbeit mit solchen Rückgaben fehleranfällig und unübersichtlich werden. Hier kann man User Defined Types (UDTs) ebenfalls verwenden.
Mit einem UDT kannst du die erwartete Struktur des JSON-Ergebnisses explizit festlegen, inklusive der Feldnamen und ihrer Typen. So erreichst du höhere Lesbarkeit und bessere Fehlerkontrolle.
Beispiel: Kundeninformationen aus einem Power Automate Flow
Ein Power Automate Flow gibt folgendes JSON-Objekt zurück:
Für dieses JSON-Objekt könnte man die folgenden UDT’s definieren:
Wenn man dann den Rückgabewert erhält, kann man diesen direkt typisiert weiterverwenden. Dazu verwendet man die Funktion ParseJSON(), man übergibt als erstes Argument das JSON-Objekt und als zweites Argument den zuvor erstellten UDT:
Vorteile:
- Sichere Weiterverarbeitung: Man kann direkt auf verschachtelte Daten zugreifen, ohne Angst vor Tippfehlern oder falschen Strukturen zu haben.
- Bessere Zusammenarbeit: Wenn jemand anderes die App bearbeitet, macht ein definierter UDT sofort deutlich, welche Datenfelder existieren.
Einschränkungen & Hinweise
- Nur mit aktiviertem Experimental-Modus verfügbar
- Keine optionalen Parameter in UDFs möglich
- Keine komplexen Typen wie Medien, Bilder oder Steuerelemente unterstützt
- Verhaltensfunktionen nur mit {}-Block erlaubt
Fazit
Mit User Defined Functions (UDFs) und User Defined Types (UDTs) bekommt man in Power Fx zwei mächtige Werkzeuge an die Hand, die die App-Entwicklung professioneller machen:
- UDFs sparen Zeit, reduzieren Redundanz und verbessern die Lesbarkeit deines Codes
- UDTs sorgen dafür, dass deine Datenstruktur klar, nachvollziehbar und fehlertolerant bleibt
Gerade bei grösseren Apps oder wiederverwendbaren Komponenten bringen diese Features einen Mehrwert.
Beitrag teilen