Loops / Schleifen: Von JavaScript zu 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.

Weiterlesen

Arrays: Von JavaScript zu Power Apps

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

In Kürze:
Die Arrays in JavaScript entsprechen in PowerApps den Collections.

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

Elemente einer Collections lassen sich nicht direkt per Index ansprechen.
Eine Collection ist global verfügbar, also nicht wie eine Kontextvariable auf einen Bildschirm beschränkt.
Die Einträge einer Collection sind nicht eindeutig. Es kann also Doubletten geben.
Collect(glbCars,{manufacturer:“Opel“,model:“Admiral“}) fügt Datensatz der Collection hinzu. Existiert die Collection noch nicht, so wird sie angelegt.
Eine Array of String: Collect(glbCars,[„BMW“,“Volvo“,“Opel“])
Clear(Name) leert eine Collection.
ClearCollec(Name,“…“) leert zunächst eine Collection und fügt dann ein Element hinzu.

Element an einer bestimmten Position auslesen:
Last(FirstN(Name,x)) liest das N-te Element einer Collection

Teilmengen einer Collection
Last(Name) liest das letzte Element einer Collection
First(Name) liest das erste Element einer Collection
LastN(Name,3) liest die letzten 3 Elemente einer Collection
FirstN(Name,3) liest die ersten Elemente einer Collection

Löschen eines Elements
Remove(Name,Last(glbCars)) löscht das letzte Element des Arrays von Autos, was in JavaSCript einem Pop() entspricht.

Aktualisieren
Update(Name,oldRecord,newRecord,[All]) aktualisiert einen Datensatz, wobei der Datensatz des ersetzenden Eintrags als kompletter Datensatz angegeben werden muss. Wenn [All]=true, werden alle gleichen Datensätze aktualisiert.

Anzahl Elemente
CountRows(Name)

Weiterlesen

Power Apps: Setzen von Eigenschaften an Steuerelementen

Dieser Artikel beschreibt das Vorgehen, wenn ich in Power Apps Canvas Apps eine Eigenschaft eines Steuerelements, z.B. die Farbe eines Buttons setzen möchte.

Eine direkte Zuweisung von Werten im Sinne von Button.Fill=Red, wie man es von gängigen Programmiersprachen kenn, ist nicht möglich. Stattdessen arbeite ich mit Variablen, die ich im Design-Mode der gewünschten Eigenschaft zuweise:

Aus

wird

wobei die Variable locButtonColor (Der Name entspringt meiner Phantasie) durch ein Ereignis gesetzt wird. Solch ein Ereignis kann z.B. sein:

Der Bildschirm wird sichtbar: Screen.OnVisible
Ein Button wird geklickt: Button.OnSelect

Ein Beispiel für eine Implementierung im OnVisible Event eines Bildschirms wäre:

Das Ergebnis:

Sobald der Bildschirm sichtbar wird, wird die Variable, die für die Button-Farbe zuständig ist deklariert und initialisiert. Da diese Variable auch als Input für die Fill-Eigenschaft des Button definiert wurde, färbt sich der Button Rot.

Power Platform Wörterbuch

Das ist ein kleines Projekt, das jedem helfen soll, der mit Power Apps oder Power Automate auf verschiedensprachigen Oberflächen unterwegs ist. Manchmal sind die Übersetzungen ins deutsche so skuril, dass man einfach nicht darauf kommt….

Es ist erst der Anfang, wird aber stetig wachsen! Versprochen!

Da ich dieses Projekt nur an einer Stelle pflegen möchte, findet ihr die Übersetzungen an dieser Stelle:

https://stefanriedel.wordpress.com/2020/10/08/power-platform-dictionary/.

Findet ihr Fehler, so schreibt mich gerne an:
linkedin: https://www.linkedin.com/in/stefan-riedel-mvp-815b87/
oder twitter: https://twitter.com/PapaRiedel

Power Platform Dictionary

This is a little project that should help everyone who has to use the power platform in different languages beacause sometimes you will need a lot of time to search for a connector for example.

It will grow within the next weeks so stay tuned!

Home page: Left menu.

ENDETodo
StartHome
Action ItemsAktionselementex
ApprovalsGenehmigungen
Business Process FlowsGeschäftsprozessflows
My FlowsMeine Flows
CreateErstellen
TemplatesVorlagen
ConnectorsConnectors
DataDaten
EntitiesEntitäten
ConnectionsVerbindungen
Custom connectorsBenutzerdefinierte Connectors
GatewaysGateways
AIBuilderAIBuilder
BuildBuildx
ModelsModelle
SolutionsProjektmappen
LearnWeitere Informationenx

