CONNECTED Conference 2023 - Aufzeichnungen jetzt hier verfügbar +++                     

Suche

über alle News und Events

 

Alle News

 

Rules, Rules, RULES!! Dan Toomey, The evolution of...

Weiterlesen

Keynote von Slava Koltovich, Feature: E2E - AIS...

Weiterlesen

Inspirierende Messeerfahrungen auf der 'Zukunft...

Weiterlesen

In diesem Artikel wird beschrieben, wie ihr eure...

Weiterlesen

Messaging mit dem Service Bus ermöglicht die...

Weiterlesen

Sebastian Meyer, Microsoft & SAP...

Weiterlesen

Für Entwickler, Architekten, Projektleiter und...

Weiterlesen

In der Welt der Softwareentwicklung ist die...

Weiterlesen

QUIBIQ spendet für den guten Zweck – und für...

Weiterlesen

Eine bestimmte Antwort auf einen HTTP Request zu...

Weiterlesen

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

 

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz