Märkus.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
Kehtib järgmise kohta: Lõuendirakendused
Copilot Studio
töölauavood
Mudelipõhised rakendused
Power Platform CLI
Dataverse'i funktsioonid
Muudab või loob kirjeandmeallikas või ühendab kirjed väljaspool andmeallikat.
Patch Selle funktsiooni abil saate muuta kirjeid keerulistes olukordades (nt kui teete värskendusi, mis ei nõua kasutaja sekkumist või mitut ekraani hõlmavaid vorme).
Kui soovite andmeallikas kirjeid lihtsate muudatuste jaoks kergemini värskendada, kasutage selle asemel funktsiooni Edit form. Kui lisate juhtelemendi Edit form, annate kasutajatele vormi, mis täidab ja seejärel salvestab muudatused andmeallikasse. Lisateavet leiate teemast Andmevormide mõistmine.
Sellest videost saate teada, kuidas funktsiooni kasutada.Patch
Overview
Selle Patch funktsiooni abil saate muuta andmeallika ühte või mitut kirjet. See uuendab konkreetsete väljade väärtusi ilma teisi omadusi mõjutamata. Näiteks muudab see valem kliendi nimega Contoso telefoninumbri.
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Kasutage Patch kirjete loomiseks funktsiooni Vaikesätted . Kasutage seda käitumist, et luua üks ekraan kirjete loomiseks ja redigeerimiseks. Näiteks loob see valem kliendi nimega Contoso jaoks kirje.
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Kui plaastrid kogu, kasutades andmeallikast pärit kirjet, mille väärtused on vaikeväärtused, uuendab plaastri operatsioon kogu nii määratud plaastri väärtustega kui ka andmeallika vaikimisi väärtustega. Patchi lause DataSource ja Defaults funktsiooni DataSource peavad sobima, et luua uus kirje.
Isegi kui te ei tööta andmeallikaga, saate seda kasutada Patch kahe või enama kirje ühendamiseks. Näiteks ühendab see valem kaks kirjet sellisena, mis tuvastab nii telefoni kui ka Contoso asukoha.
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Kirje muutmine ja loomine andmeallikas.
Selle funktsiooni kasutamiseks andmeallikas määrake andmeallikas ja määrake seejärel põhikirje.
- Kirje muutmiseks peab baaskirje pärinema andmeallikast. Võid saada baaskirje galerii Items omaduse kaudu, paigutada selle kontekstimuutujasse või saada selle mõne muu tee kaudu. Kuid sa pead suutma jälgida baaskirjet andmeallikani. See nõue on oluline, sest kirje sisaldab lisateavet, mis aitab sul kirjet uuesti leida ja neid muuta.
- Põhikirje loomiseks vaikeväärtustega kasutage funktsiooni Defaults.
Seejärel määrake üks või mitu muudatuste kirjet, millest igaüks sisaldab põhikirjes atribuudi väärtuste alistamiseks uusi atribuudi väärtusi. Kirjete muutmine toimub järjekorras argumentide loendi algusest kuni lõpuni, nii et hilisemad atribuudi väärtused alistavad varasemad.
Tagastatav Patch väärtus on kirje, mida te muutsite või lõite. Kui lõite kirje, võib tagastusväärtus sisaldada atribuute, mille andmeallikas automaatselt genereeris. Kuid tagastusväärtus ei anna seostuva tabeli väljadele väärtust.
Näiteks saate kasutada Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); ja seejärel MyAccount.'Primary Contact'.'Full Name'. Te ei saa antud juhul täisnime anda. Seostuva tabeli väljadele juurdepääsuks kasutage hoopis omaette otsingut, näiteks:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Andmeallika värskendamisel võib tekkida üks või mitu probleemi. Kasutage funktsiooni IfError ja IsError koos tagastatava väärtusega Patch tõrgete tuvastamiseks ja neile vastamiseks, nagu tõrketöötlus kirjeldab. Probleemide tuvastamiseks ja uurimiseks võite kasutada ka funktsiooni Tõrked, nagu Andmeallikatega töötamist kirjeldatakse.
Seostuvad funktsioonid sisaldavad funktsiooni Update, et asendada terve kirje, ja funktsiooni Collect kirje loomiseks. Kasutage funktsiooni UpdateIf, et muuta mitme kirje teatud atribuute vastavalt tingimusele.
Kirjete kogumi muutmine ja loomine andmeallikas.
Saad kasutada Patch ka mitme kirje loomiseks või muutmiseks ühe kõnega.
Selle asemel, et läbida üks baaskirje, esita teises argumendis baaskirjete tabel. Esita muudatuste kirjed ka tabelis, vastates üks-ühele baaskirjetega. Kirjete arv iga muudatusega tabelis peab olema sama, mis kirjete arv põhitabelis.
Sellisel viisil Patch kasutatakse tagastusväärtust ka tabelis, kus iga kirje vastab üks-ühele baas- ja muudatuskirjetega.
Kirjete ühendamine väljapoole andmeallikat
Määrake kaks või rohkem kirjet, mida soovite ühendada. Funktsioon töötleb kirjeid järjekorras argumendiloendi algusest lõpuni, kus hilisemad omadusväärtused ületavad varasemad.
Patch tagastab ühendatud kirje ega muuda oma argumente ega kirjeid üheski andmeallikas.
Syntax
Kirje muutmine ja loomine andmeallikas.
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource – nõutav. Andmeallikas, mis sisaldab muudetavat kirjet või sisaldab seda kirjet, mida soovite luua.
- BaseRecord – nõutav. Kirje, mida soovite muuta või luua. Kui kirje pärineb andmeallikast, leiab ja muudab funktsioon kirje. Kui kasutatakse vaikimisi tulemust, loob funktsioon kirje. Uue kirje loomiseks peavad paigalause DataSource ja funktsiooni Defaults andmeallikas kattuma.
- ChangeRecords – nõutav. Üks või mitu kirjet, mille atribuute on BaseRecordis vaja muuta. Funktsiooni protsessid muudavad kirjeid argumendiloendi algusest lõpuni, hilisemad omadusväärtused ületavad varasemad.
Kirjete kogumi muutmine ja loomine andmeallikas.
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – nõutav. Andmeallikas, mis sisaldab muudetavaid kirjeid või sisaldab neid kirjeid, mida soovite luua.
- BaseRecordTable – nõutav. Kirjete tabel, mida soovite muuta või luua. Kui kirje pärineb andmeallikast, leiab ja muudab funktsioon kirje. Kui kasutatakse vaikimisi tulemust, loob funktsioon kirje. Uue kirje loomiseks peavad paigalause DataSource ja funktsiooni Defaults andmeallikas kattuma.
- ChangeRecordTables – nõutav. Üks või mitu kirjete tabelit, mis sisaldavad atribuute tabeli BaseRecordTable kirjete muutmiseks. Funktsiooni protsessid muudavad kirjeid argumendiloendi algusest lõpuni, hilisemad omadusväärtused ületavad varasemad.
Merge records
Patch( Kirje1, Kirje2 [, ...] )
- Nõutavad kirjed . Valige ühendamiseks vähemalt kaks kirjet. Funktsioon töötleb kirjeid järjekorras argumentide nimekirja algusest lõpuni, kus hilisemad omadusväärtused ületavad varasemad.
Examples
Kirje muutmine ja loomine (andmeallikas).
Nendes näidetes muudetakse või lood kirje andmeallikas nimega IceCream. Andmeallikas sisaldab selle tabeli andmeid ja genereerib automaatselt väärtused IDveerus:
Selle andmeallika mälusisese versiooni loomiseks, et saaksid neid näiteid proovida, hinda seda valemit:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Jäätis, LookUp( Jäätis, maitse = „Šokolaad” ), { Kogus: 400 } ) |
Muudab kirje andmeallikas IceCream:
|
{ ID: 1, Maitse: „Šokolaad”, Kogus: 400 } Šokolaadi kirje IceCreami andmeallikas on muudetud. |
| Patch( IceCream, Defaults( IceCream ), { Maitse: "Maasikas" } ) | Loob kirje andmeallikas IceCream:
|
{ ID: 3, maitse: "maasikas", kogus: 0 } Maasika kirje IceCreami andmeallikas on loodud. |
Pärast eelnevate valemite hindamist lõpeb andmeallikas järgmiste väärtustega:
Kirjete ühendamine (väljapoole andmeallikat)
| Formula | Description | Result |
|---|---|---|
| Patch( { Name: "James", score: 90 }, { Name: "Jim", Läbitud: true } ) | Ühendab kaks kirjet väljapoole andmeallikat:
|
{ Nimi: „Jim”, Skoor: 90, Läbitud: tõsi } |
Muuda või loo kirjete komplekt (andmeallikas)
Kui kasutad Patch tabeliid üksikute kirjete asemel, saad luua või muuta mitut kirjet ühe kutsega. Tagastusväärtus on kirjete tabel, mis vastab üks-ühele sisendtabelitele.
See näide uuendab Amounti mitme maitse jaoks IceCreami andmeallikas korraga:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Tulemuseks on tabel uuendatud kirjetega: { ID: 1, Flavor: "Chocolate", Quantity: 300 } ja { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
See näide loob mitu uut kirjet, kasutades vaikimisi seadeid:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Kui kasutad Patch tabeleid, peab iga muudatustabeli kirjete arv vastama baastabeli kirjete arvule. Vastasel juhul tekib viga.
Vigade tuvastamiseks mitme kirje muutmisel kasuta IfErrori.
IfError on eelistatud mehhanism ja töötab Power Fx hostide vahel:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch Dataverse'i veergutüüpidega
Järgnevad näited kehtivad spetsiaalselt Microsoft Dataverse andmeallikate kohta. Kirjekujud varieeruvad andmeallika järgi (näiteks SharePoint ja SQL Server on erineva formaadiga).
Valikuveerg: Choice veeru määramiseks kasuta enum-väärtust otse. See näide seab Olekuvaliku veeru kontode tabelis:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Otsinguveerg: Otsinguveeru seadistamiseks esitage kirje, millel on seotud tabeli peamine võti. See näide esitab Kontode kirje esmase kontakti otsingu:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Need veergutüübi näited on Dataverse-spetsiifilised. Teised andmeallikad, nagu SharePoint või SQL Server, võivad vajada sarnaste veergutüüpide jaoks erinevaid kirjekujusid. Õige vormingu saamiseks vaata dokumentatsiooni oma konkreetse andmeallika kohta.
Delegeerimine valemites, mis kasutavad Patch
Funktsioon Patch ise ei ole delegeerimise all, sest see kirjutab andmeallikale, mitte ei päri seda. Siiski võivad delegeerimishoiatused ilmneda valemites, mis kasutavad Patch valemi kirjevaliku osa (näiteks Filter, LookUp või ForAll) päringut, mis ületab andmeallika delegeerimise piire.
Kui näete delegeerimise hoiatust valemis, mis sisaldab Patch, kontrollige, kas hoiatus kehtib andmete otsingu funktsioonidele, mitte Patch endale. Lisateabe saamiseks delegeerimise kohta vaata "Delegeerimise mõistmine lõuendirakenduses".
Funktsiooni levinumad vead Patch
Funktsiooni kasutamisel Patch võivad tekkida vead andmeallika ühenduvuse, õiguste või andmekonfliktide tõttu. Kasuta IfError ja IsError , et vigu tuvastada ja vastata õigesti.
"Võrguviga funktsiooni kasutamisel Patch ": See viga näitab tavaliselt, et rakendus ei pääse andmeallikani. Levinumad põhjused on internetiühenduse katkemine, andmeallika ajutine kättesaamatus või ebapiisavad õigused praegusele kasutajale. Mähkige Patch kõne IfError'i , et anda kasutajatele tähenduslik sõnum.
"Serveris esinevad konfliktid": See viga tekib siis, kui teine kasutaja või protsess muudab sama kirjet ajavahemikku, mil teie rakendus loeb kirje ja kirjutab muudatuse. Värskenda andmeallikat, kutsudes Refresh funktsiooni ja proovi operatsiooni uuesti.
Õiguste vead: Kui kasutajal puudub õigus andmeallikas kirjeid luua või muuta, ebaõnnestub Patch kõne. Kasuta IfErrori , et avastada õigusega seotud vigu ja juhendada kasutajat.
Üldiste veakäsitlusmustrite kohta vaata Veakäsitlus.
Tehtemärgi As või ThisRecord kasutamine
Kasuta oma valemis märksõna As või ThisRecord , et vältida ebamäärast hindamiskonteksti.
Järgmises näites vaatleme väite esimest LookupIf .
(OrderID = A[@OrderID])Eeldatakse, et võrreldakse LookupOrderId ulatust koguga AOrderId ulatusesForAll. Sellisel juhul tahad A[@OrderId] tõenäoliselt lahendada seda kohaliku parameetrina. Aga see on ebaselge.
Power Apps tõlgendab praegu nii vasakut poolt OrderId kui ka parempoolset A[@OrderId] välja Lookup sihikus. Seega Lookup leiab alati esimese rea, [dbo].[Orders1] sest tingimus on alati tõene (st iga rea OrderId on võrdne iseendaga).
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"
}
)
)
)
Tehtemärgi As või ThisRecord kasutamine
Võimalusel kasuta As-operaatorit või ThisRecord märksõna, et selgitada vasakut poolt. Nagu eelneva stsenaariumi puhul soovitatud.
Kui su valem kasutab mitut scope'i , ForAllFilter, ja Lookup samal andmeallikal või tabelil, võivad scope-parameetrid põrkuda sama väljaga mujal. Seetõttu kasuta As operaatorit või ThisRecordi , et lahendada välja nimi ja vältida ebaselgust.
Näiteks saate järgmises näites kasutada As operaatorit, et täpsustada.
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"
}
)
)
)
Teine võimalus on samal eesmärgil kasutada tehtemärki 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"
}
)
)
)
Lisateabe saamiseks As operaatori ja ThisRecordi kasutamise kohta vaadake artiklit Operaatorid .