Kategorien-Archiv Power Apps

PowerApps: Attachments als Pflichtfeld

Leider prüft Microsoft PowerApps bei Attachments zu SharePoint-ListItems nicht, ob dieses als Pflichtfeld behandelt werden soll oder nicht. Es gibt schlicht keine Möglichkeit in SharePoint, dieses irgendwo zu konfigurieren.

Hier hilft eine einfache PowerApps Formel, zum Beispiel beim „OnSelect“-Event, wenn man auf einen Button klickt. Über eine IF-Abfrage kann man so steuern, ob der Eintrag submitted werden soll oder nicht:

If(CountRows(YourAttachmentsControl.Attachments) = 0, Notify("Please provide the required files!"), SubmitForm(yourForm))

PowerApps: SharePoint-Werte auf „null“ zurücksetzen (Date, User etc.)

Die Anforderung kommt häufig vor, das Problem ist seit Jahren bekannt – eine „richtige“ Lösung gibt es dafür bisher noch nicht.

Hat man in einer SharePoint-Liste zum Beispiel eine Spalte vom Typ „Datum“ (Approval Date etc.), und möchte dieses in einer PowerApp zurück auf null setzen, ist dies schwieriger als gedacht.

Voraussetzung ist natürlich erst einmal, das die Eigenschaft „isEditable“ des DatePicker-Controls auf „true“ gesetzt ist.

Dann muss noch die Eigenschaft „InputTextPlaceholder“ geleert werden, hier sollte nichts drin stehen.

Ist aber einmal ein Datumswert in PowerApps gesetzt und in dem SharePoint-Listeneintrag gespeichert worden, bekommt man dieses zumindest in der PowerApp nicht mehr heraus. Ein Löschen in SharePoint funktioniert, aber oftmals möchte man den Wert ja auch über die PowerApp zurücksetzen bzw. löschen können.

Die Lösung dazu ist recht simpel – die Auswirkungen allerdings undurchsichtig. Nach langer Recherche bin ich darauf gekommen, das die Lösung das Aktivieren eines „Experimental Features“ in der PowerApp ist, und zwar der Funktion „Formula-level error management“.

… zu finden unter „File > Settings > Advanced Settings“

Wird dieses Feature aktiviert, werden anscheinend Null-Werte beim Speichern von Einträgen (SubmitForm, Patch etc.) unterstützt, ansonsten nicht.

PowerApps: „Fill-in“ Möglichkeit bei Dropdowns

In SharePoint gibt es die Möglichkeit, Auswahllisten (Dropdowns) mit der Option „Fill in“ zu erstellen. Dadurch kann der Benutzer eigene Werte eintragen, wenn der von ihm gewünschte Wert nicht in der Auswahl erscheint.

Beim Erstellen von neuen Einträgen in SharePoint kann der Benutzer nun eigene Werte eingeben, sofern er den passenden nicht in der Auswahl findet:

Leider wird diese Funktionalität von Haus aus in PowerApps nicht unterstützt, d.h. man muss ein bisschen konfigurieren:

Dazu muss die Eigenschaft „Update“ von der DataCard, in der sich die Dropdown befindet, angepasst werden:

If(
    IsBlank(DataCardValue5.Selected),
    {
        '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
        Id: 0,
        Value: DataCardValue5.SearchText
    },
    DataCardValue5.Selected
)

„DataCardValue5“ ist dabei natürlich der Name unserer DataCard, in dem sich das DropDown-Control befindet.

Dieser Code prüft, ob eine Auswahl aus der Dropdown getroffen wurde, ansonsten wird ein neuer Eintrag auf Basis des „SearchText“ erstellt, und über den „Update„-Event beim Speichern der Form in das SharePoint-Listenelement eingetragen. Da es sich um ein Dropdown-Element handelt, muss hier der ODATA-Typ „SPListExpandedReference“ verwendet werden, mit den beiden bekannten Attributen „Id“ und „Value„.

PowerApps bietet dann beim nächsten Mal auch den neu hinzugefügten Wert in der Dropdown an, sodass dieser nicht erneut eingegeben werden muss.

Sortieren der Auswahl-Liste

Möchte man die Auswahl-Liste noch sortiert haben, muss man die „Items„-Eigenschaft der Dropdown mit der Funktion „SortByColumns“ erweitern:

