Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 6 Min.

Programmieren mit Power Fx

Die Low-Code-Programmiersprache Power Fx von Microsoft steht im Zentrum der Softwareentwicklung mit der Power Platform.
PowerApps
© EMGenie

Low-Code bedeutet, dass Entwickler zur Erstellung einer App nur minimale Kenntnisse der Programmierung benötigen. Im Unterschied zu anderen Low-Code-Programmiersprachen basiert Power Fx auf dem aus Excel bekannten Formel-Ansatz. Dabei unterstützt Power Fx die deklarative, funktionale und imperative Programmierung. In Anlehnung an diese Paradigmen kennt Power Fx Datentypen, Variablen, Funktionen und Steuerstrukturen, um komplexe Logik und Berechnungen zu implementieren. Microsoft baut die verfügbaren Features der Programmiersprache kontinuierlich weiter aus!

Power-Fx-Funktionen als wiederverwendbare Objekte

Power-Fx-Funktionen gehören aktuell zu den Preview-Features von Power Apps. Für sie muss die verwendete Umgebung auf den Release-Zyklus früh/Preview eingestellt sein, dieser steht allerdings nicht für alle Regionen zur Verfügung. Grundsätzlich legt Power Apps alle Funktionen in einer Dataverse-Datenbank ab – in der Power Platform-Umgebung muss also eine Dataverse-Datenbank enthalten sein. Funktionen sind über die Dataverse-Datenbank oder über die in der Power Platform vorhandenen Verbindungen (Connectors) als eigenständiges Objekt wiederverwendbar.

Mittels Funktionen entfällt ein Kopieren von Quellcode zur Wiederverwendung über mehrere Apps hinweg. Jetzt ist dazu nur noch ein einfacher Zugriff auf die gewünschte Funktion notwendig. Diese Art der Wiederverwendung erleichtert wesentlich Pflege und Weiterentwicklung einer Funktion, da alle damit verbundenen Arbeiten an nur einer zentralen Stelle anfallen. Für das direkte Arbeiten mit Funktionen empfiehlt es sich, diesen Punkt auf der Homepage der Entwicklungsumgebung in die linke Menüleiste aufzunehmen. Ein Klick auf den Eintrag … Mehr in der linken Menüleiste öffnet das gleichnamige Pop-up-Fenster.

Dort zeigt die Schaltfläche Alle entdecken einen Fensterbereich Funktionen (Vorschauversion) an. Das dortige Piktogramm Anheften nimmt fx-Funktionen als permanenten Eintrag in die linke Menüleiste von Power Apps auf. Ein Klick auf diesen neuen Menüeintrag zeigt das Functions (Vorschauversion)-Fenster an. Die dort stehenden Schaltflächen + Neue Funktion oder Funktion erstellen öffnen das gleichnamige Dialogfenster, um direkt eine neue Funktion anzulegen. Dieses Preview-Feature erleichtert wesentlich das Arbeiten mit Power-Fx-Funktionen, da jetzt alle erforderlichen Arbeiten hier zentral erfolgen; der bisherige Einsatz externer Tools entfällt.

Die Ausführung einer Power-Fx-Funktion findet immer serverseitig statt – damit übernimmt das Backend alle mit ihr verbundenen Arbeiten. Das entlastet nicht nur wesentlich das Mobilgerät auf dem Client, sondern bietet für die App auch eine höhere Sicherheit, da nur das Ergebnis der Funktion und nicht alle Daten vom Server auf den Client zu übertragen sind. Anstatt die mit der Funktion verbundene Logik in jeder App lokal auszuführen, genügt eine einzige Ausführung auf dem Server. Deshalb verbessert diese Vorgehensweise auch die Performance der App, die ja nur das Ergebnis der Funktion benötigt. Auch die Wahrung der Konsistenz seitens der Power Fx-Funktion verwendeten Daten vereinfacht sich: Die Daten sind nur von der Funktion und nicht von jeder App zu prüfen.

Definition einer Power-Fx-Funktion innerhalb von Power Apps Studio

Die Neuanlage einer Power-Fx-Funktion erfolgt innerhalb von Power Apps Studio (der Power Apps-IDE) über das Dialogfenster Neue Funktion (Bild 1). Dort legt der Entwickler die Mussfelder der Funktion wie Anzeigename, Beschreibung und mindestens einen Parameter für die Eingabe und einen für das Ausgabeergebnis fest. Ein Klick auf die Schaltfläche Speichern übernimmt die Power-Fx-Funktion als neuen Bestandteil in die aktuelle Power-Apps-Umgebung. Eine Power-Fx-Funktion kann mehrere Ausgabeergebnisse zurückliefern. Im Beispiel von Bild 1 berechnet die Funktion den Bruttopreis für eine Ware über deren Menge und Preis.

