Patch-Funktion
Gilt für: Canvas-Apps Modellgesteuerte Apps Power Platform CLI Desktop-Flows
Ändert oder erstellt einen oder mehrere Datensätze in einer Datenquelle oder verbindet Datensätze außerhalb einer Datenquelle.
Verwenden Sie die Funktion Patch, um Datensätze in komplexen Situationen zu ändern, etwa beim Ausführen von Updates, die keinen Benutzereingriff erfordern oder Formulare verwenden, die sich über mehrere Bildschirme erstrecken.
Verwenden Sie stattdessen das Edit form-Steuerelement, um Datensätze in einer Datenquelle schneller und einfacher zu aktualisieren. Wenn Sie ein Edit form-Steuerelement hinzufügen, geben Sie Benutzern ein Formular an die Hand, das sie ausfüllen und dessen Änderungen sie dann in einer Datenquelle speichern können. Weitere Informationen finden Sie unter Grundlegendes zu Datenformularen.
Sehen Sie sich dieses Video an, um zu erfahren, wie Sie die Patch-Funktion verwenden:
Überblick
Verwenden Sie die Patch-Funktion, um einen oder mehrere Datensätze für die Datenquelle zu ändern. Die Werte bestimmter Felder lassen sich ohne Auswirkungen auf andere Eigenschaften ändern. Beispielsweise ändert diese Formel die Telefonnummer für einen Kunden mit dem Namen Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Verwenden Sie die Funktion Patch mit der Defaults-Funktion, um Einträge zu erstellen. Verwenden Sie dieses Verhalten zum Erstellen eines kombinierten Bildschirms für die Erstellung und Bearbeitung von Datensätzen. Beispielsweise erstellt diese Formel einen Datensatz für einen Kunden mit dem Namen Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Auch wenn Sie nicht mit einer Datenquelle arbeiten, können Sie die Patch-Funktion zum Zusammenführen von zwei oder mehr Datensätzen nutzen. Diese Formel führt beispielsweise zwei Datensätze zu einem zusammen, der sowohl die Telefonnummer als auch den Standort von Contoso angibt:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Beschreibung
Ändern oder Erstellen eines Datensatzes in einer Datenquelle
Um diese Funktion mit einer Datenquelle zu verwenden, geben Sie zunächst die Datenquelle an und anschließend einen Basisdatensatz:
- Um einen Datensatz zu ändern, muss der Basisdatensatz aus einer Datenquelle stammen. Der Basisdatensatz kann aus der Items-Eigenschaft eines Katalogs stammen, in einer Kontextvariablen platziert worden sein oder anderer Herkunft sein. Sie können den Basisdatensatz jedoch an die Datenquelle zurückverfolgen. Dies ist wichtig, da der Datensatz zusätzliche Informationen enthält, anhand derer Sie ihn wiederfinden können, um ihn zu ändern.
- Zum Erstellen eines Datensatzes verwenden Sie die Defaults-Funktion und erstellen einen Basisdatensatz mit Standardwerten.
Geben Sie anschließend einen oder mehrere Änderungsdatensätze mit jeweils neuen Eigenschaftswerten an, die die Eigenschaftswerte im Basisdatensatz überschreiben. Änderungsdatensätze werden nacheinander vom Anfang bis zum Ende der Argumenteliste verarbeitet, wobei spätere Eigenschaftswerte frühere Versionen überschreiben.
Der Rückgabewert der Patch-Funktion ist der Datensatz, den Sie erstellt oder geändert haben. Wenn Sie einen Datensatz erstellt haben, kann der Rückgabewert Eigenschaften enthalten, die die Datenquelle automatisch generiert hat. Der Rückgabewert stellt jedoch keinen Wert für Felder einer verknüpften Tabelle bereit.
Zum Beispiel verwenden Sie Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
und dann MyAccount.'Primary Contact'.'Full Name'
. In diesem Fall können Sie keinen vollständigen Namen angeben. Um auf die Felder einer verknüpften Tabelle zuzugreifen, verwenden Sie stattdessen eine separate Suche wie:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Wenn Sie eine Datenquelle aktualisieren, können Probleme auftreten. Verwenden Sie IfError und IsError mit dem Rückgabewert von Patch um Fehler zu erkennen und darauf zu reagieren, wie in Fehlerbehandlung beschrieben. Sie können auch die Errors-Funktion verwenden, um Probleme zu identifizieren und zu untersuchen, wie unter Arbeiten mit Datenquellen beschrieben.
Zu den verwandten Funktionen gehören die Update-Funktion, die Sie verwenden können, um einen vollständiger Datensatz zu ersetzen, und die Collect-Funktion zum Erstellen eines Datensatzes.. Mithilfe der UpdateIf-Funktion können Sie bestimmte Eigenschaften von mehreren Datensätzen auf der Grundlage einer Bedingung ändern.
Ändern oder Erstellen einer Gruppe von Datensätzen in einer Datenquelle
Mit Patch können auch mehrere Datensätze mit einem einzigen Aufruf erstellt oder geändert werden.
Anstelle der Übergabe eines einzelnen Basisdatensatzes kann eine Tabelle mit Basisdatensätze im zweiten Argument angegeben werden. Änderungsdatensätze werden ebenfalls in einer Tabelle bereitgestellt, wobei jedem Änderungsdatensatz direkt ein Datenbank-Datensatz entspricht. Die Anzahl der Datensätze in jeder Änderungstabelle muss mit der Anzahl der Datensätze in der Basistabelle identisch sein.
Wenn Sie die Funktion Patch in dieser Weise verwenden, ist der Rückgabewert ebenfalls eine Tabelle, in der jedem Basisdatensatz jeweils direkt ein Änderungsdatensatz entspricht.
Zusammenführen von Datensätzen außerhalb einer Datenquelle
Geben Sie zwei oder mehr Datensätze an, die Sie zusammenführen möchten. Datensätze werden nacheinander vom Anfang bis zum Ende der Argumenteliste verarbeitet, wobei spätere Eigenschaftswerte frühere Versionen überschreiben.
Patch gibt den zusammengeführte Datensatz zurück und ändert dessen Argumente oder Datensätze in keiner Datenquelle.
Syntax
Ändern oder Erstellen eines Datensatzes in einer Datenquelle
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])
- DataSource : Erforderlich. Die Datenquelle, die den zu ändernden Datensatz enthält oder für die Sie einen Datensatz erstellen möchten.
- BaseRecord – Erforderlich. Der zu ändernde oder zu erstellende Datensatz. Wenn der Datensatz aus einer Datenquelle stammt, wird der Datensatz gefunden und geändert. Wenn das Ergebnis der Defaults-Funktion verwendet wird, wird ein Datensatz erstellt.
- ChangeRecords – Erforderlich. Mindestens ein Datensatz, der Eigenschaften enthält, die für jeden Datensatz im BaseRecord geändert werden sollen. Änderungsdatensätze werden nacheinander vom Anfang bis zum Ende der Argumenteliste verarbeitet, wobei spätere Eigenschaftswerte frühere Versionen überschreiben.
Ändern oder Erstellen einer Gruppe von Datensätzen in einer Datenquelle
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ] )
- DataSource : Erforderlich. Die Datenquelle mit den zu ändernden Datensätzen oder für die Sie Datensätze erstellen möchten.
- BaseRecordTable – Erforderlich. Eine Tabelle mit zu ändernden oder zu erstellenden Datensätzen. Wenn der Datensatz aus einer Datenquelle stammt, wird der Datensatz gefunden und geändert. Wenn das Ergebnis der Defaults-Funktion verwendet wird, wird ein Datensatz erstellt.
- ChangeRecordTables – Erforderlich. Mindestens eine Tabelle von Datensätzen mit Eigenschaften, die für jeden Datensatz von BaseRecordTable geändert werden sollen. Änderungsdatensätze werden nacheinander vom Anfang bis zum Ende der Argumenteliste verarbeitet, wobei spätere Eigenschaftswerte frühere Versionen überschreiben.
Zusammenführen von Datensätzen
Patch( Datensatz1, Datensatz2 [, …] )
- Datensätze – Erforderlich. Mindestens zwei Datensätze, die Sie zusammenführen möchten. Datensätze werden nacheinander vom Anfang bis zum Ende der Argumenteliste verarbeitet, wobei spätere Eigenschaftswerte frühere Versionen überschreiben.
Beispiele
Ändern oder Erstellen eines Datensatzes (in einer Datenquelle)
In diesen Beispielen ändern oder erstellen Sie einen Datensatz in einer Datenquelle mit dem Namen IceCream, die Daten in dieser Tabelle enthält und automatisch die Werte in der IDSpalte generiert:
Formel | Beschreibung | Result |
---|---|---|
Patch( Eiscreme, LookUp( IceCream, Flavor = „Chocolate“), { Quantity: 400 } ) |
Ändert einen Datensatz in der IceCream-Datenquelle:
|
{ ID: 1, Flavor: „Chocolate“, Quantity: 400 } Der Eintrag Chocolate in der IceCream-Datenquelle wurde geändert. |
Patch( IceCream, Standardwerte( IceCream ), { Geschmack: "Erdbeere" } ) | Erstellt einen Datensatz in der IceCream-Datenquelle:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } Der Eintrag Strawberry in der IceCream-Datenquelle wurde erstellt. |
Nachdem die oben genannten Formeln ausgewertet wurden, endet die Datenquelle mit den folgenden Werten:
Zusammenführen von Datensätzen (außerhalb einer Datenquelle)
Formel | Beschreibung | Ergebnis |
---|---|---|
Patch( { Name: „James“, Punktzahl: 90 }, { Name: „Jim“, Bestanden: true } ) | Verbindet zwei Datensätze außerhalb einer Datenquelle:
|
{ Name: „Jim“, Score: 90, Passed: true } |
Verwendung von As oder ThisRecord
Durch die Stichwörter As oder ThisRecord in der Formel wird ein mehrdeutiger Auswertungskontext vermieden.
Sehen Sie sich im folgenden Beispiel die erste Suche in der If
-Aussage an. (OrderID = A[@OrderID])
soll das OrderId
im Nachschlagebereich mit dem OrderId
der Sammlung A
im ForAll
Bereich vergleichen. In diesem Fall soll A[@OrderId]
wahrscheinlich als lokaler Parameter behandelt werden. Dies ist aber zweideutig.
Power Apps interpretiert derzeit sowohl die OrderId
auf der linken Seite als auch die A[@OrderId]
auf der rechten Seite als Feld im Suchbereich. Daher findet die Suche immer die erste Zeile in [dbo].[Orders1]
,weil die Bedingung immer wahr ist (d. h. die OrderId
jeder Zeile ist mit sich selbst gleich.)
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Wendung von As oder ThisRecord
Verwenden Sie nach Möglichkeit immer den Operator As oder ThisRecord, um die linke Seite zu unterscheiden. Wie für das obige Szenario empfohlen wird.
Wenn Ihre Formel mehrere Bereiche mit ForAll
, Filter
und Lookup
in derselben Datenquelle oder Tabelle verwendet, kollidieren die Bereichsparameter eventuell an anderer Stelle mit demselben Feld. Sie sollten deshalb die Operatoren As oder ThisRecord verwenden, um den Feldnamen abzuschließen und Mehrdeutigkeiten zu vermeiden.
Zum Beispiel können Sie mit dem Operator As im Beispiel unten Mehrdeutigkeiten vermeiden.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]' As B,
B.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]' As C,
C.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Alternativ können Sie ThisRecord für denselben Zweck verwenden.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Mehr über die Verwendung der Operatoren As und ThisRecord erfahren Sie im Artikel über Operatoren.