The following table is a list of the Flow actions grouped by connectors

Connector (Data Operation / Datenvorgang)

EN: Data Operation
DE: Datenvorgang

ENDETodo
ComposeVerfassen
Create CSV tableCSV-Tabelle erstellen
Create HTML tableHTML-Tabelle erstellen
Filter arrayArray filtern
JoinBeitretenx
Parse JSONJSON analysieren
SelectAuswählen

Connector (Control / Steuerung)

EN: Control
DE: Steuerung

ENDETodo
ConditionBedingung
Apply to eachAuf alle anwenden
Do untilWiederholen bis
ScopeBereich
SwitchWechselnx
TerminateBeenden

Connector (Common Data Service (current Environment) / Common Data Service (aktuelle Umgebung))

EN: Common Data Service (current Environment)
DE: Common Data Service (aktuelle Umgebung)

ENDEToDo
Create a new recordNeuen Datensatz erstellen
Delete a recordDatensatz löschen
Get a recordDatensatz abrufen
Get file or image contentDatei- oder Bildinhalte abrufen
List recordsDatensätze auflisten
Perform a bound actionGebundene Aktion ausführen
Perform an unbound actionUngebundene Aktion ausführen
PredictVorhersage
Relate recordsDatensätze verknüpfen
Unrelate recordsDatensatzverknüpfung aufheben
Update a recordDatensatz aktualisieren
Upload file or image contentDatei- oder Bildinhalt hochladen
Executes a changeset requestFührt eine Changeset-Anforderung aus

If you find some issues please contact me under
linkedin: https://www.linkedin.com/in/stefan-riedel-mvp-815b87/
or twitter: https://twitter.com/PapaRiedel

Power Apps: A brief description of the new „Measure in MR“ Feature

Deutsche Version: https://wp.me/p3Vyfd-in

We have recently found the menu items for using Mixed Reality in our Power Apps Editor:

Even if I only deal with the Measure in MR in this post, I would still like to briefly outline what Mixed Reality (MR) is all about. A detailed description of the other functionalities is covered in one of my following articles.

First of all, it is noticeable that it is a preview feature.This means that there may still be changes to the scope of functions, which is why productive use should not be used or at least it should be well monitored.

What is MR all about?

Mixed Reality allows digital content to be mixed with my environment, the reality. The digital content is, for example a 2D or 3D object that is placed over the camera image of my device in order to simulate what my digital object would look like „in real“.

The corresponding documentation by Microsoft you can find here.

View In MR
Here I have the option of lay 2D and 3D objects, which I need to have digitally available, over my surroundings, i.e. placing them over the camera image, as I have described above.

View Shape in MR
This function lets me create a volume object (e.g. a cuboid) that I can place over my camera image as above. This way I can film an area and check whether an object of a certain size could fit there.

Measure in MR
That is today’s topic. This is about measuring lengths based on my camera image.

Use case of Measure in MR

An excellent application scenario is the preparation of offers by craftsmen, who with this feature can quickly take a very precise measurement and have an offer drawn up automatically.

OK! Let’s go!

If I now select a screen in my app and select the Measure in MR function, a button appears that starts the actual function on my device. I decided to position this control at the bottom of the screen .:

If I want to use this function in the design mode of my app, I first get an error message reminding me that I can only execute this function on a device, but not in the browser:

Let’s come to the setting options

I can use the Text property to influence the text that is to be displayed on the control

The Display type controls whether I want to see the text, the icon and the text or just the icon:

Now let’s get to the two most important properties of this control:

Unit of measurement
As a reminder: This function is used to measure sizes. This property allows us to specify the size, i.e. centimeters, feet, inches or meters:

Measurement Typ
This property now has an impact on the result, namely the type of object that I want to measure. You can choose between areas, areas and volumes, distances or just volumes.

Example 1: Distances

Short note: Due to the complexity, I am dividing the other three configuration options into three further articles.

So this example shows the measurement of distances. If I start this function by clicking on the button, I see the camera image and start analyzing the surface in order to get clues for the distances within the image. A police car from my childhood serves as the target:

