Was ist ein Excel-Plugin – und wann ist es...

Read more

Wir expandieren, bringen Kunden und Talente besser...

Read more

Um HTML zum PDF zu konvertieren, werden wir...

Read more

Die Logic Apps-Plattform von Microsoft ermöglicht...

Read more

Du bist neugierig auf aktuelle KI-Technologien und...

Read more

Am 27.09. ab 12.30h starten die vierten QUIBIQ...

Read more

"Das Beste von SAP und Microsoft nutzen": auf dem...

Read more

Azure Bicep wird verwendet, um Ressourcen in Azure...

Read more

In einer Welt, die immer digitaler wird, ist es...

Read more

Dieser Artikel beschreibt wie JSON-Dateien anhand...

Read more

How-to: Logic App Variablen und Foreach Schleifen

In einer Logic App werden häufig Variablen verwendet – entweder für Berechnungen, in Conditions oder zur Unterstützung als Hilfsvariable. Dabei gilt es zu berücksichtigen, dass diese immer zu Beginn der Logic App initialisiert werden und deshalb global pro Run gelten.

 

1.1    Problem / Fragestellung

Wollen wir nun eine Variable in einer foreach-Schleife updaten und verwenden, kann das problematisch werden: Zum einen sind die Variablen nicht im Kontext der Schleife, sondern global. Zum anderen laufen die foreach-Schleifen parallel in 20 Threads, falls nicht anders konfiguriert. Durch diese globalen Variablen und der Parallelität der Schleife sind die Werte nicht im Scope der Iteration, wodurch häufig Werte einer parallelen Iteration verarbeitet werden.

1.2    Lösungsansatz

Es gibt mehrere Lösungsansätze für dieses Problem, alle mit Vor- und Nachteilen. Nachfolgend werden vier Möglichkeiten aufgezeigt.

1.2.1    Synchroner foreach

Die einfachste Lösung ist es, die foreach-Schleife synchron laufen zu lassen. Hierfür findet man in der Schleife unter dem Tab "Settings" "Concurrency Control". Dieser Wert wird aktiviert und der Regler nach 1 verschoben. Der Nachteil ist jedoch die Geschwindigkeit des Runs: Sollten vielen Datensätzen in der Schleife verarbeitet werden, dauert dies nun massiv länger, als parallel, weshalb sich diese Möglichkeit nur dann eignet, wenn eine begrenzte Anzahl Daten verarbeitet werden muss oder die Performance nicht allzu wichtig ist. 

Abbildung 1: Synchrone Schleife

 

1.2.2    Compose

Anstelle einer Variable, kann alternativ auch eine Compose Action innerhalb der Schleife verwendet werden. Diese wird nur im Scope der einzelnen foreach-Iteration initialisiert. Sollte jedoch eine Condition mit Logik zum Setzen des Wertes in der Schleife verwendet werden, funktioniert dieser Ansatz wiederum nicht.
 

Abbildung 2: Compose

1.2.3    Ausbau in eigenen Workflow

Eine weitere Möglichkeit ist der Ausbau der gesamten Schleifen-Logik in einen eigenen Workflow. Es können die Werte dann in der Schleife via "Invoke process"-Action übergeben werden. Variablen, welche dann in diesem eigenen Schleifen-Workflow initialisiert und upgedatet werden, gelten jetzt auch nur im eigenen Run und deshalb in der einzelnen Iteration. Diese Lösung hat, technisch gesehen, keine Nachteile. Es kann aber viel Aufwand bedeuten, die gesamten Logik auszubauen. Außerdem müssen beim Monitoren nun statt einem, zwei Workflows überprüft werden.


Abbildung 3: Aufruf Workflow

1.2.4    Inline Expressions

Diese Lösung eignet sich vor allem für den Fall, dass die Variablen mithilfe einer Condition in der Schleife updated werden. Anstelle einer Condition und dem Setzen der Variable, kann dies direkt in der Action, welche den Wert benötigt, via Inline Expression gemacht werden.

Der größte Nachteil hier ist die Übersichtlichkeit des Workflows. Vor allem beim Monitoring eines Runs, anstelle einer klaren Condition, mit sichtbarem Resultat, versteckt sich das Resultat der Condition jetzt in einem Feld.

Mit der ursprünglichen Condition ist der Aufbau klar verständlich:


Abbildung 4: Condition

Die folgende Expression wird in einer Action gesetzt, in welcher ursprünglich die Variable verwendet wurde. Die Überprüfung ist dabei identisch der vorigen Condition. Somit werden die Werte direkt im Feld der Action gesetzt. Die Übersicht des Workflows leidet aber durch die Inline Expression, was das Monitoren erschweren kann.
 



1.3    Fazit

An sich sind alle Lösungen valide. Es muss jedoch überprüft werden, wie viele Datensätze verarbeitet werden, ob eine Condition in der Schleife ausgeführt werden muss, wie wichtig die Performance ist und wie viel Logik sich innerhalb der Schleife befindet. Auch das zukünftige Monitoring der Logic App muss berücksichtigt werden.

Dies ist ein Beitrag von Patrick Hettich, Lead Developer D5, QUIBIQ Schweiz AG

 

© QUIBIQ GmbH · Imprint · Data protection