Prototyping List 2“ ist hierbei unsere SharePoint-Liste, „System2“ der Name der Spalte vom Typ „Choice“ (Dropdown). „Value“ ist die Eigenschaft, nach der sortiert werden soll, diese sollte nicht geändert werden.

Danach werden die Einträge alphabetisch sortiert:

Power Apps: Personen-Auswahl aus Dropdown-Liste befüllen

Bei der Konzeption von Formularen mit Power Apps ist eine der Anforderungen sehr häufig, das man zum Beispiel einen Antrag einer verantwortlichen Person zuweisen kann. Leider muss der Benutzer dazu bei der normalen Personen-Auswahl immer erst ein paar Buchstaben eingeben, um dann die gewünschte Person angezeigt zu bekommen.

Abbildung 1: So sieht die Standard-Auswahl für Personen-Lookups aus

Anwenderfreundlicher ist die direkte Auswahl aus einer Dropdown – insbesondere, wenn der Kreis der Personen relativ klein ist (5-30 Personen zum Beispiel). Bei noch kleineren Gruppen wäre auch die Darstellung über Icons oder Benutzer-Fotos denkbar – die technische Umsetzung aber genau gleich wie bei einer Dropdown.

Abbildung 2: So sähe eine einfache Dropdown aus

In unserem Beispiel wollen wir die zur Auswahl möglichen Personen in einer separaten SharePoint-Liste verwalten. Dies hat den Vorteil, das noch weitere Meta-Informationen mit gepflegt werden können.

Ich habe dazu der Einfachheit halber in SharePoint eine Custom-List mit dem Namen „Project Users“ angelegt und eine Spalte namens „User“ hinzugefügt, welche vom Typ „Person or Group“ ist. In das Titel-Feld schreibe ich den Benutzernamen, wie er in der Dropdown-Liste erscheinen soll, in der Spalte „User“ wähle ich den entsprechenden SharePoint-Benutzer aus, welcher in der Power App in die Lookup-Dropdown automatisch übernommen werden soll.

In Power Apps binden wir das Edit-Formular an eine andere SharePoint-Liste (unsere „Master-Liste“), welche das eigentliche People-Lookup enthält (hier: „PersonToInform“), und fügen eine „Custom card“ hinzu…

… und fügen in diese Custom Card ein Dropdown-Control ein und binden diese an unsere Custom-List „Project Users“:

Damit nun bei Auswahl eines Benutzers in der einfachen Dropdown der User in dem eigentlichen People Lookup automatisch eingetragen wird, müssen wir noch die folgenden Schritte durchführen:

Im „OnChange“ Event der einfachen Dropdown führen wir ein „UpdateContext“ aus, um den ausgewählten Benutzer aus der einfachen Dropdown in den aktuellen Kontext zu setzen (hier in die Variabel „oSelectedPerson“):

Das „People Picker“ Dropdown benötigt mindestens die Attribute „Claims“ und „DisplayName“, um den Benutzer korrekt zuweisen zu können.

Wichtig ist hierbei, das „User“ der Spaltenname aus der SharePoint-Liste mit den möglichen Benutzern ist. Dieser muss unter Umständen angepasst werden, wenn Sie einen anderen Namen für die Spalte verwenden.

Als letztes muss noch der „Default“-Wert für das „People Picker“ Dropdown gesetzt werden, um den ausgewählten Benutzer aus dem Kontext zu übernehmen (dazu muss das Control entsperrt werden). Wichtig ist dabei die Prüfung, ob die Context Variable leer ist oder nicht:

Die Bezeichnung „.PersonToInform“ ist hierbei der Spaltenname in der SharePoint-Liste, welches die „People Picker“ Spalte enthält und mit den Werten aus der Dropdown befüllt werden soll.

Damit nach dem Speichern des Eintrags in SharePoint der ausgewählte User in der People Dropdown im Power Apps Formular wieder zurückgesetzt wird, kann in dem „OnSelect“ Event auf einem Button der folgende Code ausgeführt werden, um den Context wieder auf null zu setzen (durch die Funktion „Blank()“):

Grundsätzlich kann man die Informationen aber natürlich auch über PATCH an die SharePoint-Liste übertragen.

Zum Schluß setzt man das „People Picker“ Dropdown auf hidden, damit es nicht doppelt erscheint. Zu Debugging-Zwecken kann man es aber am während der Entwicklung natürlich auch noch sichtbar lassen, um die Funktionsweise zu überprüfen.

Power Apps: Deep Linking

Einer der häufigsten Anwendungsfälle bei Power Apps ist es, dem Benutzer verschiedene Links (z.B. über Email-Benachrichtigungen oder in Websites) zu unterschiedlichen Screens bzw. Ansichten der App zu ermöglichen. Dies geht über sogenanntes „Deep Linking“, also der Steuerung des ersten sichtbaren Screens über URL-Parameter.

Standardmäßig wird in einer Power App immer der erste, oberste Screen angezeigt, sobald sich die Anwendung im Browser öffnet. Die Reihenfolge kann man ganz einfach per drag&drop ändern.

Möchte man aber zum Beispiel per Microsoft Flow/Power Automate eine Email zu einem speziellen Formular auf einem anderen Screen verschicken, kann man dies über einen URL-Parameter realisieren.

Beim Starten der Power App wird als Erstes das „App“-Modul ausgeführt. Hier gibt es den Event „OnStart“. Möchte man nun einen URL-Parameter abfragen, geht das über die Methode „Param()“. In dem folgenden Beispiel fragen wir den URL-Parameter „DeepLink“ ab, und öffnen den entsprechenden Screen:

Öffnet man nun die Power App über die URL, erscheint standardmäßig der erste Screen (hier „Welcome“).

Fügt man der URL jedoch einen Parameter mit einem entsprechenden Wert an, zum Beispiel „&DeepLink=Task“, öffnet sich auf Basis der Abfrage im „OnStart“ Event direkt der passende Screen. (Die Funktion „NewForm()“ in diesem Beispiel stellt die Ansicht des Formulars auf einen neuen Eintrag um).

Bearbeiten eines SharePoint Eintrags per URL

Um einen Eintrag in einer SharePoint Liste direkt in Power Apps Formularen zu öffnen, kann man die gleiche Vorgehensweise anwenden. Hierzu übergeben wir die ID des Listeneintrags ebenfalls per URL-Parameter.

In dem „OnVisible“-Event des entsprechenden Screens, auf dem sich das dazu passende Formular befindet, fügen wir den folgenden Code hinzu:

if(!IsBlank(Param("ID")), EditForm(Form2))

Wobei „Form2“ der Name des Formulars ist, in welchem der SharePoint-Eintrag bearbeitet werden soll.

Mit diesem Code setzen wir den Anzeigemodus unseres Formulars auf „Bearbeiten“, sofern die URL einen Parameter namens „ID“ enthält.

Nun müssen wir noch in der „Item“-Eigenschaft des Formulars den entsprechenden Eintrag aus der SharePoint-Liste referenzieren. Dies geht über die „LookUp“-Methode, welcher wir den Wert aus unserem URL-Parameter übergeben. Da die Spalte „ID“ unserer Liste „Tasks“ ein Integer ist, müssen wir das „Param(„ID“)“ noch mit der Funktion „Value()“ konvertieren, da URL-Parameter immer als String interpretiert werden.

Rufen wir nun unsere App im Browser auf und fügen der URL einen Parameter ID=1 hinzu, öffnet sich direkt der dazu passende Listeneintrag aus SharePoint:

PowerApps: Elemente auf Basis von Toggles (An-/Aus Schalter) anzeigen

Manche Dinge scheinen recht einfach zu sein, aber bis man sie gefunden hat, dauert es etwas…

Um bei Formularen in Microsoft Power Apps Elemente (z.B. DataCards, Textboxen, Labels etc.) auszublenden und optional einblenden zu können, beispielsweise über einen An-/Aus-Schalter (Toggle), reicht die folgende Definition:

Im Control, welches man bedingt anzeigen möchte (hier zum Beispiel die DataCard „Details/Neu 2“, auf die „Visible“-Eigenschaft gehen. Dort dann einfach den Namen der Toggle gefolgt von „.Value“ eintragen, hier:

Toogle4.Value

Dies setzt den Visible-Status des Controls entweder auf true oder false und blendet damit das Control ein oder aus. Einfacher geht’s eigentlich nicht 😉