Belešku
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da se prijavite ili da promenite direktorijume.
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da promenite direktorijume.
Odnosi se na: Canvas aplikacije
Copilot Studio Desktop
teku
aplikacije zasnovane na modelima
Power Platform CLI
Dataverse funkcije
Menja ili kreira jedan ili više zapisa u izvoru podataka ili spaja zapise izvan izvora podataka.
Koristite funkciju Patch da biste izmenili zapise u složenim situacijama, na primer kada vršite ažuriranja koja ne zahtevaju interakciju korisnika ili koristite obrasce koji se nalaze na više ekrana.
Da biste lakše ažurirali zapise u izvoru podataka za jednostavne izmene, bolje je da koristite kontrolu obrazac za uređivanje. Kada dodate kontrolu obrazac za uređivanje, korisnicima dajete obrazac za popunjavanje i zatim se izmene čuvaju u izvoru podataka. Za više informacija, pogledajte Objašnjenje obrazaca podataka.
Pogledajte ovaj video da biste saznali kako da koristite funkciju Patch :
Overview
Koristite Patch funkciju da biste izmenili jedan ili više zapisa izvora podataka. Ažurira vrednosti određenih polja bez uticaja na druge osobine. Na primer, ova formula menja telefonski broj za klijenta po imenu Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Koristite Patch ga sa funkcijom Defaults da biste kreirali zapise. Koristite ovo ponašanje za izgradnju jednog ekrana za kreiranje i uređivanje zapisa. Na primer, ova formula kreira zapis za klijenta po imenu Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Kada zakrpite kolekciju koristeći zapis iz izvora podataka sa podrazumevanim vrednostima, operacija zakrpe ažurira kolekciju sa navedenim vrednostima zakrpe i podrazumevanim vrednostima iz izvora podataka. DataSource izjave zakrpe i DataSource funkcije Defaults moraju se poklapati da bi se kreirao novi zapis.
Čak i ako ne radite sa izvorom podataka, možete da koristite Patch za objedinjavanje dva ili više zapisa. Na primer, ova formula spaja dva zapisa u jedan koji identifikuje i telefonski broj i lokaciju za Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Izmena ili kreiranje zapisa u izvoru podataka
Da biste ovu funkciju koristili sa izvorom podataka, navedite izvor podataka, a zatim odredite osnovni zapis:
- Da biste izmenili zapis, osnovni zapis mora da dođe iz izvora podataka. Možete dobiti osnovni zapis preko svojstva Stavke galerije, staviti ga u kontekstnu promenljivu, ili ga dobiti preko nekog drugog puta. Ali, morate biti u mogućnosti da pratite osnovni zapis do izvora podataka. Ovaj zahtev je važan jer zapis sadrži dodatne informacije koje vam pomažu da ponovo pronađete zapis za izmenu.
- Da biste kreirali zapis, koristite funkciju Defaults za kreiranje osnovnog zapisa sa podrazumevanim vrednostima.
Zatim odredite jedan ili više zapisa promena, od kojih svaki sadrži nove vrednosti svojstava koje nadjačavaju vrednosti svojstava u osnovnom zapisu. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.
Povratna vrednost je Patch zapis koji ste izmenili ili kreirali. Ako ste kreirali zapis, povratna vrednost može da sadrži svojstva koja je izvor podataka generisan automatski. Međutim, povratna vrednost ne pruža vrednost za polja povezane tabele.
Na primer, koristite Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, a zatim MyAccount.'Primary Contact'.'Full Name'. U ovom slučaju ne možete dati puno ime. Umesto toga, da biste pristupili poljima povezane tabele, koristite zasebno pronalaženje kao što je:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Kada ažurirate izvor podataka, može doći do nekih problema. Koristite IfError i IsErrorPatch sa povratnom vrednošću iz za otkrivanje i odgovaranje na greške, kao što je opisano u članku Rukovanje greškama. Možete i da koristite funkciju Errors za prepoznavanje i ispitivanje problema, kao što je opisano u odeljku Rad sa izvorima podataka.
Srodne funkcije uključuju funkciju Update za zamenu celog zapisa i funkciju Collect za kreiranje zapisa. Koristite funkciju UpdateIf za promenu specifičnih svojstava više zapisa na osnovu stanja.
Uređujte ili kreirajte skup zapisa u izvoru podataka
Takođe možete koristiti Patch za kreiranje ili modifikovanje više zapisa sa jednim pozivom.
Umesto donošenja jednog osnovnog zapisa, obezbedite tabelu osnovnih zapisa u drugom argumentu. Obezbedite i zapise o promenama u tabeli, odgovarajući jedan-za-jedan sa osnovnim zapisima. Broj zapisa u svakoj tabeli promena mora biti isti kao i broj zapisa u osnovnoj tabeli.
Kada koristite Patch na ovaj način, povratna vrednost je takođe tabela sa svakim zapisom koji odgovara jedan-za-jedan sa baznim i promenama zapisa.
Spajanje zapisa izvan izvora podataka
Navedite dva ili više zapisa koje želite spojiti. Funkcija obrađuje zapise u redosledu od početka liste argumenata do kraja, sa kasnijim vrednostima osobina koje prepisuju ranije.
Patch daje objedinjeni zapis i ne menja njegove argumente ili zapise ni u jedan izvor podataka.
Syntax
Izmena ili kreiranje zapisa u izvoru podataka
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource – Obavezno. Izvor podataka koji sadrži zapis koji želite da izmenite ili će sadržati zapis koji želite da kreirate.
- BaseRecord – Obavezno. Zapis za izmenu ili kreiranje. Ako je zapis došao iz izvora podataka, funkcija pronalazi i modifikuje zapis. Ako se koristi rezultat Defaults , funkcija kreira zapis. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju da bi se kreirao novi zapis.
- ChangeRecords – Obavezno. Jedan ili više zapisa koji sadrže svojstva za izmenu u BaseRecord. Funkcija obrađuje promenu zapisa po redosledu od početka liste argumenata do kraja, sa kasnijim vrednostima osobina koje prepisuju ranije.
Uređujte ili kreirajte skup zapisa u izvoru podataka
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – Obavezno. Izvor podataka koji sadrži zapise koje želite da izmenite ili će sadržati zapise koje želite da kreirate.
- BaseRecordTable - Obavezno. Tabela zapisa koju možete menjati ili kreirati. Ako je zapis došao iz izvora podataka, funkcija pronalazi i modifikuje zapis. Ako se koristi rezultat Defaults , funkcija kreira zapis. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju da bi se kreirao novi zapis.
- ChangeRecordTables – Obavezno. Jedna ili više tabela zapisa koja sadrži svojstva koja se menjaju za svaki zapis za BaseRecordTable. Funkcija obrađuje promenu zapisa po redosledu od početka liste argumenata do kraja, sa kasnijim vrednostima osobina koje prepisuju ranije.
Merge records
Patch( Record1, Record2 [, ...] )
- Evidencija - Obavezno. Bar dva zapisa koja želite da objedinite. Funkcija obrađuje zapise po redosledu od početka liste argumenata do kraja, sa kasnijim vrednostima osobina koje premošćuju ranije.
Examples
Izmena ili kreiranje zapisa (u izvoru podataka)
U ovim primerima modifikujete ili kreirate zapis u izvoru podataka pod nazivom IceCream. Izvor podataka sadrži podatke u ovoj tabeli i automatski generiše vrednosti u koloniID:
Da biste kreirali verziju ovog izvora podataka u memoriji, tako da možete isprobati ove primere, procenite ovu formulu:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Sladoled, LookUp( Ledeni krem, ukus = "Čokolada" ), { Količina: 400 } ) |
Izmenjuje zapis u izvoru podataka IceCream:
|
{ ID: 1, ukus: "Čokolada", Količina: 400 } Unos čokolade u izvoru podataka IceCream je modifikovan. |
| Patch( IceCream, Defaults( IceCream ), { Ukus: "Jagoda" } ) | Kreira zapis u izvoru podataka IceCream:
|
{ ID: 3, ukus: "Jagoda", Količina: 0 } Kreiran je unos jagode u izvoru podataka IceCream . |
Nakon što se prethodne formule procene, izvor podataka se završava sa ovim vrednostima:
Spajanje zapisa (izvan izvora podataka)
| Formula | Description | Result |
|---|---|---|
| Patch( { Ime: "Džejms", ocena: 90 }, { ime: "Džim", prosleđeno: tačno } ) | Spaja dva zapisa izvan izvora podataka:
|
{ Ime: "Džim", ocena: 90, prosleđeno: tačno } |
Izmenite ili kreirajte skup zapisa (u izvoru podataka)
Kada koristite Patch sa tabelama umesto pojedinačnih zapisa, možete kreirati ili modifikovati više zapisa u jednom pozivu. Povratna vrednost je tabela zapisa koja odgovara jedan-za-jedan sa ulaznim tabelama.
Ovaj primer ažurira količinu za više ukusa u izvoru podataka IceCream odjednom:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Rezultat je tabela sa ažuriranim zapisima: { ID: 1, Flavor: "Chocolate", Quantity: 300 } i { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Ovaj primer kreira više novih zapisa koristeći Defaults:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Kada koristite Patch sa tabelama, broj zapisa u svakoj tabeli promena mora odgovarati broju zapisa u osnovnoj tabeli. U suprotnom, dolazi do greške.
Da biste otkrili greške kada modifikujete više zapisa, koristite IfError.
IfError je preferirani mehanizam i radi preko Pover Fk domaćina:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch sa tipovima kolona Dataverse
Sledeći primeri se posebno odnose na
Kolona izbora: Da biste podesili kolonu izbora, koristite vrednost enum direktno. Ovaj primer postavlja kolonu izbora statusa u tabeli Računi :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Kolona za pretragu: Da biste postavili kolonu za pretragu, obezbedite zapis sa primarnim ključem povezane tabele. Ovaj primer postavlja pretragu primarnog kontakta na zapis naloga :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Ovi primeri tipa kolone su specifični za Dataverse. Drugi izvori podataka, kao što su SharePoint ili SQL Server, mogu zahtevati različite oblike zapisa za slične tipove kolona. Pogledajte dokumentaciju za vaš specifični izvor podataka za ispravan format.
Delegiranje u formulama koje koriste Patch
Sama Patch funkcija nije predmet delegiranja jer piše u izvor podataka, a ne da ga upita. Međutim, upozorenja o delegiranju mogu se pojaviti u formulama koje koriste Patch ako deo formule za izbor zapisa (kao što je Filter, LookUp ili ForAll) uključuje upit koji prelazi ograničenja delegiranja izvora podataka.
Kada vidite upozorenje o delegiranju u formuli koja uključuje Patch, proverite da li se upozorenje odnosi na funkcije za pronalaženje podataka, a ne na Patch sebe. Za više informacija o delegiranju, pogledajte Razumevanje delegiranja u aplikaciji za platno.
Uobičajene greške sa funkcijom Patch
Kada koristite funkciju Patch , mogu se pojaviti greške zbog povezivanja izvora podataka, dozvola ili sukoba podataka. Koristite IfError i IsError da biste otkrili greške i odgovorili na odgovarajući način.
"Mrežna greška prilikom korišćenja Patch funkcije": Ova greška obično ukazuje na to da aplikacija ne može da dođe do izvora podataka. Uobičajeni uzroci uključuju izgubljenu internet vezu, izvor podataka koji je privremeno nedostupan, ili nedovoljne dozvole za trenutnog korisnika. Završite Patch poziv u IfError da biste korisnicima pružili smislenu poruku.
"Konflikti postoje sa promenama na serveru": Ova greška se javlja kada drugi korisnik ili proces modifikuje isti zapis između vremena kada vaša aplikacija čita zapis i piše promenu. Osvežite izvor podataka tako što ćete pozvati funkciju Osveži i ponovite operaciju.
Greške u dozvoli: Ako korisnik nema dozvolu za kreiranje ili izmenu zapisa u izvoru podataka, Patch poziv ne uspeva. Koristite IfError da biste uhvatili greške vezane za dozvolu i vodili korisnika.
Za opšte obrasce rukovanja greškama, pogledajte Rukovanje greškama.
Upotreba As ili ThisRecord
Koristite ključnu reč As ili ThisRecord u formuli da biste izbegli dvosmislen kontekst evaluacije.
U sledećem primeru, razmotrite prvi Lookup u If izjavi.
(OrderID = A[@OrderID]) Očekuje se da uporedi OrderId u obimu Lookup sa OrderId naplatom A u obimu ForAll . U ovom slučaju, verovatno želite A[@OrderId] da rešite kao lokalni parametar. Ali to je dvosmisleno.
Power Apps trenutno tumači i levu stranu OrderId i desnu stranu A[@OrderId] kao polje u Lookup opsegu. Prema tome, Lookup uvek se nalazi prvi red jer [dbo].[Orders1] je uslov uvek istinit (to jest, bilo koji red OrderId je jednak 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 As ili ThisRecord
Kad god je to moguće, koristite operator As ili ključnu reč ThisRecord da biste razdvojili levu stranu. Kao što je preporučeno za prethodni scenario.
Kada vaša formula koristi više opsega sa ForAll, Filter, i na istom izvoru podataka ili tabeli, parametri Lookup obima mogu se sudariti sa istim poljem na drugom mestu. Stoga, koristite As operator ili ThisRecord da biste rešili ime polja i izbegli dvosmislenost.
Na primer, možete koristiti As operator za razdvajanje u sledećem primeru.
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"
}
)
)
)
Odnosno, možete koristiti operator 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 upotrebi As operatora i ThisRecord, pogledajte članak Operatori .