Im Dialogfenster Neue Funktion erfolgt über dessen Eingabefelder die Deklaration einer wiederverwendbaren Power-Fx-Funktion (Bild 1)

Im Dialogfenster Neue Funktion erfolgt über dessen Eingabefelder die Deklaration einer wiederverwendbaren Power-Fx-Funktion (Bild 1)

© Autor

Hier wäre es sinnvoll, nicht nur den Bruttopreis, sondern auch die Mehrwertsteuer als Rückgabewert von der Funktion zu erhalten. Dazu definiert der Programmierer ein weiteres Ausgabeergebnis Mehrwertsteuer und nimmt diesen Rückgabewert als zusätzliche Berechnung in die Power-Fx-Formel auf (Listing 1).

Listing 1: fx-Funktion mit zwei Rückgabewerten
{
    Mehrwertsteuer:  Menge * Nettopreis * Mehrwertsteuersatz;
    // Gesamtpreis inklusive MwSt.
    Bruttopreis:  Menge * Nettopreis* (1 + Mehrwertsteuersatz)
    // Gesamtpreis inklusive MwSt.
}
 

Nach dem Speichern einer Power-Fx-Funktion trägt Power Apps diese in die Liste aller Funktionen ein – sie erscheint nach einem Klick in der linken Menüleiste auf den Eintrag fx-Funktionen. Neben dem Anzeigenamen der Funktion und ihrer Beschreibung befindet sich ein 3-Punkte-Icon mit vier Menüeinträgen (Bild 2).

Das Drei-Punkte-Icon öffnet ein Drop-down-Menü (Bild 2)

Das Drei-Punkte-Icon öffnet ein Drop-down-Menü (Bild 2)

© Autor

Diese vier Menüpunkte ermöglichen ein Bearbeiten der Funktionsdeklaration, das Löschen der Funktion aus der aktuellen Power-Apps-Umgebung, das Erzeugen eines Funktionsaufrufs in der Zwischenablage und die Durchführung eines Tests für die Funktion. Die Test-Schaltfläche öffnet ein Formular für die Eingabe der drei Eingabeparameter und die Durchführung eines Tests über die Wiedergeben-Schaltfläche.

Eine Eingabe von 100 für den Preis, 2 für die Menge und 0.20 für den Mehrwertsteuersatz liefert als Antwort erfolgreich und die folgende Zeichenkette zurück:

 

{"@odata.context":"https://org2b9d7d87.crm.dynamics.com/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.cr30a_BerechnungBruttopreismitMehrwertsteuerResponse","Bruttopreis":240,"Mehrwertsteuer":40}

 

Die Berechnung von Bruttopreis und Mehrwertsteuer entspricht einem korrekten Testergebnis. Gleichzeitig verdeutlicht diese Rückgabe-Zeichenkette die Realisierung einer Power-Fx-Funktion als Web-API. Es verwendet das Open-Data-Protokoll (OData), das die Vorteile von AtomPub und JSON mit denen der REST-Prinzipien verbindet.

Wiederverwendung von UDFs und UDTs ist derzeit auf eine App beschränkt!

Beim neuen Sprachkonstrukt der User-defined Functions (UDFs) handelt es sich nicht um ein normales Preview-Feature, sondern um eines, das Microsoft aktuell noch als Experimental kennzeichnet. Mit derartigen Preview-Features zielt Microsoft darauf ab, von Programmierern baldmöglichst Rückmeldungen aus der Praxis zu erhalten. Bei den Einstellungen der App aktiviert das Updates-Menü UDFs über ein eigenes Register Experimental. Im Unterschied zu einer Power-Fx-Funktion können UDFs eigene Aktionen wie das Verändern von Variablen oder das Auslösen von Benachrichtigungen durchführen.

Seitens der App müssen eventuell damit verbundene Seiteneffekte speziell behandelt werden! Eine UDF lässt sich analog einer Built-in-Funktion von Power Fx innerhalb einer App nutzen. Im Unterschied zu den Built-in-Funktionen beschränkt sich die Wiederverwendbarkeit einer UDF derzeit auf diejenige App, in der sich auch ihr Quellcode befindet. Zusammen mit den UDFs hat Microsoft UDTs (User-defined Types) als weiteres Experimental-Feature eingeführt – es muss ebenfalls bei den App-Einstellungen aktiviert werden!

Die Definition einer UDF und eines UDTs erfolgt in Power Apps Studio über die Strukturansicht (Tree View) beim Eintrag App. Nach Anklicken dieses Steuerelements befindet sich in der Eigenschaftsliste der Eintrag Formulas. Über diesen öffnet sich die Bearbeitungsleiste für Formeln, um eigene UDFs und UDTs anzulegen. Nach der Anlage von UDTs oder UDFs kennt die Power-Fx-Bearbeitungsleiste diese zur automatischen Code-Vervollständigung. Die Deklaration eigener Datentypen als UDT erfolgt mit dem Type-Konstruktor anhand von gängigen Power-Fx-Datenstrukturen.

