Pastaba.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti prisijungti arba pakeisti katalogus.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti pakeisti katalogus.
Taikoma: "Canvas apps
Copilot Studio Desktop
" srautus
modeliu pagrįstos programos
"Power Platform" CLI
"Dataverse" funkcijos
Modifikuoja arba sukuria vieną ar kelis įrašusduomenų šaltinyje arba sulieja įrašus ne duomenų šaltinyje.
Patch Naudokite šią funkciją norėdami modifikuoti įrašus sudėtingose situacijose, pvz., kai atliekate naujinimus, kuriems nereikia vartotojo sąveikos, arba naudokite formas, apimančias kelis ekranus.
Jei norite duomenų šaltinio įrašus atnaujinti lengviau, atlikdami paprastus keitimus, geriau naudokite formos redagavimo valdiklį. Kai įtraukiate formos redagavimo valdiklį, vartotojams suteikiate formą, kurią jie gali užpildyti, o tada įrašyti pakeitimus duomenų šaltinyje. Norėdami gauti daugiau informacijos, žr. Duomenų formų supratimas.
Peržiūrėkite šį vaizdo įrašą ir sužinokite, kaip naudoti Patch funkciją:
Overview
Patch Naudokite funkciją norėdami modifikuoti vieną ar daugiau duomenų šaltinio įrašų. Jis atnaujina konkrečių laukų reikšmes nepaveikdamas kitų ypatybių. Pavyzdžiui, ši formulė pakeičia kliento, kurio pavadinimas yra „Contoso“, telefono numerį:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Naudokite Patch su funkcija Defaults įrašams kurti. Naudodami šį veikimo būdą, galite sukurti vieną ekraną įrašams tiek kurti, tiek redaguoti. Pavyzdžiui, ši formulė sukuria įrašą klientui, kurio pavadinimas yra „Contoso“:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Kai pataisote rinkinį naudodami įrašą iš duomenų šaltinio su numatytosiomis reikšmėmis, pataisos operacija atnaujina rinkinį nurodytomis pataisų reikšmėmis ir numatytosiomis reikšmėmis iš duomenų šaltinio. Norint sukurti naują įrašą, pataisos sakinio DataSource ir funkcijos Defaults DataSource turi sutapti.
Net jei nenaudojate duomenų šaltinio, galite sulieti Patch du ar daugiau įrašų. Pavyzdžiui, ši formulė du įrašus sulieja į vieną, kuriame identifikuojamas tiek „Contoso“ telefono numeris, tiek vietovė:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Įrašo modifikavimas arba sukūrimas duomenų šaltinyje
Norėdami šią funkciją naudoti su duomenų šaltiniu, nurodykite duomenų šaltinį, tada – pagrindinį įrašą:
- Norint modifikuoti įrašą, pagrindinis įrašas turi būti gautas iš duomenų šaltinio. Pagrindinį įrašą galite gauti naudodami galerijos ypatybę Elementai , įdėti jį į konteksto kintamąjį arba gauti kitu keliu. Tačiau turite turėti galimybę atsekti pagrindinį įrašą iki duomenų šaltinio. Šis reikalavimas svarbus, nes įraše yra papildomos informacijos, padedančios vėl rasti įrašą modifikuoti.
- Norėdami sukurti įrašą, naudodami funkciją Defaults sukurkite pagrindinį įrašą su numatytosiomis reikšmėmis.
Tada nurodykite vieną ar daugiau pakeitimo įrašų; kiekviename iš jų yra naujų ypatybių reikšmių, kurios perrašo ypatybių reikšmes pagrindiniame įraše. Pakeitimo įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.
Grąžinama reikšmė Patch yra įrašas, kurį modifikavote arba sukūrėte. Jei sukūrėte įrašą, grąžinamoje reikšmėje gali būti ypatybių, kurias automatiškai sugeneravo duomenų šaltinis. Tačiau grąžinama reikšmė nėra susijusios lentelės laukų reikšmė.
Pavyzdžiui, galite naudoti Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, o tada – MyAccount.'Primary Contact'.'Full Name'. Šiuo atveju negalite gauti vardo ir pavardės. Norėdami pasiekti susijusios lentelės laukus, naudokite atskirą peržvalgą, pvz.:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Kai atnaujinate duomenų šaltinį, gali kilti viena ar daugiau problemų. Naudokite IfError ir IsError su grąžinama reikšme, kad Patch aptiktumėte ir atsakytumėte į klaidas, kaip aprašyta klaidų apdorojimo aprašyme. Galite taip pat naudoti Klaidų funkciją, kad nustatytumėte ir ištirtumėte klaidas, kaip aprašo Darbas su duomenų šaltiniais skyrius.
Susijusios funkcijos yra funkcija Update, skirta visam įrašui pakeisti, ir funkcija Collect, skirta įrašui sukurti. Naudodami funkciją UpdateIf galite pagal sąlygą modifikuoti konkrečias kelių įrašų ypatybes.
Įrašų rinkinio modifikavimas arba sukūrimas duomenų šaltinyje
Taip pat galite naudoti Patch norėdami sukurti arba modifikuoti kelis įrašus vienu skambučiu.
Užuot perdavę vieną pagrindinį įrašą, antrajame argumente pateikite pagrindinių įrašų lentelę. Pateikti keitimų įrašus lentelėje taip pat, atitinkant pagrindinius įrašus vienas už vieną. Kiekvienos pakeitimo lentelės įrašų skaičius turi būti toks pats, kaip pagrindinės lentelės įrašų skaičius.
Kai naudojate Patch tokiu būdu, grąžinama reikšmė taip pat yra lentelė, kurioje kiekvienas įrašas atitinka pagrindinius ir keitimo įrašus.
Įrašų suliejimas ne duomenų šaltinyje
Nurodykite du ar daugiau norimų sulieti įrašų. Funkcija apdoroja įrašus tokia tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesnes.
Patch grąžina sulietą įrašą ir nemodifikuoja jo argumentų ar įrašų jokiuose duomenų šaltiniuose.
Syntax
Įrašo modifikavimas arba sukūrimas duomenų šaltinyje
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource - būtina. Duomenų šaltinis, kuriame yra norimas modifikuoti įrašas arba bus įrašas, kurį norite sukurti.
- "BaseRecord " – būtina. Įrašas, kurį norite modifikuoti arba sukurti. Jei įrašas gautas iš duomenų šaltinio, funkcija suranda ir modifikuoja įrašą. Jei naudojamas Numatytųjų reikšmių rezultatas, funkcija sukuria įrašą. Norint sukurti naują įrašą, pataisų sakinio DataSource ir Funkcijos Defaults DataSource reikšmės turi sutapti.
- "ChangeRecords " – būtina. Vienas ar daugiau įrašų, kuriuose yra modifikuotinų BaseRecord ypatybių. Funkcija apdoroja pakeitimų įrašus eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesnes.
Įrašų rinkinio modifikavimas arba sukūrimas duomenų šaltinyje
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource - būtina. Duomenų šaltinis, kuriame yra norimi modifikuoti įrašai arba bus įrašai, kuriuos norite sukurti.
- BaseRecordTable – būtina. Įrašų, kuriuos norite modifikuoti arba kurti, lentelė. Jei įrašas gautas iš duomenų šaltinio, funkcija suranda ir modifikuoja įrašą. Jei naudojamas Numatytųjų reikšmių rezultatas, funkcija sukuria įrašą. Norint sukurti naują įrašą, pataisų sakinio DataSource ir Funkcijos Defaults DataSource reikšmės turi sutapti.
- ChangeRecordTables – būtina. Viena arba kelios įrašų, kuriose yra modifikuotinų kiekvieno BaseRecordTable įrašo ypatybių, lentelės. Funkcija apdoroja pakeitimų įrašus eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesnes.
Merge records
Patch( Record1, Record2 [, ...] )
- Įrašai - Būtina. Bent du įrašai, kuriuos norite sulieti. Funkcija apdoroja įrašus eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesnes.
Examples
Įrašo modifikavimas arba sukūrimas (duomenų šaltinyje)
Šiuose pavyzdžiuose modifikuojate arba sukuriate įrašą duomenų šaltinyje, pavadintame Ledai. Duomenų šaltinyje yra šios lentelės duomenys ir automatiškai sugeneruojamos ID stulpelio reikšmės:
Norėdami sukurti atmintyje esančią šio duomenų šaltinio versiją, kad galėtumėte išbandyti šiuos pavyzdžius, įvertinkite šią formulę:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Ledkream, LookUp( Ledai, Skonis = "Šokoladas" ), { Kiekis: 400 } ) |
Modifikuoja įrašą duomenų šaltinyje Ledai:
|
{ ID: 1, Skonis: "Šokoladiniai", Kiekis: 400 } Ledų duomenų šaltinio įrašas Šokoladas modifikuojamas. |
| Patch( IceCream, Defaults( IceCream ), { Skonis: "Braškės" } ) | Sukuria įrašą duomenų šaltinyje Ledai:
|
{IID: 3, Flavor: "Strawberry", Quantity: 0 } Sukuriamas įrašas Strawberry duomenų šaltinyje IceCream . |
Įvertinus ankstesnes formules, duomenų šaltinis baigiasi šiomis reikšmėmis:
Įrašų suliejimas (ne duomenų šaltinyje)
| Formula | Description | Result |
|---|---|---|
| Patch( { pavadinimas: "James", Balas: 90 }, { pavadinimas: "Jim", Passed: true } ) | Sulieja du įrašus ne duomenų šaltinyje:
|
{ Vardas: "Džimas", Balas: 90, Įvykdė: teisinga } |
Įrašų rinkinio modifikavimas arba kūrimas (duomenų šaltinyje)
Kai naudojate Patch su lentelėmis, o ne su atskirais įrašais, galite sukurti arba modifikuoti kelis įrašus vienu skambučiu. Grąžinama reikšmė yra įrašų lentelė, atitinkanti įvesties lenteles.
Šiame pavyzdyje vienu metu atnaujinamas kelių skonių kiekis " IceCream " duomenų šaltinyje:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Rezultatas yra lentelė su atnaujintais įrašais: { ID: 1, Flavor: "Chocolate", Quantity: 300 } ir { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Šiame pavyzdyje sukuriami keli nauji įrašai naudojant numatytuosius parametrus:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Kai naudojate Patch su lentelėmis, įrašų skaičius kiekvienoje pakeitimų lentelėje turi atitikti pagrindinės lentelės įrašų skaičių. Priešingu atveju įvyksta klaida.
Norėdami aptikti klaidas, kai modifikuojate kelis įrašus, naudokite IfError.
IfError yra pageidaujamas mechanizmas ir veikia visuose "Power Fx" pagrindiniuose kompiuteriuose:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch su "Dataverse" stulpelių tipais
Toliau pateikti pavyzdžiai konkrečiai taikomi Microsoft Dataverse duomenų šaltiniams. Įrašų figūros skiriasi priklausomai nuo duomenų šaltinio (pvz., "SharePoint" ir "SQL Server" turi skirtingus formatus).
Pasirinkimo stulpelis: Norėdami nustatyti stulpelį Pasirinkimas, naudokite išvardijimo reikšmę tiesiogiai. Šiame pavyzdyje nustatomas stulpelis Būsenos pasirinkimas lentelėje Klientai :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Peržvalgos stulpelis: Norėdami nustatyti peržvalgos stulpelį, pateikite įrašą su susijusios lentelės pirminiu raktu. Šiame pavyzdyje nustatoma pagrindinio kontakto peržvalga klientų įraše:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Šie stulpelio tipo pavyzdžiai yra būdingi "Dataverse". Kitiems duomenų šaltiniams, pvz., "SharePoint" arba "SQL Server", gali reikėti skirtingų įrašų formų panašiems stulpelių tipams. Tinkamo formato ieškokite konkretaus duomenų šaltinio dokumentacijoje.
Delegavimas formulėse, kuriose naudojama Patch
Pati Patch funkcija nedeleguojama , nes ji rašo į duomenų šaltinį, o ne pateikia užklausą. Tačiau įspėjimai apie delegavimą gali būti rodomi formulėse, kurios naudojamos Patch , jei formulės įrašo pasirinkimo dalis (pvz., Filtras, Peržvalga arba ForAll) apima užklausą, viršijančią duomenų šaltinio perdavimo ribas.
Kai formulėje, kurioje yra Patch, matote įspėjimą apie delegavimą, patikrinkite, ar įspėjimas taikomas duomenų gavimo funkcijoms, o ne Patch sau. Daugiau informacijos apie perdavimą rasite Delegavimo supratimas drobės programoje.
Dažnos funkcijos klaidos Patch
Kai naudojate Patch funkciją, gali atsirasti klaidų dėl duomenų šaltinio ryšio, teisių ar duomenų konfliktų. Naudokite "IfError" ir "IsError", kad aptiktumėte klaidas ir tinkamai reaguotumėte.
"Tinklo klaida naudojant Patch funkciją": ši klaida paprastai rodo, kad programa negali pasiekti duomenų šaltinio. Dažniausios priežastys yra nutrūkęs interneto ryšys, laikinai nepasiekiamas duomenų šaltinis arba nepakankamos dabartinio vartotojo teisės. Apvyniokite skambutį PatchIfError , kad vartotojams pateiktumėte prasmingą pranešimą.
"Yra konfliktų su pakeitimais serveryje": ši klaida įvyksta, kai kitas vartotojas arba procesas modifikuoja tą patį įrašą nuo to laiko, kai programa nuskaito įrašą, iki pakeitimo įrašymo. Atnaujinkite duomenų šaltinį iškviesdami funkciją Atnaujinti ir pakartokite operaciją.
Teisių klaidos: jei vartotojas neturi teisės kurti arba modifikuoti įrašų duomenų šaltinyje, iškvietimas Patch nepavyksta. Naudokite "IfError ", kad pastebėtumėte su leidimais susijusias klaidas ir nukreiptumėte vartotoją.
Bendruosius klaidų apdorojimo modelius rasite Klaidų tvarkymas.
Naudokite As arba ThisRecord
Formulėje naudokite raktažodį As arba ThisRecord , kad išvengtumėte dviprasmiško vertinimo konteksto.
Šiame pavyzdyje apsvarstykite pirmąjį Lookup pareiškime If .
(OrderID = A[@OrderID]) tikimasi, OrderId kad palyginti taikymo Lookup sritį su OrderId surinkimo A į ForAll taikymo sritį. Tokiu atveju greičiausiai norėsite A[@OrderId] išspręsti kaip vietinį parametrą. Bet tai dviprasmiška.
Šiuo metu Power Apps interpretuoja kairę pusę OrderId ir dešinę pusę A[@OrderId] kaip Lookup taikymo srities lauką. Todėl Lookup visada randa pirmąją eilutę [dbo].[Orders1] , nes sąlyga visada yra teisinga (tai yra, bet kuri eilutė OrderId yra lygi sau).
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"
}
)
)
)
As arba ThisRecord naudojimas
Jei įmanoma, naudokite operatorių As arba raktinį žodį ThisRecord , kad išsklaidytumėte kairę pusę. Kaip rekomenduojama ankstesniam scenarijui.
Kai formulė naudoja kelias aprėptis su ForAll, Filterir Lookup tame pačiame duomenų šaltinyje arba lentelėje, aprėpties parametrai gali susidurti su tuo pačiu lauku kitur. Todėl naudokite operatorių As arba ThisRecord , kad išspręstumėte lauko pavadinimą ir išvengtumėte dviprasmybių.
Pavyzdžiui, galite naudoti operatorių As , kad išaiškintumėte dviprasmybę toliau pateiktame pavyzdyje.
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"
}
)
)
)
Kitu atveju, galite naudoti ThisRecord tuo pačiu tikslu.
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"
}
)
)
)
Norėdami sužinoti daugiau apie operatoriaus As ir ThisRecord naudojimą, žiūrėkite straipsnį Operatoriai .