opomba,
Dostop do te strani zahteva pooblastilo. Poskusite se vpisati alispremeniti imenike.
Dostop do te strani zahteva pooblastilo. Poskusite lahko spremeniti imenike.
Velja za: Aplikacije Canvas Copilot
Studio
Desktop tokovi
Modelno vodene aplikacije
Power Platform CLI
Dataverse funkcije
Spremeni ali ustvari enega ali več zapisov v viru podatkov ali združi zapise zunaj vira podatkov.
S funkcijo Patch lahko spremenite zapise v zapletenih situacijah, na primer pri posodobitvah, ki ne zahtevajo interakcije uporabnika ali uporabljajo obrazce, ki se raztezajo čez več zaslonov.
Za lažje posodabljanje zapisov v viru podatkov za enostavne spremembe uporabite kontrolnik Edit form. Ko dodate kontrolnik Edit form, uporabnikom zagotovite obrazec, ki ga izpolnijo, in nato shranite spremembe v vir podatkov. Če želite več informacij, glejte Razumevanje podatkovnih obrazcev.
Oglejte si ta videoposnetek in se naučite uporabljati Patch funkcijo:
Overview
S funkcijo Patch spremenite enega ali več zapisov vira podatkov. Posodablja vrednosti določenih polj , ne da bi vplival na druge lastnosti. Ta formula na primer spremeni telefonsko številko za stranko z imenom Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Uporabite Patch s funkcijo »Privzeto«, če želite ustvariti zapise. To delovanje uporabite za razvoj enega zaslona za ustvarjanje in za urejanje zapisov. Ta formula na primer ustvari zapis za stranko z imenom Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Ko zbirko popravite z uporabo zapisa iz podatkovnega vira z privzetimi vrednostmi, operacija popravka posodobi zbirko tako z določenimi vrednostmi popravka kot z privzetimi vrednostmi iz podatkovnega vira. DataSource stavka popravka in DataSource funkcije Defaults se morata ujemati, da se ustvari nov zapis.
Tudi če ne delate z virom podatkov, lahko spojite Patch dva ali več zapisov. Ta formula na primer združi dva zapisa v enega, ki določa tako telefonsko številko kot lokacijo za stranko Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Spreminjanje ali ustvarjanje zapisa v viru podatkov
Če želite uporabljati to funkcijo z virom podatkov, navedite vir podatkov in nato še osnovni zapis:
- Za spremembo zapisa mora osnovni zapis prihajati iz podatkovnega vira. Osnovni zapis lahko dobite preko lastnosti Items v galeriji, ga postavite v kontekstno spremenljivko ali pa ga pridobite po drugi poti. Vendar morate znati izslediti osnovni zapis nazaj do izvora podatkov. Ta zahteva je pomembna, ker zapis vsebuje dodatne informacije, ki vam pomagajo ponovno najti zapis za spremembe.
- Če želite ustvariti zapis, uporabite funkcijo Defaults in ustvarite osnovni zapis s privzetimi vrednostmi.
Nato določite enega ali več zapisov sprememb, pri čemer vsak vsebuje nove vrednosti lastnosti, ki preglasijo vrednosti lastnosti v osnovnem zapisu. Spremenjeni zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.
Vrnjena vrednost je zapis Patch , ki ste ga spremenili ali ustvarili. Če ste ustvarili zapis, lahko vrnjena vrednost vključuje lastnosti, ki jih je vir podatkov ustvaril samodejno. Vendar vrnjena vrednost ne zagotavlja vrednosti za polja povezane tabele.
Uporabite na primer Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); in nato MyAccount.'Primary Contact'.'Full Name'. V tem primeru ne morete vrniti polnega imena. Namesto tega za dostop do polj povezane tabele uporabite ločeno iskanje, na primer:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Ko posodobite vir podatkov, lahko pride do ene ali več težav. Uporabite »IfError« in »IsErrorPatch« z vrnjeno vrednostjo, da zaznate napake in se odzovete nanje, kot je opisano v opisu »Obravnavanje napak«. Uporabite lahko tudi funkcijo Errors za prepoznavanje in preučevanje težav, kot je opisano v članku Delo z viri podatkov.
Povezane funkcije vključujejo funkcijo Update za zamenjavo celotnega zapisa in funkcijo Collect za ustvarjanje zapisa. Uporabite funkcijo UpdateIf in spremenite določene lastnosti več zapisov glede na pogoj.
Spreminjanje ali ustvarjanje nabora zapisov v viru podatkov
Uporabite lahko tudi Patch za ustvarjanje ali spreminjanje več zapisov z enim samim klicem.
Namesto da posredujete en sam osnovni zapis, v drugem argumentu zagotovite tabelo osnovnih zapisov. Zagotovite tudi zapise sprememb v tabeli, ki ustrezajo ena proti ena osnovnim zapisom. Število zapisov v vsaki tabeli sprememb mora biti enako številu zapisov v osnovni tabeli.
Ko uporabljate Patch na ta način, je vrnjena vrednost tudi tabela, kjer vsak zapis ustreza ena za enega z osnovnim in spremembnim zapisom.
Združevanje zapisov zunaj vira podatkov
Določite dva ali več zapisov, ki jih želite združiti. Funkcija obdeluje zapise v vrstnem redu od začetka seznama argumentov do konca, pri čemer kasnejše vrednosti lastnosti preglasijo prejšnje.
Patch vrne spojeni zapis in ne spremeni svojih argumentov ali zapisov v nobenih virih podatkov.
Syntax
Spreminjanje ali ustvarjanje zapisa v viru podatkov
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource – Zahtevano. Vir podatkov, ki vsebuje zapis, ki ga želite spremeniti, ali bo vseboval zapis, ki ga želite ustvariti.
- BaseRecord – Zahtevano. Zapis za spreminjanje ali ustvarjanje. Če zapis prihaja iz podatkovnega vira, funkcija najde in spremeni zapis. Če se uporabi rezultat privzetih vrednosti , funkcija ustvari zapis. Če želite ustvariti nov zapis, se morata vir DataSource izjave popravka in Vir podatkov funkcije Defaults ujemati.
- ChangeRecords – Zahtevano. Eden ali več zapisov, ki vsebujejo lastnosti, ki jih je mogoče spremeniti v argumentu BaseRecord. Funkcija spreminja zapise po vrstnem redu od začetka seznama argumentov do konca, pri čemer kasnejše vrednosti lastnosti preglasijo prejšnje.
Spreminjanje ali ustvarjanje nabora zapisov v viru podatkov
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – Zahtevano. Vir podatkov, ki vsebuje zapise, ki jih želite spremeniti, ali bo vseboval zapise, ki jih želite ustvariti.
- BaseRecordTable – Zahtevano. Tabela zapisov za spreminjanje ali ustvarjanje. Če zapis prihaja iz podatkovnega vira, funkcija najde in spremeni zapis. Če se uporabi rezultat privzetih vrednosti , funkcija ustvari zapis. Če želite ustvariti nov zapis, se morata vir DataSource izjave popravka in Vir podatkov funkcije Defaults ujemati.
- ChangeRecordTables – Zahtevano. Ena ali več tabel zapisov, ki vsebujejo lastnosti, ki jih je mogoče spremeniti za vsak zapis argumenta BaseRecordTable. Funkcija spreminja zapise po vrstnem redu od začetka seznama argumentov do konca, pri čemer kasnejše vrednosti lastnosti preglasijo prejšnje.
Merge records
Patch( Record1, Record2 [, ...] )
- Zapisi - Obvezno. Najmanj dva zapisa, ki ju želite združiti. Funkcija obdeluje zapise po vrsti od začetka seznama argumentov do konca, pri čemer kasnejše vrednosti lastnosti preglasijo prejšnje.
Examples
Spreminjanje ali ustvarjanje zapisa (v viru podatkov)
V teh primerih spremenite ali ustvarite zapis v podatkovnem viru z imenom IceCream. Vir podatkov vsebuje podatke iz te tabele in samodejno generira vrednosti v stolpcuID:
Da ustvarite različico tega podatkovnega vira v pomnilniku, da lahko preizkusite te primere, ocenite to formulo:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
PatchNe, ne LookUp( IceCream, Flavor = "Chocolate"), { Quantity: 400 } ) |
Spremeni zapis v viru podatkov IceCream:
|
{ ID: 1, Okus: "Čokolada", Količina: 400 } Vnos Čokolada v podatkovnem viru IceCream je spremenjen. |
| Patch(IceCream, Defaults( IceCream ), { Okus: "Jagoda" } ) | Ustvari zapis v viru podatkov IceCream:
|
{ ID: 3, Okus: "Jagoda", Količina: 0 } Vnos Strawberry v podatkovnem viru IceCream je ustvarjen. |
Po oceni prejšnjih formul se podatkovni vir konča z naslednjimi vrednostmi:
Združevanje zapisov (zunaj vira podatkov)
| Formula | Description | Result |
|---|---|---|
| Patch( { Ime: "James", Rezultat: 90 }, { Ime: "Jim", Opravljeno: resnično } ) | Združi dva zapisa zunaj vira podatkov:
|
{ Ime: "Jim", Ocena: 90, Opravljeno: res } |
Spremenite ali ustvarite nabor zapisov (v podatkovnem viru)
Ko uporabljate Patch tabele namesto posameznih zapisov, lahko ustvarite ali spremenite več zapisov v enem samem klicu. Vrnjena vrednost je tabela zapisov, ki ustreza ena-v-ena vhodnim tabelam.
Ta primer posodablja količino za več okusov v podatkovnem viru IceCream hkrati:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Rezultat je tabela s posodobljenimi zapisi: { ID: 1, Flavor: "Chocolate", Quantity: 300 } in { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Ta primer ustvari več novih zapisov z uporabo privzetih zapisov:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Pri uporabi Patch s tabelami mora biti število zapisov v vsaki tabeli sprememb enako številu zapisov v osnovni tabeli. V nasprotnem primeru pride do napake.
Za odkrivanje napak, ko spreminjate več zapisov, uporabite IfError.
IfError je prednostni mehanizem in deluje na gostiteljih Power Fx:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch s tipi stolpcov v Dataverse
Naslednji primeri veljajo posebej za Microsoft Dataverse podatkovne vire. Oblike zapisov se razlikujejo glede na vir podatkov (na primer SharePoint in SQL Server imata različne formate).
Izbirni stolpec: Za nastavitev stolpca Izbira uporabite neposredno vrednost enuma. Ta primer postavi stolpec izbire statusa v tabeli Računi :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Iskalni stolpec: Za nastavitev stolpca Lookup vnesite zapis s primarnim ključem ustrezne tabele. Ta primer postavi iskanje po primarnem stiku na zapis računov :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Ti primeri tipa stolpca so specifični za Dataverse. Drugi podatkovni viri, kot sta SharePoint ali SQL Server, lahko zahtevajo različne oblike zapisov za podobne vrste stolpcev. Za pravilen format se oglejte v dokumentacijo za vaš specifični vir podatkov.
Delegiranje v formulah, ki uporabljajo Patch
Funkcija Patch sama ni predmet delegiranja , ker piše v vir podatkov namesto da bi ga poizvedovala. Vendar pa se lahko opozorila o delegaciji pojavijo v formulah, ki uporabljajo Patch , če del formule za izbiro zapisov (kot so Filter, LookUp ali ForAll) vključuje poizvedbo, ki presega omejitve delegacije virov podatkov.
Ko vidite opozorilo o delegaciji v formuli, ki vključuje Patch, preverite, ali opozorilo velja za funkcije za pridobivanje podatkov in ne samo Patch sebe. Za več informacij o delegiranju glejte Razumite delegiranje v aplikaciji Canvas.
Pogoste napake pri funkciji Patch
Ko uporabljate funkcijo Patch , se lahko pojavijo napake zaradi povezljivosti z virom podatkov, dovoljenj ali konfliktov podatkov. Uporabite IfError in IsError za odkrivanje napak in ustrezno odzivanje.
"Omrežna napaka pri uporabi Patch funkcije": Ta napaka običajno pomeni, da aplikacija ne more doseči podatkovnega vira. Pogosti vzroki vključujejo izgubo internetne povezave, začasno nedosegljiv vir podatkov ali nezadostna dovoljenja za trenutnega uporabnika. Klic zavijte Patch v IfError , da uporabnikom zagotovite smiselno sporočilo.
"Obstajajo konflikti s spremembami na strežniku": Ta napaka nastane, ko drug uporabnik ali proces spremeni isti zapis med tem, ko vaša aplikacija prebere zapis in zapiše spremembo. Osvežite vir podatkov z klicem funkcije Osvežitev in ponovite operacijo.
Napake pri dovoljenjih: Če uporabnik nima dovoljenja za ustvarjanje ali spreminjanje zapisov v podatkovnem viru, klic Patch ne uspe. Uporabite IfError za odkrivanje napak, povezanih z dovoljenji, in usmerjanje uporabnika.
Za splošne vzorce ravnanja z napakami glejte Obravnavo napak.
Uporaba možnosti Kot ali ThisRecord
Uporabite ključno besedo As ali ThisRecord v formuli, da se izognete dvoumnemu kontekstu ocenjevanja.
V naslednjem primeru si oglejmo prvo Lookup v If izjavi.
(OrderID = A[@OrderID])pričakuje se, da bo primerjal v obsegu Lookup z zbiranjem AOrderId v obseguForAll.OrderId V tem primeru boste verjetno želeli A[@OrderId] rešiti kot lokalni parameter. A je dvoumno.
Power Apps trenutno interpretira tako levo stran OrderId kot desno stran A[@OrderId] kot polje v Lookup obsegu. Zato vedno najde Lookup prvo vrstico v, [dbo].[Orders1] ker je pogoj vedno resničen (to pomeni, da je vsaka vrstica OrderId enaka sama 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"
}
)
)
)
Uporaba možnosti As ali ThisRecord
Kadar je mogoče, uporabite operater As ali ključno besedo ThisRecord za razjasnitev leve strani. Kot je priporočljivo za prejšnji scenarij.
Ko vaša formula uporablja več obsegov z ForAll, Filter, in Lookup na istem viru podatkov ali tabeli, se lahko parametri obsega trčijo z istim poljem drugje. Zato uporabite operator As ali ThisRecord za razrešitev imena polja in se izognite dvoumnosti.
Na primer, v naslednjem primeru lahko uporabite operator As za razjasnitev.
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"
}
)
)
)
Za isti namen pa lahko uporabite tudi ThisRecord.
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"
}
)
)
)
Za več informacij o uporabi operatorja As in ThisRecord si oglejte članek Operators .