Lessons learned from a consultation on a Power Pages project

A customer wants to map a supplier process using Microsoft Power Pages. I was asked to advise on how it all works and what needs to be taken into account. The application is simple at first, but is very complex in itself. Essentially, it is about a supplier being able to give you feedback on whether all the materials have been delivered by the customer. The supplier also announces its deliveries, including the creation of delivery notes. All data is originally in SAP and some of it needs to be transferred to Dataverse.

The customer has a very good IT department and therefore needed targeted and in-depth advice on Power Pages. These points are certainly interesting for anyone who wants to work with Power Pages.

Dataverse is not a SQL database

A key factor in the success of a Power Pages project is the data structure in the Dataverse. Although the Dataverse is ultimately provided by a database server, it is not a „classic“ SQL database. There are no views that span multiple tables, no stored procedures, and no SQL as a query language. Instead, each table has a ready-made form, ready-made relationships, and views for the data. „Translating“ an SQL solution into a Dataverse solution can be complicated.

For the customer, part of the existing SQL solutions were transferred one-to-one into the Dataverse via virtual tables and another part was redesigned in the Dataverse.

Power Pages is not low-code

Power Pages has the Power Pages Studio. In this I can create pages with a WYSIWYG editor, make Dataverse tables available on the Internet and even enter or change data there. Just like that, with a click. But that’s not enough.
These -real- low code solutions are usually not sufficient. Often they are too inflexible or simply lack options. As soon as you go a little deeper, you quickly get to Liquid. This is a dynamic language that is used to control pages in Dataverse. This is no longer low code, you have to be able to program here. You will also have to work relatively quickly with JavaScript. A precise analysis of the requirement shows what is necessary here.

Permissions in Power Pages

Permissions in Power Pages differ significantly from permissions in the Dataverse. The design of the permissions must be taken into account when designing the data structure. Most users who will log into Power Pages will probably be users from the Contacts table. If these contacts are to access specific records, these records must have a relationship to the Contacts table. Otherwise, assigning records and users becomes very difficult.

Conclusion

These few points show how complex a project to introduce a Power Page portal can be. If you have any questions about this topic or would like to see a portal in action, just write to me. Experiences from a recently completed consultation on a Power Pages project

Daten anlegen, ändern und löschen mit PowerApps


Dieser Blogartikel ist Teil einer Serie über das Erstellen von PowerApps. Weitere Artikel finden Sie hier:

1.            Arbeiten mit PowerApps – Grundlagen
2.            Grundlagen von PowerApps Komponenten und PowerApps Studio

Die beiden vorherigen Artikel haben sich mit den Grundlagen von PowerApp und deren Komponenten beschäftigt. Dabei wurden die ersten Teile einer PowerApp für ein einfaches Bestellwesen entwickelt. Dieser Artikel beschreibt das weitere Vorgehen und erweitert die vorher erstellte PowerApp.

Im aktuellen Stand haben wie der PowerApp eine Datenverbindung zu SharePoint hinzugefügt und einen Datentabelle sowie ein Formular zum Bearbeiten der einzelnen Datensätze eingefügt.

Die nächsten Aufgaben wären jetzt die Änderungen in die Datenquelle zurückzuschreiben, neue Einträge in der Datenquelle zu erstellen sowie vorhandene zu löschen. Wir benötigen dazu zuerst drei Schaltflächen, eine für das Speichern von Änderungen, eine um einen neuem Eintrag zu erstellen und eine zum Löschen. Klicken Sie dazu im Ribbon auf Einfügen und auf Schaltfläche.

Platzieren Sie die Schaltflächen unterhalb des Formulars. Wenn Sie eine Schaltfläche anklicken, können Sie in der Eigenschaft Text die Beschriftung ändern. Es bietet sich außerdem an den Schaltflächen einen selbst beschreibenden Namen zu geben.

Neue Daten anlegen

