Externe Services in Power Apps und Power Automate nutzen: Teil 3

Dies ist der 3. Teil einer dreiteiligen Serie, welche die Nutzung von externen Services in Power Apps und Power Automate zeigt:

Im vorigen Beitrag, habe ich beschrieben, wie man einen Custom Connector in Power Apps definieren kann. Nun sind wir in der Lage diesen in einer Power Apps zu nutzen.

Verbindung zur Power App hinzufügen

Um unseren Custom Connector im Power Apps Studio einzubinden, können wir in gleicher Weise vorgehen, wie auch mit jedem anderen Konnektor: Datenverbindungen anklicken -> Add Data -> Nach Konnektor suchen und anklicken:

PowerApps Custom Connector Add New1

Danach über + Add a connection, die Verbinung erstellen:

PowerApps Custom Connector Add New2

Da wir einen API Key verwenden, muss man diesen nun auf der rechten Seite angeben. Danach wird die Verbindung per Klick auf Connect aktiviert:

PowerApps Custom Connector Add New3

Die Beispiel- / Test-Anwendung

Um den neuen Konnektor zu testen, verwenden wir dir folgende Oberfläche:

PowerApp Example

Aktionen des Konnektors aufrufen

Über unseren Custom Connectotor können wir nun auf die Kurse zugreifen. Exemplarisch nutzen wir die Aktion GetLatestBySymbols. Je nachdem, was wir gerne nutzen wollen, können wir direkt auf Werte zugreifen, oder auch eine Collection füllen. Durch die Unterstützung von Intellisence kann man sehen, was alles zur Verfügung steht. Nach dem Konnektornamen und einem Punkt werden die verfügbaren Funktionen angezeigt:

Intellisense

Selektiert man beispielsweise GetLatestBySymbols, werden danach die notwendigen Parameter angezeigt:

GetLatesBySymbol

Als erstes ist die base notwendig. Dort kann man entweder Default eintragen oder das Kürzel eines Basiskurses. In unserem Beispiel setzen wir den Inhalt der entsprechenden Textbox ein und dahinter ein Komma:

GetLatesBySymbol Parameters

Hinweis: Wenn man mit der deutschen Oberfläche des Power App Studios arbeitet, muss statt einem Komma ein Semicolon verwendet werden.

Der nächste Parameter sind die Symbols. Auch hier verwenden wir den Inhalt einer Textbox:

GetLatesBySymbol Full Call

Das wäre ein gültiger Aufruf der Funktion GetLatestBySymbols. Aber eigentlich wollen wir natürlich mit dem Ergebnis, welches die Funktion zurückliefert arbeiten.

Was genau zurückkommt, kann man entweder beim Testen des Custom Connectors sehen, oder auch in Postman:

Response Postman

Uns interessieren die rates, die wiederum unter response zurückgeliefert werden. Deshalb schreiben wir hinter unserer Funktion mit einem Punkt weiter und wählen dann response für den Zugriff auf das Ergebnis:

Formular Response

Danach geht es weiter mit den rates:

Formular Response Rates

Und danach auf einen zurückgelieferten Kurs:

Formular Response Rates Value

Der Nachteil an dieser Methode, ist bei mehreren Textboxen, dass jedes Mal ein Aufruf der Funktion notwendig ist und dies kann sich durchaus in der Performance erheblich bemerkbar machen.

Wir holen uns deshalb in unserem Beispiel alle Ergebnisse und legen Sie in einer Variable ab (reatesResult):

Formular Response Rates Variable

Der Datentyp der Variable ist dabei ein Record:

Variable Type Record

Um eine Textbox mit den erhaltenen Werten zu füllen, reicht dann der Zugriff auf die Variable:

Variable Usage

Ähnlich funktioniert der Aufruf der Convert Funktion:

Convert Function

Hier gibt es allerdings noch etwas zu beachten: In Postman hatte ich für die Funktion Convert das HTTP Header Attribut Accept gesetzt:

Convert Function Header Accept

Das ist bei REST Aufrufen oft notwendig. In unserem Fall wäre es nicht notwendig. Ich wollte es aber exemplarisch zeigen. Da wir die Postman Collection importiert haben, ist dieser Parameter nun auch in unserem Custom Connector verfügbar. Man könnte also das HTTP Attribut anders setzen. Möchte man mit dem Standardwert arbeiten, der gesetzt ist, kann man das Schlüsselwort Default benutzen (wie in der obigen Formel zu sehen).

Das Ergebnis dieses Aufrufs ist im Rückgabewert Response enthalten.

Durch das Setzen der Variablen und Zuweisen zu einem Textwert von einer Textbox, werden die Werte entsprechend dargestellt:

App Test with custom connector

Troubleshooting

