Loops & Schleifen in Power Apps

  1. Home
  2. Wissensdatenbank
  3. Microsoft 365
  4. PowerApps
  5. Loops & Schleifen in Power Apps

Dieser Artikel dient als Hilfe, wenn Du als JavaScript-Developer Code-Schnipsel in Power Apps erstellen musst.

In Kürze:
Ein Schleifenkonstrukt wie es aus fast allen Programmiersprachen bekannt ist, sucht man in Power Apps vergeblich. Aber es gibt etwas ähnliches, nämlich ForAll() in Verbindung mit Sequences.

Zur Dokumentation: https://docs.microsoft.com/de-de/powerapps/maker/canvas-apps/functions/function-forall

for (i=0; i<10; i++)
{
//dosomething
}


wird in PowerApps zu

ForAll( Sequence(10), //dosomething )

for (i=10; i>0; i--)
{
//dosomething
}


wird zu

ForAll( Sequence(10,10,-1), //dosomething )

Der Zugriff auf das aktuell prozessierte Element erfolgt mittels ThisRecord.
UpdateContext, Clear und ClearCollect können innerhalb von ForAll nicht verwendet werden.

Sequences sind auf 50.000 Einträge begrenzt.

Beachte:
In deutschsprachigen Umgebungen schliessen Befehle mit „;;“ anstatt „;“. Parameter in Funkionen werden per „,“ anstatt „;“ separiert.

Ursprünglich war der ForAll-Befehl nur dazu da durch Collections durchzuiterieren
und z.B. Updates in der Collection oder Aktionen gegen eine Datenbank ausführen
zu können. Mit der Einführung der Sequence lassen sich nun auch Konstrukte wie in
gängigen Programmiersprachen durchführen, sodass eine Aktion n-mal durchgeführt wird.

Ursprünglich war der ForAll-Befehl nur dazu da durch Collections durchzuiterieren und z.B. Updates in der Collection oder Aktionen gegen eine Datenbank ausführen zu können.

Mit der Einführung der Sequence lassen sich nun auch Konstrukte wie in gängigen Programmiersprachen durchführen, sodass eine Aktion n-mal durchgeführt wird.

Das Iterieren durch eine Collection wäre wie folgt:

Collect(glbCars,[{company:"BMW",amount:1},company:"Volvo",amount:0}]);

ForAll(glbCars,If(ThisRecord.Value.amount>0,Collect(glbCarOrder,ThisRecord.Value)))

Das obige Beispiel iteriert eine Collection von Autos durch, wobei jedes, welches einen amount>0 hat in eine neue Collection überführt wird. Beachte, dass der aktuelle Datensatz per ThisRecord addressiert wird.

Möchte ich aber schlicht und einfach 10 Schleifendurchläufe durchführen, ohne dabei eine Collection als Basis zu nutzen, so hilft die Sequence.

Man kann über Sinn und Unsinn streiten, aber das folgende Beispiel sammelt alle geraden Zahlen von 1 bis 10 in einer Collection:

ForAll(Sequence(10),
If(Mod(ThisRecord.Value,2)=0,
Collect(glbAllNumbers,ThisRecord.Value))
);

Möchtest Du herunterzählen, so musst Du nur die Sequence ändern: 

Sequence(10,10,-1)

liefert 10 Zahlen beginnend mit 10, wobei jede weitere Zahl um 1 kleiner wird:

[10,9,8,7,6,5,4,3,2,1]

Link zu Stefans Blogeintrag: https://stefanriedel.wordpress.com/2021/01/05/loops-schleifen-von-javascript-zu-power-apps/#more-1288

War dieser Artikel hilfreich?

Ähnliche Artikel