Damit ein Speichervorgang ausgeführt wird, muss die Datenquelle auf den Klick der Schaltfläche Neuer Eintrag reagieren. Dies erfolgt über eine Formel, welche der Schaltfläche in der Registerkarte Erweitert in der Eigenschaft OnSelect mitgegeben wird. Es gibt mehrere Formeln, welche dazu verwendet werden können einen neuen Wert in einer Datenquelle zu speichern.

Die erste Möglichkeit ist die Formel NewForm(Name des Formulars). In meinen Fall wäre dies

NewForm(Form1).

Dieses Format hat allerdings Probleme, wenn Sie im gleichen Formular Einträge ändern und neue Einträge erstellen. Daher ist die bessere Alternative, die Formel Collect zu verwenden. Die Formel besteht aus dem Format:

Collect(Datenquelle, Element, … )

wobei Element eine Aufzählung ist welche Felder in der Datenquelle mit welchem Wert gefüllt werden. Die Auflistung hat dabei das Format {Name des Felds in der Datenquelle:Wert eines Feldes in der PowerApp;}
In unserem Fall würde also die Formel wie folgt aussehen. Diese Formel tragen wir in die OnSelect Eigenschaft der Schaltfläche Neuer Eintrag ein.

Collect(Bestellungen;{Title:DataCardValue1.Text;Menge:Value(DataCardValue2.Text);Beschreibung:DataCardValue3.Text})

Die Felder welche wir in der Funktion angeben, DataCardValueX, sind die Felder welche die Werte im Formular enthalten. Diese Felder werden in PowerApp Karten genannt. Sie können die Namen der Felder/Karten in der Übersicht links finden, indem Sie einfach die Datenfelder des entsprechenden Formulars erweitern.

Wenn ein neuer Wert einer Datenquelle hinzugefügt wird, wird diese automatisch aktualisiert. Damit wird der neue Wert auch gleich in der Datentabelle angezeigt.

Achtung: Die Funktion Collect prüft nicht, ob die Datenquelle welche Sie angeben wirklich existiert. Wenn Sie also z.B. einen Schreibfehler haben, wird die Funktion ohne Beanstandung ausgeführt, Sie erhalten allerdings keinerlei Ergebnis oder Fehler.

Damit wir nach jeden Eintrag wieder leere Eingabefelder haben und das Formular zurücksetzen, ergänzen wir die Formel oben um ;;NewForm(Form1);;ResetForm(Form1). Dabei verbindet ;; zwei Formeln miteinander. Die komplette Formel wäre also

Collect(Bestellungen;{Title:DataCardValue1.Text;Menge:Value(DataCardValue2.Text);Beschreibung:DataCardValue3.Text});;NewForm(Form1);;ResetForm(Form1)

Vorhandene Daten aktualisieren

Vorhandene Daten zu aktualisieren ist einfacher. Editieren Sie die Schaltfläche zum Aktualisieren wie schon oben beschrieben und benennen diese mit Speichern. In der OnSelect Eigenschaft können wir jetzt aber nicht mehr die Collect Funktion verwenden, sondern einfach SubmitForm(Name des Formulars). In meinen Fall wäre dies

SubmitForm(Form1)

Wenn Sie einen Datensatz in der Tabelle anklicken, erscheint dieser im Formular. Ändern Sie die Werte entsprechend und klicken Sie dann auf den Button.

Vorhandene Daten löschen

Um vorhandene Daten zu löschen, editieren Sie die dritte Schalfläche und ändern die Beschriftung in Löschen. Fügen in der OnSelect Eigenschaft der Schaltfläche die folgende Formel ein.

Remove(Bestellungen;DataTable1.Selected)

Dabei ist Bestellungen die Datenquelle und DataTable1.Selected der ausgewählte Datensatz in der Datentabelle.

Haben Sie diese Anforderung schon einmal gehabt? Oder eine andere Frage? Dann schreiben Sie einen Kommentar!

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular oder schreiben Sie einen Kommentar.

Sie wollen mehr über meine Leistungen erfahren? Dann klicken Sie hier.