Gerade bei der Verwendung von Custom Connectors kommt es des Öfteren vor, dass man während der Entwicklung der App nicht die erwarteten Werte zurückbekommt. Dies kann verschiedene Ursachen haben:

  • Aufrufparameter sind nicht korrekt
  • Der aufgerufene Dienst ist nicht verfügbar
  • Falscher Zugriff auf die Rückgabewerte

Um hier bessere Möglichkeiten für die Fehleranalyse zu haben, kann man sich das erhaltene JSON Ergebnis anzeigen lassen. Hierzu bietet Power Apps die Funktion JSON an, mit der man das erhaltene Ergebnis zurück in JSON verwandeln kann. Im ersten Parameter wird dabei der zurückgelieferte Record bzw. das Objekt angegeben.

Convert to JSON

Im 2. Parameter kann man die Formatierung angeben. Die Umwandlung in JSON ist deshalb notwendig, weil vom Custom Connector ein Objekt vom Datentyp Record zurückgeliefert wird und nicht ein Text. Die Variable RatesCurrencyscoopJSON kann nun der Texteigenschaft einer Textbox zugewiesen werden. Man sieht dann das erhaltene JSON und kann es weiter analysieren:

Convert to JSON2

Eine weitere sehr gute Möglichkeit, zu analysieren, was schief läuft ist die Nutzung des noch nicht allzu lange verfügbaren Monitors von Power Apps:

Power Apps Monitor1

Nachdem man den Monitor geöffnet hat, geht man einfach zurück zu seine App und startet diese. Der Monitor zeichnet dann alle Aktionen auf, die in der App ablaufen, unter anderem auch die Kommunikation, die über den Custom Connector laufen.

Ein Beispiel für die Fehlersuche wäre, dass man beispielsweise die gewünschten Währungen aus Versehen mit einem Leerzeichen hinter dem Komma aufruft:

Error Example1

Im zurückgelieferten JSON lässt sich nicht erkennen, warum das schief geht. Der Wert für USD wird eben einfach nicht zurückgeliefert:

Error Example2

Hier hilft einem der Power Apps Monitor sehr gut weiter. Nach der Ausführung der App kann man in den Daten nachsehen, was tatsächlich zurückgeliefert wurde:

Power Apps Monitor2

Wenn man nun den data Knoten öffnet und weit nach unten rollt, kann man erkennen, dass nicht das Feld USD zurückgeliefert wird, sondern USD mit einem davorstehenden Leerzeichen. Und diesen Kurswert gibt es eben schlichtweg nicht:

Power Apps Monitor3

Entfernt man das Leerzeichen hinter dem Komma/vor USD, dann kommen die Ergebnisse korrekt zurück:

Power Apps Monitor4

Fazit

REST Dienste können relativ einfach in Power Apps und auch Power Automate mit Hilfe eines Custom Connectors integriert werden. Am Anfang steht jedoch immer die Analyse der entsprechenden REST Schnittstelle. Postman ist dazu ein sehr hilfreiches Tool. Auch wenn es darum geht, die REST Schnittstelle als Custom Connector umzusetzen. Wenn man Glück hat bietet der Anbieter des REST Dienstes eine OpenAPI Schnittstellen Definition an. Das erleichtert einiges.

In unserem Beispiel mit den Währungskursen gibt es eine Unschönheit der Schnittstelle: Die Ergebnisse werden einzelner Datensatz mit den Feldnamen der jeweiligen Währung. Es ist dadurch nicht möglich, flexibel anhand des Währungskürzels auf den Wert zuzugreifen. Man muss bereits zum Entwicklungszeitpunkt festlegen, welches Feld man möchte:

Records Result1

Das liegt daran, wie die Werte im JSON zurückgeliefert werden:

Records Result2

Hätte das JSON ein anderes Format, könnte man mit einer Collection von Werten arbeiten und der Zugriff wäre dann zur Laufzeit über das Kürzel der Währung möglich. Das wäre beispielsweise möglich, wenn das JSON wie folgt aussähe:

Converted JSON

Power Apps bietet für eine etwaige Umwandlung allerdings keine Funktionen an. Im Web findet man Beiträge, die JSON Umwandlungen mit Hilfe von Power Automate machen. Für einfache Umwandlungen geht das zumeist. Kann aber auch sehr aufwendig und unübersichtlich werden. Für unseren Fall gibt es aus meiner Sicht keine gute Möglichkeit die Umwandlung in Power Automate zu machen. Mit einer Azure Function geht das wiederum oft sehr einfach mit nur wenigen zeilen Code. Ich werde deshalb in einem späteren Post zeigen, wie man eine solche Umwandlung mit Azure Functions erstellt und wie man diese dann aus Power Apps aufruft.

0 Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert