Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenDaten flexibel und gezielt verändern
In diesem Artikel lernst du, wie du die Power Fx Patch-Funktion verwendest, um Datensätze in Power Apps zu erstellen oder aktualisieren – ohne Formulare. Die Patch‑Funktion in Power Apps erlaubt dir präzise Feldänderungen, Bulk-Updates oder das Zusammenführen von Datensätzen, direkt aus Power Fx ohne die gesamte Datenstruktur neu laden zu müssen. Besonders in Canvas Apps sorgt Patch() für maximale Kontrolle bei der Datenmanipulation. Ob SharePoint, Dataverse oder SQL – die Funktion bietet eine einheitliche Methode zum Schreiben von Daten.
Die Grundsyntax lautet:
Patch(DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ...])
Parameter:
-
DataSource: Die Datenquelle, die geändert werden soll. -
BaseRecord: Der Datensatz, der aktualisiert oder als Vorlage verwendet wird. -
ChangeRecord: Ein oder mehrere Datensätze, die die zu ändernden oder hinzuzufügenden Felder enthalten.
Alternativ, für das Erstellen eines neuen Datensatzes:
Patch(DataSource, Defaults(DataSource), { Field1: Value1, Field2: Value2 })
Dieser Aufruf erzeugt einen neuen Datensatz in der angegebenen Datenquelle. Mit Defaults(DataSource) wird ein leerer Standarddatensatz erzeugt, der als Vorlage dient. Anschließend werden die angegebenen Werte in diesem neuen Datensatz gesetzt und gespeichert. Diese Methode eignet sich besonders für Formularanwendungen, bei denen Benutzer neue Einträge erstellen möchten.
Patch in Action
// Beispiel: Update eines bestehenden Kontakts in einer SharePoint-Liste "Kontakte"
Patch(
Kontakte,
LookUp(Kontakte, ID = 5), // BaseRecord: Datensatz mit ID 5
{
Vorname: "Max",
Nachname: "Muster",
Email: "max.muster@example.com"
}
)
// Beispiel: Neuen Datensatz hinzufügen
Patch(
Kontakte,
Defaults(Kontakte), // BaseRecord: Standardwert für neuen Datensatz
{
Vorname: "Anna",
Nachname: "Beispiel",
Email: "anna.beispiel@example.com"
}
)
- Update: Der Datensatz mit ID = 5 in der SharePoint-Liste Kontakte wird mit neuen Werten für Vorname, Nachname und Email überschrieben.
- Erstellen: Ein neuer Datensatz mit den angegebenen Feldern wird in der Liste Kontakte erstellt, basierend auf den Standardwerten der Datenquelle.
Die Patch()-Funktion zeigt ihre volle Stärke in der Kombination mit weiteren Power Fx-Funktionen:
- With(): Zur Zwischenspeicherung komplexer Berechnungen oder Bedingungen, wodurch Redundanz vermieden und die Lesbarkeit verbessert wird.
- If(): Ermöglicht bedingte Datenänderungen. Beispiel: Nur wenn ein Kontrollfeld einen bestimmten Wert hat, wird gepatcht.
- IsBlank(): Für Validierungen, z.B. um sicherzustellen, dass Pflichtfelder nicht leer sind.
- FormControls (z.B. TextInput.Text): Die Werte aus Benutzereingaben können direkt übergeben werden, was dynamische und interaktive Formularlogik ermöglicht.
Die Patch()-Funktion ist essenziell für jede Power Platform App, die Daten schreibt. Ihre Vielseitigkeit, Kombinierbarkeit mit Kontroll- und Logikfunktionen und ihre direkte Wirkung auf Datenquellen machen sie zu einem unverzichtbaren Werkzeug effizienter, robuster und nutzerzentrierter Canvas Apps.
In Power Apps stoßen viele früher oder später auf die Herausforderung, mehrere Datensätze in einer Dataverse-Tabelle gleichzeitig zu aktualisieren. Dabei stellt sich oft die Frage: Wie mache ich das am besten, ohne jeden einzelnen Datensatz einzeln patchen zu müssen? Die Antwort darauf liegt in der Kombination von UpdateIf, DropColumns und Patch.
Power Apps |
Patch(
DeineTabelle,
DropColumns(
UpdateIf(
DeineTabelle,
Status = 'Status (DeineTabelle)'.Inactive,
{Status: 'Status (DeineTabelle)'.Active}
),
'Created By',
'Created By (Delegate)',
'Modified By',
'Modified By (Delegate)',
'Owning User',
Owner
)
)
Was auf den ersten Blick komplex wirkt, ist im Kern eine elegante Lösung, um eine ganze Gruppe von Datensätzen effizient zu aktualisieren. Die Funktion tut Folgendes: Zunächst werden mit UpdateIf alle Kontakte aus deiner Tabelle gefiltert, deren Status als „Inactive“ markiert ist. Diese werden in einem Schritt auf den Status „Active“ gesetzt. Das Besondere dabei: UpdateIf gibt direkt eine Collection der betroffenen und aktualisierten Datensätze zurück. Bevor diese Collection jedoch mit Patch zurück in die Datenquelle geschrieben wird, sorgt DropColumns dafür, dass schreibgeschützte Systemfelder wie „Created By“ oder „Owner“ entfernt werden. Diese Felder können nicht gepatcht werden und würden sonst zu Fehlern führen.

Der Clou liegt schließlich in der Verwendung von Patch auf die gesamte Collection – das bedeutet, dass alle Änderungen in einem einzigen Vorgang gespeichert werden. Kein Schleifen, kein mehrfaches Patchen – einfach ein sauberer, performanter Batch-Update. Diese Technik ist nicht nur effizient, sondern auch gut skalierbar – besonders bei Anwendungen mit vielen Benutzeraktionen oder großen Datenmengen. Wer Power Fx sauber nutzen möchte, sollte sich unbedingt mit diesem Pattern vertraut machen.
Eine oft unterschätzte Möglichkeit von Patch() ist das direkte
Aktualisieren mehrerer bestehender Datensätze anhand eines Filters – ganz ohne
ForAll() oder zusätzliche Sammlungen. Dabei wird zunächst über
Filter() festgelegt, welche Datensätze aktualisiert werden sollen.
Anschließend übergibt Table() eine Liste von Änderungswerten, die
der Reihe nach auf die gefundenen Datensätze angewendet werden.
Power Apps |
Patch(
'Explore a List',
Filter(
'Explore a List',
Title = "Eintrag aktualisiert"
),
Table(
{Title: $"Eintrag 1-1"},
{Title: $"Eintrag 2-1"},
{Title: $"Eintrag 3-1"},
{Title: $"Eintrag 4-1"},
{Title: $"Eintrag 5-1"},
{Title: $"Eintrag 6-1"}
)
)
In diesem Beispiel werden zunächst alle Datensätze aus der Liste
Explore a List gesucht, deren Feld Title aktuell den Wert
Eintrag aktualisiert besitzt. Anschließend überschreibt
Patch() diese Treffer sequenziell mit den neuen Werten aus der
Table()-Funktion. Der erste gefundene Datensatz erhält also
Eintrag 1-1, der zweite Eintrag 2-1 und so weiter.
Der große Vorteil dieses Ansatzes liegt in der Performance: Statt mehrere
einzelne Schreiboperationen an die Datenquelle zu senden, erfolgt die
Aktualisierung als Batch-Operation in nur einem einzigen
Patch()-Aufruf. Gerade bei Datenquellen wie Microsoft SharePoint
oder Microsoft Dataverse kann das API-Aufrufe reduzieren und die App deutlich
performanter machen. Wichtig ist dabei, dass die Anzahl der durch
Filter() gefundenen Datensätze zur Anzahl der bereitgestellten
Datensätze in Table() passt, damit die Zuordnung korrekt erfolgt.
Power Apps |
Patch(
'Explore a List',
Table(
Defaults('Explore a List'),
Defaults('Explore a List')
),
Table(
{Title: $"Bulk Neu"},
{Title: $"Bulk Neu"}
)
)
Das gleiche Prinzip lässt sich nicht nur für das Aktualisieren bestehender
Datensätze nutzen, sondern auch für das gleichzeitige Erstellen mehrerer neuer
Einträge. Statt über Filter() vorhandene Datensätze auszuwählen,
werden in diesem Fall über Defaults() neue leere Datensatzvorlagen
erzeugt. Jede Defaults()-Referenz steht dabei für einen neuen
Datensatz, der in der Datenquelle erstellt werden soll. Über die zweite
Table()-Funktion werden anschließend die jeweiligen Werte
übergeben und den neuen Datensätzen zugeordnet. Im gezeigten Beispiel erstellt
Patch() somit in nur einem einzigen Aufruf zwei neue Einträge in
der Liste Explore a List und setzt jeweils das Feld
Title auf Bulk Neu. Gerade bei größeren Datenmengen ist
dieser Ansatz deutlich effizienter als mehrere einzelne
Patch()-Aufrufe oder eine Kombination mit
ForAll(), da die Erstellung als gebündelte Batch-Operation an die
Datenquelle übertragen wird.
Fehlerbehandlung mit IfError() bei Patch()
Die Funktion IfError() gehört in Power Fx zu den wichtigsten
Werkzeugen für ein robustes Error Handling. Sie prüft, ob der ausgeführte
Ausdruck – in diesem Fall der Patch()-Aufruf – erfolgreich
abgeschlossen wurde oder ob während der Verarbeitung ein Fehler aufgetreten
ist. Solange keine Ausnahme entsteht, liefert IfError() einfach
das Ergebnis der eigentlichen Operation zurück. Sobald jedoch ein Fehler
erkannt wird, springt Power Fx automatisch in den definierten Fehlerblock und
führt die dort hinterlegte Logik aus. Dadurch lassen sich Fehler gezielt
behandeln, protokollieren oder über UI-Elemente direkt an Anwender kommunizieren,
anstatt diese unbemerkt im Hintergrund auftreten zu lassen.
Gerade bei Batch-Operationen mit Patch() ist dieser Ansatz
besonders hilfreich, da bereits ein einzelner fehlerhafter Datensatz dazu
führen kann, dass Teile der Operation nicht erfolgreich verarbeitet werden.
Im folgenden Beispiel werden zwei neue Datensätze in einem einzigen
Bulk-Request erstellt. Während der erste Datensatz mit Bulk Neu
einen gültigen Wert erhält, erzeugt der zweite Datensatz über
Sequence(), RandBetween(), Mid() und
Concat() bewusst einen zufälligen String mit 300 Zeichen.
Genau hier entsteht der Fehler: Die Datenquelle Explore a List
basiert auf einer SharePoint-Liste, und die Standardspalte
Title ist dort als Single line of text definiert.
Dieses Feld erlaubt maximal 255 Zeichen. Da der erzeugte String diese
Begrenzung überschreitet, lehnt SharePoint das Schreiben des zweiten
Datensatzes ab und gibt einen Validierungsfehler an Power Fx zurück.
Durch das Wrapping mit IfError() wird dieser Fehler jedoch nicht
still im Hintergrund ausgegeben, sondern gezielt abgefangen. Über
FirstError.Message kann direkt auf die originale Fehlermeldung
der Datenquelle zugegriffen werden, die anschließend über
Notify() innerhalb der App angezeigt wird. Gerade in produktiven
Anwendungen verbessert dieser Ansatz nicht nur die Benutzerfreundlichkeit,
sondern erleichtert auch die Fehlersuche und Wartung erheblich.
Power Apps |
IfError(
Patch(
'Explore a List',
Table(
Defaults('Explore a List'),
Defaults('Explore a List')
),
Table(
{Title: $"Bulk Neu"},
{
Title: Concat(
Sequence(300),
Mid(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
RandBetween(
1,
Len("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
),
1
)
)
}
)
),
Notify(
"Some records failed to update: " & FirstError.Message,
NotificationType.Error
)
)
Temporäre Records mit Patch() zusammenführen
Die Funktion Patch() wird in Power Fx meist mit externen
Datenquellen wie SharePoint oder Dataverse in Verbindung gebracht. Weniger
bekannt ist jedoch, dass sich Patch() auch komplett ohne
Datenquelle verwenden lässt, um lokale Records miteinander zu kombinieren.
Genau das passiert im folgenden Beispiel: Statt einen Datensatz in einer Liste
zu speichern, werden zwei einzelne Record-Objekte direkt innerhalb von
Patch() miteinander zusammengeführt.
Der erste Record dient dabei als Basis und enthält die Felder
name und title. Der zweite Record ergänzt
zusätzliche Werte beziehungsweise überschreibt bestehende Felder, falls diese
bereits vorhanden sind. Da im zweiten Record ein neues Feld
id definiert wird, erweitert Patch() den
ursprünglichen Record automatisch um diese Eigenschaft. Würde ein Feldname in
beiden Records vorkommen, hätte immer der Wert des zuletzt übergebenen
Records Priorität. Das Ergebnis ist somit ein neuer kombinierter Record mit
den Feldern name, title und id.
Über Set() wird dieses Ergebnis anschließend in der globalen
Variable varRecord gespeichert und kann danach überall in der App
weiterverwendet werden. Dieser Ansatz eignet sich besonders, um dynamisch
Records aufzubauen, Payloads für API-Aufrufe vorzubereiten oder bestehende
Objekte schrittweise um zusätzliche Eigenschaften zu erweitern – ganz ohne
eine Verbindung zu einer externen Datenquelle herstellen zu müssen.
Power Apps |
Set(
varRecord,
Patch(
{name: "tim", title: "test"},
{name: "tim", id: 1}
)
)
Das Ergebnis dieser Operation ist ein neuer zusammengesetzter Record, der die Eigenschaften beider Ausgangsobjekte enthält. Da das Feld name in beiden Records vorhanden ist, bleibt der zuletzt übergebene Wert erhalten. Das Feld title stammt weiterhin aus dem ersten Record, während id aus dem zweiten Record ergänzt wird. Der Inhalt von varRecord würde nach der Ausführung also folgendem JSON-ähnlichen Record entsprechen:
{
"name": "tim",
"title": "test",
"id": 1
}
Fazit
Patch() gehört ohne Zweifel zu den flexibelsten und gleichzeitig
mächtigsten Funktionen in Power Fx. Während viele Entwickler die Funktion
zunächst nur für einfache Create- oder Update-Operationen einsetzen, zeigt
ein genauerer Blick, dass Patch() deutlich mehr leisten kann.
Von einzelnen Datensatzänderungen über Bulk-Updates und das gleichzeitige
Erstellen mehrerer Records bis hin zu sauberem Error Handling mit
IfError() oder dem lokalen Zusammenführen von Record-Objekten –
Patch() deckt eine beeindruckende Bandbreite an Szenarien ab.
Gerade in Kombination mit Datenquellen wie SharePoint oder Dataverse lassen
sich dadurch performante und wartbare Anwendungen entwickeln, die deutlich
effizienter arbeiten als klassische Schleifen- oder Formularansätze. Wer
versteht, wie Patch() intern mit Records, Tabellen und
Rückgabewerten arbeitet, kann nicht nur Schreiboperationen optimieren,
sondern Power Fx insgesamt deutlich eleganter einsetzen. Kurz gesagt:
Patch() ist nicht einfach nur eine Speicherfunktion – es ist
eines der zentralen Werkzeuge für professionelle Low-Code-Entwicklung mit
Power Apps.
Kontaktiere mich direkt über das Kontaktformular. LowCode Investigator ist deine Plattform für praxisnahe Einblicke in die Welt der LowCode-Entwicklung – von Devs für Devs.
noch mehr interessante Beiträge
Sie sehen gerade einen Platzhalterinhalt von Vimeo. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr Informationen