The more structured the surface, the better the result. The app uses the dots in the picture to indicate which area it has captured for measurement. By clicking on the plus symbol, a starting point and an end point can now be selected.

If you have read carefully, you will have noticed that i had not specify a reference measurement or something! The recognition of the distances is happening automatically!

By clicking on the camera, I can now photograph the measurement and transfer it to the original screen.

To visualize the data, I add a Data table (Datentabelle in german environments) to my screen and a Gallery (Katalog in german Environments) to display the photos:

I now set the Items property with MeasureInMR1.Measurements that stores the measuerments i have made in my app.

Now I have to select the columns that I want to display and I’m done with the table.

We come to the catalog. Here I choose a standard catalog, vertical with image, which I insert below the table.

As Datasource i choose MeasueInMR1.Photos:

And the Image property of the picture will be set to ThisItem.ImageURL.

After republishing the app i can start to measure the world… or two LEGO-Models:

After pressing the camera symbol, i can submit my data (with the picture) back to my Screen:

The measurements as well as the picture that I took via my app were taken over perfectly and are now available for further processes.

The measurement of areas and volumes takes place in the next part of the series on mixed reality.

I am happy to receive suggestions for improvement on Twitter (@PapaRiedel) or LinkedIn.

Good luck 🙂

Power Apps: Ein kurzer Blick auf die Preview des Features „Measure in MR“

English translation https://wp.me/p3Vyfd-jl!

Seit kurzem finden wir in unserem Power Apps Editor die Menü-Punkte für die Benutzung der Mixed Reality:

Auch, wenn ich in diesem Post nur auf das Measure in MR eingehe, so möchte ich dennoch kurz abreißen, was es mit der Mixed Reality (MR) auf sich hat. Eine detaillierte Beschreibung der anderen Funktionalitäten werden in einem der folgenden Artikel behandelt.

Zunächst einmal fällt auf, dass es sich um eine Preview handelt. Das heißt es kann noch Änderungen am Funktionsumfang geben, weshalb von einem produktiven Einsatz abzusehen oder dieser zumindest gut überwacht ablaufen sollte.

Was hat es mit der MR überhaupt auf sich?

Die Mixed Reality erlaubt es digitale Inhalte mit meiner Umgebung, der Reality, zu verknüpfen. Die digitalen Inhalte sind zum Beispiel 2D oder 3D-Objekte, die über das Kamera-Bild meines Geräts gelegt werden, um zu simulieren, wie mein digitales Objekt „in Echt“ aussehen würde.

Den passen Post von Microsoft gibt es hier.

View In MR
Hier habe ich die Möglichkeit 2D und 3D-Objekte, welche ich digital zur Verfügung haben muss, mit meiner Umgebung zu verknüpfen, also über das Kamera-Bild zu legen, wie ich es oben beschrieben habe.

View Shape in MR
Diese Funktion lässt mich einen Volumen-Objekt erstellen, welches ich wie oben über mein Kamera-Bild legen kann. So kann ich einen Bereich filmen und überprüfen, ob ein Objekt mit einer bestimmten größe dort Platz hätte.

Measure in MR
Das ist das heutige Thema. Hierbei geht es um das Messen von Längen auf Basis meines Kamerabilds.

Einsatzszenario von Measure in MR

Ein hervorragendes Einsatzszenario ist die Angebotserstellung durch Handwerker, die mit diesem Feature schnell ein sehr genaues Aufmaß, und daraus automatisch ein Angebot erstellen lassen können.

Also los!

Wähle ich nun einen Bildschirm meiner App und wähle die Funktion Measure in MR, so erscheint ein Button, über den die eigentliche Funktion auf meinem Gerät gestartet wird. Ich habe mich entschlossen dieses Steuerelement unten auf dem Bildschirm zu positionieren.:

Möchte ich diese Funktion im Design-Modus meiner App anwenden so bekomme ich zunächst eine Fehlermeldung, die mich daran erinnert, dass ich diese Funktion ausschließlich auf einem Device, nicht aber im Browser ausführe kann:

Kommen wir zu den Einstellmöglichkeiten

Über die Text-Eigenschaft kann ich den Text beeinflussen, der auf dem Steuerlement zur Anzeige kommen soll

Der Display Type steuert, ob ich den Text, das Icon und den Text oder nur das Icon sehen möchte:

Kommen wir zu den beiden wichtigsten Eigenschaften dieses Steuerelements:

