Funció Patch
S'aplica a: Aplicacions de llenç Aplicacions Power Platform basades en models Fluxos d'escriptori de la CLI
Modifica o crea un o diversos registres en una font de dades o combina els registres fora d'una font de dades.
Utilitzeu la funció Patch per modificar registres en situacions complexes, com ara quan feu actualitzacions que no requereixen interacció amb l'usuari o utilitzeu formularis que ocupen diverses pantalles.
Per actualitzar els registres d'una font de dades més fàcilment per a canvis senzills, utilitzeu el control Edita el formulari com a alternativa. Quan afegiu un control Edita el formulari, proporcioneu als usuaris un formulari que cal emplenar i, a continuació, desar els canvis en una font de dades. Per obtenir més informació, vegeu Entendre els formularis de dades.
Mireu aquest vídeo per aprendre a utilitzar la funció Patch:
Informació general
Utilitzeu la funció Patch per modificar un o diversos registres d'una font de dades. Els valors dels camps específics es modifiquen sense afectar altres propietats. Per exemple, aquesta fórmula canvia el número de telèfon d'un client anomenat Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Utilitzeu Patch amb la funció Defaults per crear registres. Utilitzeu aquest comportament per crear una única pantalla per crear i editar registres. Per exemple, aquesta fórmula crea un registre per a un client anomenat Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Encara que no treballeu amb una font de dades, podeu utilitzar Patch per combinar dos o més registres. Per exemple, aquesta fórmula combina dos registres en un que identifica el número de telèfon i la ubicació de Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Descripció
Modificar o crear un registre en una font de dades
Per utilitzar aquesta funció amb una font de dades, especifiqueu la font de dades i, a continuació, un registre base:
- Per modificar un registre, el registre base ha de provenir d'una font de dades. El registre base pot provenir d'una propietat Items d'una galeria, haver-se col·locat en una variable de context o provenir d'un altre camí. Tanmateix, podeu fer el seguiment del registre base fins a la font de dades. Això és important perquè el registre inclourà informació addicional per ajudar a tornar a cercar el registre per modificar-lo.
- Per crear un registre, utilitzeu la funció Defaults per crear un registre base amb valors per defecte.
A continuació, especifiqueu un o diversos registres de canvi, cadascun dels quals conté els valors nous que substitueixen els valors de la propietat del registre base. Els registres de canvi es processen per ordre des de l'inici de la llista d'arguments fins al final, amb els valors de propietat més recents que sobreescriuen els anteriors.
El valor de retorn de Patch és el registre que heu modificat o creat. Si heu creat un registre, el valor de retorn pot incloure propietats que la font de dades ha generat de manera automàtica. No obstant això, el valor de retorn no proporciona cap valor per als camps d'una taula relacionada.
Per exemple, utilitzeu Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
i, a continuació, MyAccount.'Primary Contact'.'Full Name'
. En aquest cas, no es pot donar cap nom complet. Per accedir als camps d'una taula relacionada, utilitzeu una cerca independent, com ara:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Quan actualitzeu una font de dades, pot ser que sorgeixin un o més problemes. Utilitzeu IfError i IsError amb el valor retornat de Patch per detectar i respondre a errors, com s'explica a Gestió d'errors. També podeu utilitzar la funció Errors per identificar i examinar els problemes, com es descriu a Treballar amb fonts de dades.
Entre les funcions relacionades hi ha la funció Update per substituir un registre sencer i la funció Collect per crear un registre. Utilitzeu la funció UpdateIf per modificar les propietats específiques de diversos registres en funció d'una condició.
Modificar o crear un conjunt de registres en una font de dades
El pegat també es pot utilitzar per crear o modificar diversos registres amb una sola trucada.
En lloc de passar un registre base únic, es pot proporcionar una taula de registres base al segon argument. També es proporcionen els registres de canvi en una taula, amb una correspondència individual amb els registres base. El nombre de registres de cada taula de canvi ha de ser el mateix que el nombre de registres de la taula base.
Quan s'utilitza Patch d'aquesta manera, el valor de retorn també és una taula amb una correspondència individual entre els registres base i de canvi.
Combinar registres fora d'una font de dades
Especifiqueu dos o més registres que voleu combinar. Els registres es processen per ordre des de l'inici de la llista d'arguments fins al final, amb els valors de propietat més recents que sobreescriuen els anteriors.
Patch retorna el registre combinat i no modifica els seus arguments ni registres en cap font de dades.
Sintaxi
Modificar o crear un registre en una font de dades
Pegat(FontDe dades,RegistreBase,RegistreCanvi1 [,RegistreCanvi2 , ... ])
- DataSource : obligatori. La font de dades que conté el registre que voleu modificar o contindrà el registre que voleu crear.
- BaseRecord : obligatori. El registre que es modificarà o crearà. Si el registre provenia d'una font de dades, es troba i es modifica el registre. Si s'utilitza el resultat de Defaults, es crea un registre.
- ChangeRecords : obligatori. Un o diversos registres que contenen propietats per modificar a BaseRecord. Els registres de canvi es processen per ordre des de l'inici de la llista d'arguments fins al final, amb els valors de propietat més recents que sobreescriuen els anteriors.
Modificar o crear un conjunt de registres en una font de dades
Pegat ( Font de dades, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource : obligatori. La font de dades que conté els registres que voleu modificar o contindrà els registres que voleu crear.
- BaseRecordTable : obligatori. Una taula de registres que es modificarà o crearà. Si el registre provenia d'una font de dades, es troba i es modifica el registre. Si s'utilitza el resultat de Defaults, es crea un registre.
- ChangeRecordTables : obligatori. Una o diverses taules de registres que contenen propietats que es modificaran per a cada registre de BaseRecordTable. Els registres de canvi es processen per ordre des de l'inici de la llista d'arguments fins al final, amb els valors de propietat més recents que sobreescriuen els anteriors.
Combinar registres
Pegat ( Registre1, Registre2 [, ...] )
- Registres : obligatori. Almenys dos registres que voleu combinar. Els registres es processen per ordre des de l'inici de la llista d'arguments fins al final, amb els valors de propietat més recents que sobreescriuen els anteriors.
Exemples
Modificar o crear un registre (en una font de dades)
En aquests exemples, modificareu o creareu un registre en una font de dades, anomenada Gelat, que conté les dades d'aquesta taula i genera automàticament els valors a la columna ID:
Fórmula | Descripció | Resultat |
---|---|---|
Pegat (Gelat, LookUp( Gelat, Gust = "Xocolata" ), { Quantitat: 400 } ) |
Modifica un registre a la font de dades Gelat:
|
{ ID:1, Gust: "Xocolata", Quantitat: 400 } L'entrada Xocolata de la font de dades Gelat s'ha modificat. |
Pegat (Gelat, Per defecte (Gelat { ), Sabor: "Maduixa") } | Crea un registre a la font de dades Gelat:
|
{ID: 3, Gust: "Maduixa", Quantitat: 0} L'entrada Maduixa de la font de dades Gelat s'ha creat. |
Un cop avaluades les fórmules anteriors, la font de dades finalitza amb aquests valors:
Combinar registres (fora d'una font de dades)
Fórmula | Descripció | Resultat |
---|---|---|
Pegat ( { Nom: "James", Puntuació: 90 }, Nom: { "Jim", Aprovat: cert } ) | Combina dos registres fora d'una font de dades:
|
{Nom: "Jim", Puntuació: 90, Aprovat: true} |
Ús de Com o Aquest registre
Utilitzar la paraula clau Com o Aquest registre a la fórmula evita el context d'avaluació ambigua.
A l'exemple següent, tingueu en compte la primera cerca a la If
declaració. (OrderID = A[@OrderID])
s'espera que compari el OrderId
en l'àmbit de cerca amb el de la OrderId
col·lecció A
en l'abast ForAll
. En aquest cas, és possible que A[@OrderId]
es resolgui com a paràmetre local. Però és ambigu.
Power Apps actualment s'interpreta per la banda esquerra OrderId
i la dreta A[@OrderId]
com a camp en l'àmbit de la cerca. Per tant, la cerca sempre trobarà la primera fila a [dbo].[Orders1]
perquè la condició sempre és certa (és a dir, qualsevol fila OrderId
és igual a si mateixa).
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"
}
)
)
)
Utilitzant Com o Aquest registre
Sempre que sigui possible, utilitzeu l'operador Com o Aquest registre per desambiguar la banda esquerra. Com es recomana per a l'escenari anterior.
Quan la fórmula utilitza diversos àmbits amb ForAll
, Filter
, i Lookup
en la mateixa font de dades o taula, és possible que els paràmetres d'àmbit xoquin amb el mateix camp en un altre lloc. Per tant, es recomana utilitzar l'operador Com o Aquest registre per resoldre el nom del camp i evitar l'ambigüitat.
Per exemple, podeu utilitzar l'operador Com per desambiguar-ho en l'exemple següent.
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"
}
)
)
)
O bé, podeu utilitzar Aquest registre amb el mateix propòsit.
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"
}
)
)
)
Per obtenir més informació sobre l'ús de l'operador Com i Aquest registre vegeu l'article Operadors.