Funkcija Naljepak
Primjenjuje se na: Aplikacije radnog područja Aplikacije Power Platform stvorene prema modelu CLI tijekovi radne površine
Izmjenjuje ili stvara jedan ili više zapisa u izvoru podataka ili spaja zapise izvan nekog izvora podataka.
Upotrijebite funkciju Patch za izmjenu zapisa u složenim situacijama, kao što je kada radite ažuriranja koja ne zahtijevaju interakciju korisnika ili koristite obrasce koji se protežu na više zaslona.
Da biste lakše ažurirali zapise u nekom izvoru podataka u slučaju jednostavnih promjena, umjesto toga upotrijebite kontrolu Edit form. Kada dodate kontrolu Edit form, korisnicima pružate obrazac za ispunjavanje i zatim spremanje tih promjena u izvor podataka. Dodatne informacije potražite u odjeljku Razumijevanje obrazaca podataka.
Pogledajte ovaj videozapis da biste saznali kako koristiti funkciju Patch:
Pretpregled
Upotrijebite funkciju Patch kako biste izmijenili jedan ili više zapisa nekog izvora podataka. Vrijednosti određenih polja modificiraju se bez utjecaja na druga svojstva. Na primjer, ova formula mijenja telefonski broj klijenta po imenu Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Koristite Patch s funkcijom Defaults kako biste stvarali zapise. Koristite ovo ponašanje za izradu jednog zaslona i za stvaranje i za uređivanje zapisa. Na primjer, ova formula stvara zapis klijenta po imenu Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Čak i ako ne radite s izvorom podataka, možete upotrijebiti Patch da spojite dva ili više zapisa. Na primjer, ova formula spaja dva zapisa u jedan koji određuje i telefonski broj i lokaciju za Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Opis
Izmjena ili stvaranje zapisa u izvoru podataka
Da biste ovu funkciju koristili s nekim izvorom podataka, navedite taj izvor podataka, a zatim odredite osnovni zapis:
- Da biste izmijenili neki zapis, osnovni zapis mora potjecati iz nekog izvora podataka. Osnovni zapis možda potječe iz svojstva Items neke galerije, smješten je u varijabli konteksta ili potječe s neke druge strane. No, porijeklo osnovnog zapisa možete pratiti do izvora podataka. Ovo je važno jer će zapis sadržavati dodatne informacije koje će vam pomoći da se ponovo pronađe zapis radi izmjene.
- Da biste stvorili neki zapis, upotrijebite funkciju Defaults kako biste stvotili osnovni zapis sa zadanim vrijednostima.
Zatim odredite jedan ili više zapisa promjena, od kojih svaki sadrži nove vrijednosti svojstava koje nadjačavaju vrijednosti svojstava u osnovnom zapisu. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.
Povratna vrijednost funkcije Patch zapis je koji ste izmijenili ili stvorili. Ako ste stvorili neki zapis, povratna vrijednost može sadržati svojstva koja je izvor podataka automatski generirao. Međutim, povratna vrijednost ne daje vrijednost za polja povezane tablice.
Na primjer, koristite Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
i onda MyAccount.'Primary Contact'.'Full Name'
. U ovom slučaju ne možete dati puno ime. Umjesto toga, za pristup poljima povezane tablice koristite zasebno pretraživanje, kao što je:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Kada ažurirate neki izvor podataka, može doći do jednog ili više problema. Koristite IfError i IsError s povratnom vrijednošću iz Patch za otkrivanje i reagiranje na pogreške, kao što opisuje Error Handling. Možete koristiti i funkciju Errors kako biste utvrdili i ispitali probleme kako je opisano u odjeljku Rad s izvorima podataka.
U povezane funkcije spadaju funkcija Update za zamjenu cijelog zapisa i funkcija Collect za stvaranje zapisa. Upotrijebite funkciju UpdateIf kako biste promjenili specifična svojstva više zapisa na temelju nekog uvjeta.
Izmjena ili stvaranje skupa zapisa u izvoru podataka
Patch se također može koristiti za stvaranje ili izmjenu više zapisa jednim pozivom.
Umjesto da proslijeđivanja jednog osnovnog zapisa, u drugom argumentu može se dati tablica osnovnih zapisa. Zapisi promjene nalaze se i u jednoj tablici koja odgovara osnovnim zapisima „jedan na jedan”. Broj zapisa u svakoj tablici promjena mora biti isti kao broj zapisa u osnovnoj tablici.
Pri takvom korištenju funkcije Patch, povratna vrijednost je također tablica čiji svaki zapis odgovara „jedan na jedan” osnovnim zapisima i zapisima promjene.
Spajanje zapisa izvan izvora podataka
Navedite dva ili više zapisa koje želite spojiti. Zapisi se obrađuju redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.
Patch vraća spojeni zapis i ne mijenja njegove argumente ili zapise ni u jednom izvoru podataka.
Sintaksa
Izmjena ili stvaranje zapisa u izvoru podataka
Patch(DataSource,BaseRecord,ChangeRecord1 [, ChangeRecord2 , ... ])
- Izvor podataka– obavezno. Izvor podataka koji sadrži zapis koji želite izmijeniti ili će sadržavati zapis koji želite stvoriti.
- BaseRecord – Obavezno. Zapis koji se mijenja ili stvara. Ako je zapis nastao iz nekog izvora podataka, taj zapis će se pronaći i izmijeniti. Ako se koristi rezultat funkcije Defaults, stvara se zapis.
- ChangeRecords – obavezno. Jedan ili više zapisa koji sadrže svojstva koja se mogu mijenjati u BaseRecord. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.
Izmjena ili stvaranje skupa zapisa u izvoru podataka
Patch(DataSource,BaseRecordsTable,ChangeRecordTable1 [, ChangeRecordTable2 , ... ] )
- Izvor podataka– obavezno. Izvor podataka koji sadrži zapise koje želite izmijeniti ili će sadržavati zapise koje želite stvoriti.
- BaseRecordTable – obavezno. Tablica zapisa za izmjenu ili stvaranje. Ako je zapis nastao iz nekog izvora podataka, taj zapis će se pronaći i izmijeniti. Ako se koristi rezultat funkcije Defaults, stvara se zapis.
- ChangeRecordTables – obavezno. Jedna ili više tablica zapisa koje sadrže svojstva za izmjenu za svaki zapis u BaseRecordTable. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.
Spajanje zapisa
Zakrpa ( Zapis 1, Zapis 2 [, ...] )
- Zapisi - Obavezno. Najmanje dva zapisa koje želite spojiti. Zapisi se obrađuju redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.
Primjeri
Izmjena ili stvaranje zapisa (u izvoru podataka)
U ovim ćete primjerima izmijeniti ili stvoriti zapis u izvoru podataka, nazvan IceCream, koji sadrži podatke u ovoj tablici i automatski generira vrijednosti u stupcu ID:
Formula | Opis | Rezultat |
---|---|---|
Flaster( sladoled, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Mijenja jedan zapis u izvoru podataka IceCream:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } Unos Chocolate u izvoru podataka IceCream izmijenjen je. |
Patch( IceCream, Defaults( IceCream), { Okus: "Jagoda" } ) | Stvara jedan zapis u izvoru podataka IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } Unos Strawberry u izvoru podataka IceCream stvoren je. |
Nakon što su procijenjene prethodne formule, izvor podataka završava ovim vrijednostima:
Spajanje zapisa (izvan izvora podataka)
Formula | Opis | Rezultat |
---|---|---|
Zakrpa( { Ime: "James", Ocjena: 90 }, { Ime: "Jim", Položeno: istina } ) | Spaja dva zapisa izvan izvora podataka:
|
{ Name: "Jim", Score: 90, Passed: true } |
Upotreba ključnih riječi As ili ThisRecord
Upotrebom ključnih riječi As ili ThisRecord u formuli izbjegava se dvosmislen kontekst procjene.
U donjem primjeru razmotrite prvo pretraživanje u If
izjavi. (OrderID = A[@OrderID])
očekuje se da će usporediti OrderId
u opsegu pretraživanja s zbirkom OrderId
u A
opsegu ForAll
. U tom slučaju vjerojatno želite da se A[@OrderId]
riješi kao lokalni parametar. Ali to je dvosmisleno.
Power Apps trenutno tumači lijevu stranu OrderId
i desnu stranu A[@OrderId]
kao polje u opsegu pretraživanja. Stoga će pretraga uvijek pronaći prvi redak u [dbo].[Orders1]
jer je uvjet uvijek istinit (odnosno bilo koji redak OrderId
je jednak je samom sebi.)
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"
}
)
)
)
Upotreba ključnih riječi As ili ThisRecord
Kad god je to moguće koristite operator As ili ThisRecord za određivanje lijeve strane. Kao što je preporučeno za gornji scenarij.
Kada vaša formula koristi više opsega sa ForAll
, Filter
, i Lookup
na istom izvoru podataka ili tablici, moguće je da se parametri opsega mogu podudarati s istim poljem negdje drugdje. Zato se preporučuje upotreba operatora As ili ThisRecord za određivanje naziva polja i izbjegavanje dvosmislenosti.
Na primjer, u donjem primjeru možete upotrijebiti operator As za uklanjanje višeznačnosti.
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"
}
)
)
)
Možete i koristiti ThisRecord u istu svrhu.
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"
}
)
)
)
Da biste saznali više o operatoru As i ThisRecord pogledajte članak Operatori.