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 :
Pregled
Koristite Patch funkciju da biste izmenili jedan ili više zapisa izvora podataka. Vrednosti specifičnih polja se menjaju bez uticaja na druga svojstva. 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" } )
Belešku
Kada zakrpate kolekciju pomoću zapisa iz izvora podataka sa podrazumevanim vrednostima, operacija zakrpa ažurira kolekciju i navedenim vrednostima zakrpa i podrazumevanim vrednostima iz izvora podataka. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju 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" } )
Opis
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 potiče iz izvora podataka. Osnovni zapis je možda prošao kroz svojstvo Stavke galerije, postavljen je u promenljivu konteksta ili je prošao kroz neku drugu putanju. Ali, možete pratiti osnovni zapis do izvora podataka. To je važno jer zapis sadrži dodatne informacije koje će vam pomoći 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
Patch može da se koristi i za kreiranje ili izmenu više zapisa pomoću jednog poziva.
Umesto da prođe jedan osnovni zapis, u drugom argumentu može se dati tabela osnovnih zapisa. Zapisi o promenama su dati i u tabeli, koja se slaže jedan-na-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-prema-jedan sa osnovom i menja zapise.
Spajanje zapisa izvan izvora podataka
Navedite dva ili više zapisa koje želite spojiti. Zapisi se obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva nadjačati ranije.
Patch daje objedinjeni zapis i ne menja njegove argumente ili zapise ni u jedan izvor podataka.
Sintaksa
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, biće pronađen i promenjen. Ako se koristi rezultat za Defaults, kreira se 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. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti 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, biće pronađen i promenjen. Ako se koristi rezultat za Defaults, kreira se 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. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.
Objedinjavanje zapisa
Patch( Record1, Record2 [, ...] )
- Evidencija - Obavezno. Bar dva zapisa koja želite da objedinite. Zapisi se obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.
Primeri
Izmena ili kreiranje zapisa (u izvoru podataka)
U ovim primerima ćete modifikovati ili kreirati zapis u izvoru podataka po imenu IceCream, koji sadrži podatke u ovoj tabeli i automatski generiše vrednosti u IDkolone:
| Formula | Opis | rezultat |
|---|---|---|
|
Patch( IceCream, LookUp( Ledeni krem, ukus = "Čokolada" ), { Količina: 400 } ) |
Izmenjuje zapis u izvoru podataka IceCream:
|
{ ID: 1, ukus: "Čokolada", Količina: 400 } Unos Čokolada u izvor podataka IceCream je izmenjen. |
| Patch( IceCream, Defaults( IceCream ), { Ukus: "Jagoda" } ) | Kreira zapis u izvoru podataka IceCream:
|
{ ID: 3, ukus: "Jagoda", Količina: 0 } Unos Strawberry u izvor podataka IceCream je kreiran. |
Nakon izračunavanja prethodnih formula, izvor podataka se završava ovim vrednostima:
Spajanje zapisa (izvan izvora podataka)
| Formula | Opis | rezultat |
|---|---|---|
| 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 } |
Upotreba As ili ThisRecord
Upotrebom ključne reči As ili ThisRecord u formuli izbegava se dvosmisleno tumačenje konteksta.
U primeru ispod, razmotrite prvo pretraživanje u izjavi If.
(OrderID = A[@OrderID]) se očekuje da uporedi OrderId u opsegu pretrage sa OrderId kolekcijom A u ForAll obimu. U ovom slučaju, verovatno želite da A[@OrderId] bude razrešen kao lokalni parametar. Ali to je dvosmisleno.
Power Apps trenutno tumači oba OrderId na levoj strani i A[@OrderId] na desnoj strani kao polje u opsegu pronalaženja. Stoga će funkcija traženja uvek pronaći prvi red u [dbo].[Orders1] jer je uslov uvek tačan (tj., svaki OrderId u redu je jednak 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 As ili ThisRecord
Kad god je to moguće koristite operator As ili ThisRecord da leva strana ne bude dvosmislena. Kao što je preporučeno za gornji scenario.
Kada formula koristi više opsega pomoću funkcija ForAll, Filter i Lookup na istom izvoru podataka ili tabeli, može doći do preklapanja parametara opsega sa istim poljem na nekom drugom mestu. Zbog toga se preporučuje korišćenje operatora As ili ThisRecord da bi se rešio naziv polja i izbegla dvosmislenost.
Na primer, možete da koristite operator As za otklanjanje dvosmislenosti u donjem 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 korišćenju operatora As i ThisRecord, pogledajte članak Operatori.