Unit of measurement
Zur Erinnerung: Diese Funktion dient dem Messen von Größen. Diese Eigenschaft erlaubt uns die Möglichkeit das Maß vorzugeben, also Zentimeter, Fuß, Inches oder Meter:

Measurement Typ
Diese Eigenschaft hat nun Einfluss auf das Ergebnis, nämlich den Objekttypen, den ich messen möchte. Zur Auswahl stehen Flächen, Flächen und Volument, Strecken oder nur Volumen.

Beispiel 1: Distances

Kurze Anmerkung: Auf Grund der Komplexität verteile ich die anderen drei Konfigurationsmöglichkeiten auf drei weitere Artikel.

Dieses Beispiel zeigt also das Abmessen von Strecken. Starte ich diese Funktion durch Klick auf den Button, so sehe ich das Kamerabild und beginne das Analysieren der Oberfläche, um Anhaltspunkte für die Abstände innerhalb des Bildes zu bekommen. Als Ziel dient hier ein Polizeiauto meiner Kinderzeit:

Je strukturierter die Oberfläche desto besser ist das Ergebnis. durch die Punkte im Bild zeigt die App an, welchen Bereich sie zum Abmessen erfasst hat. Durch Klick auf das Plus-Symbol, kann nun ein Startpunkt und Endpunkt ausgewählt werden.

Dem aufmerksamen Leser wird aufgefallen sein, dass ich hier keine Referenz-Strecken definieren musste. Die Erkennung der Abmessungen geschieht automatisch!

Durch einen Klick auf den Photoapparat, kann ich nun die Messung photographieren und mittels „Übermitteln“ an den Ursprungs-Bildschirm übermitteln.

Um die Daten zu visualisieren, füge ich noch eine Datentabelle (Data Table in englischen Umgebungen) in meinen Bildschirm ein und einen Katalog (engl. Gallery, um die Photos anzuzeigen:

Die Items-Eigenschaft besetze ich nun mit MeasureInMR1.Measurements, also den Abmessungen, die über das Steuerelement gemacht worden sind.

Nun muss ich noch die Spalten auswählen, die ich anzeigen möchte. Nun ich bin mit der Tabelle fertig.

Kommen wir zum Katalog. Hier wähle ich einen Standardkatalog, Vertikal mit Bild, den ich unterhalb der Tabelle einfüge.

Als Datenquelle wähle ich nun MeasueInMR1.Photos:

Und für die Image-Eigenschaft des Bildes ThisItem.ImageURL.

Nach der erneuten Veröffentlichung kann ich also erneut Messen gehen:

Nach einer Aufnahme sowie dem Klick auf Übermitteln schliesst sich diese Ansicht und zeigt meinen Ausgangsbildschirm:

Die Messpunkte sowie das Bild, welches ich von der Messung geschossen habe wurden einwandfrei übernommen und stehen nun für weitere Prozesse zur Verfügung.

Die Messung von Flächen und Volumen erfolgt im nächsten Teil der Serie zur Mixed Reality.

Verbesserungsvorschläge nehme ich gerne per Twitter (@PapaRiedel) oder LinkedIn entgegen.

Viel Freude damit!

Search for Office 365 Groups by using Arrays in Power Automate Flow

Die deutsche Version: https://wp.me/p3Vyfd-hJ

A customer asked me why there is no way to search data in Flow. You constantly have to iterate through the output of a connector and compare each data record until you have found the right one.

In the following more detailed blog post i show how it works for the calendar id: https://stefanriedel.wordpress.com/2020/09/27/using-the-array-filter-in-flow-to-search-for-data/

The whole thing ultimately works with all connectors that return a JSON array, including, as in this example, with groups:

Why is that so cool?

Very simple: Since the connectors usually do not provide a search option, the easiest way was to iterate through the result until you find the desired element.

This option makes everything a little clearer and faster to execute.

If you have any questions and / or comments, I am always available at @PapaRiedel on Twitter.

Have fun!





Using the Filter Array Activity in Flow to search for data.

Deutsche Version: https://wp.me/p3Vyfd-ha

A customer asked me why there is no way to search data in Flow. You constantly have to iterate through the output of a connector and compare each data record until you have found the right one.

The Problem

Then I remembered how awkward I found it to be to set an appointment in the calendar of the executing user.

As a reminder: the connector for creating an event would like to have a CalendarID, which is usually not available.

Weiterlesen