So deklariert ProduktBestandsTyp einen eigenen Datentyp ProduktBestandsTyp (Listing 2):

Listing 2: Deklaration eines UDT und einer UDF
// Definition eines UDTs ProduktBestandsTyp 
// (Mehrwertsteuersatz ist eine Prozentangabe)
ProduktBestandsTyp := Type({ProduktID: Text, ProduktName: Text, Preis: Number, Menge: Number, Mehrwertsteuersatz: Number});

// UDF zur Bewertung des Produktbestands fuer die Bilanz
BewertungProduktBestand ( Bestellung: ProduktBestandsTyp ): Number = Bestellung.Preis * Bestellung.Menge;

// Einen Produktbestand anlegen
EinProduktbestand = { ProduktID: "4711", ProduktName: "Parfüm" , Preis: 15.25, Menge: 4, Mehrwertsteuersatz: 0.19 };

// UDT als Datentyp fuer eine Tabelle von Produktbestaenden
BestandsTabelleTyp := Type( [ ProduktBestandsTyp ] );

AktuelleBestandsTabelle = 
  [ { ProduktID: "4711", ProduktName: "Parfüm" , Preis: 15.25, Menge: 4, Mehrwertsteuersatz: 0.19 }, 
    { ProduktID: "2127", ProduktName: "Tomate" , Preis: 1.25, Menge: 212, Mehrwertsteuersatz: 0.07 },
    { ProduktID: "3567", ProduktName: "Hackfleisch" , Preis: 9.25, Menge: 345, Mehrwertsteuersatz: 0.07 } ];

// UDF zur Verarbeitung aller Zeilen einer Tabelle
SortedProduktBestand( BestandsTabelle: BestandsTabelleTyp ): BestandsTabelleTyp = 
    SortByColumns( AktuelleBestandsTabelle, "Preis");
 

Dieser selbst definierte Datentyp steht anschließend für die Programmierung von UDFs zur Verfügung. UDTs dienen auch als Datenstruktur für den Aufbau von typisierten Tabellen. So deklariert BestandsTabelleTyp einen UDT als Datenstruktur für die Verarbeitung ganzer Tabellen. Dieser UDT eignet sich für die Deklaration von Funktionen, die eine Menge von Daten als Tabelle verarbeiten. Als Rückgabewert für eine UDF stehen auch selbst definierte Datentypen (User-defined Types) zur Verfügung (Listing 2).

Neueste Beiträge

DDC hakt nach: Wie kommst Du zu gelebter Agilität?
Viele Teams betreiben nur "Doing Agile" statt echte Agilität zu leben. Dem begegnet Agile-Expertin Ina Einemann in ihrem Workshop auf der .NET Developer Conference 2025 mit kleinen Verhaltensänderungen und praktischen Tools. Im Interview erklärt sie die häufigsten Warnsignale.
4 Minuten
1. Sep 2025
DWX 2026: Vier Tage Sommer. Vier Tage Code. Die DWX ist zurück – und größer denn je - Die Konferenz für AI, Cloud, Web und .NET Development
Du denkst, Mannheim im Sommer ist heiß? Dann hast du den Code noch nicht gespürt. Vom 29. Juni bis 2. Juli 2026 verwandelt sich das m:con Congress Center Rosengarten wieder zur Entwickler-Werkstatt: Die DWX 2026 startet durch!
3 Minuten
28. Aug 2025
DDC hakt nach: Wann führt eine semantische Suche nicht zum Ziel?
Semantische Suche gilt als Schlüsseltechnologie für den Zugang zu unstrukturierten Daten. Doch nicht jede Anwendung profitiert davon – manchmal ist sie sogar reine Geldverschwendung.
7 Minuten
15. Sep 2025

Das könnte Dich auch interessieren

Power Query: Das bessere Query-Tool - Datenzugriff und -verarbeitung mit Power Query
Das leistungsstarke Werkzeug wurde geschaffen, um Daten abzurufen und zu trans­formieren. Im Zusammenspiel mit Visual Studio wird es noch mächtiger.
9 Minuten
Spezielle Formatierungen - Excel-Zellen mit Python formatieren
Die openpyxl-Bibliothek bietet zahlreiche Funktionen, um Zellbereiche einer Excel-Tabelle mit den gewünschten Formatierungen zu versehen.
9 Minuten
Von Excel zu FlexCel - Tabellen mit .NET erstellen
Im Büroalltag gilt Excel als Schweizer Taschenmesser. Die Bibliothek TMS FlexCel befähigt eigene Anwendungen, mit Excel-Tabellen zu arbeiten.
16 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige