Piezīmes
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt pierakstīties vai mainīt direktorijus.
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt mainīt direktorijus.
Attiecas uz: Audekla programmas
Copilot Studio
Desktop plūsmas
Modeļa vadītas programmas
Power Platform CLI
Dataverse funkcijas
Modificē vai izveido vienu vai vairākus ierakstusdatu avotā vai sapludina ierakstus ārpus datu avota.
Izmantojiet šo Patch funkciju, lai modificētu ierakstus sarežģītās situācijās, piemēram, veicot atjauninājumus, kuriem nav nepieciešama lietotāja mijiedarbība, vai izmantojot veidlapas, kas aptver vairākus ekrānus.
Lai vieglāk atjauninātu ierakstus datu avotā un veiktu vienkāršas izmaiņas, tā vietā izmantojiet vadīklu Rediģēt veidlapu. Pievienojot vadīklu Rediģēt veidlapu, jūs nodrošināt lietotājiem aizpildāmo veidlapu un pēc tam saglabājat datu avota izmaiņas. Papildinformāciju skatiet tēmā Datu veidlapu izkārtojuma izprašana.
Noskatieties šo videoklipu, lai uzzinātu, kā izmantot Patch šo funkciju:
Overview
Izmantojiet šo funkciju, Patch lai modificētu vienu vai vairākus datu avota ierakstus. Tas atjaunina konkrētu lauku vērtības, neietekmējot citus rekvizītus. Piemēram, šī formula maina tālruņa numuru klientam ar nosaukumu Bērziņš:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Izmantojiet Patch funkciju Defaults , lai izveidotu ierakstus. Izmantojiet šo uzvedību, lai izveidotu vienu ekrānu gan ierakstu izveidei, gan rediģēšanai. Piemēram, šī formula izveido ierakstu klientam ar nosaukumu Bērziņš:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Ielāpējot kolekciju, izmantojot ierakstu no datu avota ar noklusējuma vērtībām, ielāpu operācija atjaunina kolekciju gan ar norādītajām ielāpu vērtībām, gan noklusējuma vērtībām no datu avota. Lai izveidotu jaunu ierakstu, plākstera priekšraksta DataSource un funkcijas Defaults DataSource ir jāsakrīt.
Pat ja nestrādājat ar datu avotu, varat to izmantot Patch , lai sapludinātu divus vai vairākus ierakstus. Piemēram, šī formula sapludina divus ierakstus vienā, kas identificē gan tālruņa numuru gan atrašanās vietu klientam Bērziņš:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Ieraksta modificēšana vai izveide datu avotā
Lai izmantotu šo funkciju ar datu avotu, norādiet datu avotu un pēc tam norādiet pamatierakstu:
- Lai modificētu ierakstu, pamatierakstam ir jābūt no datu avota. Pamatierakstu var iegūt, izmantojot galerijas rekvizītu Items , ievietot to konteksta mainīgajā vai iegūt, izmantojot kādu citu ceļu. Taču ir jāspēj izsekot pamatierakstam līdz datu avotam. Šī prasība ir svarīga, jo ierakstā ir iekļauta papildu informācija, kas palīdz vēlreiz atrast ierakstu modificēšanai.
- Lai izveidotu ierakstu, izmantojiet funkciju Defaults, lai izveidotu pamatierakstu ar noklusējuma vērtībām.
Pēc tam norādiet vienu vai vairākus izmaiņu ierakstus, no kuriem katrs satur jaunas rekvizītu vērtības, kuras ignorē rekvizīta vērtības pamatierakstā. Izmaiņu ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.
Atgrieztā vērtība ir Patch ieraksts, kuru modificējāt vai izveidojāt. Ja izveidojāt ierakstu, atgrieztajā vērtībā var būt iekļauti rekvizīti, kurus datu avots ģenerēja automātiski. Taču atgrieztā vērtība nenodrošina vērtību saistītas tabulas laukiem.
Piemēram, jūs izmantojat Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); un pēc tam MyAccount.'Primary Contact'.'Full Name'. Šajā gadījumā nevarat piešķirt pilno vārdu. Lai piekļūtu saistītās tabulas laukiem, izmantojiet atsevišķu uzmeklēšanu, piemēram:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Atjauninot datu avotu, var rasties viena vai vairākas problēmas. Izmantojiet IfError un IsError ar atgriezto vērtību from Patch , lai atklātu kļūdas un reaģētu uz tām, kā aprakstīts kļūdu apstrādē . Tāpat jūs varat izmantot funkciju Kļūmes, lai identificētu un izpētītu problēmas, kā aprakstīts sadaļā Darbs ar datu avotiem.
Saistītās funkcijas ietver funkciju Update, lai aizstātu visu ierakstu, un funkciju Collect, lai izveidotu ierakstu. Izmantojiet funkciju UpdateIf, lai modificētu konkrētus vairāku ierakstu rekvizītus, pamatojoties uz nosacījumu.
Ierakstu kopas modificēšana vai izveide datu avotā
Varat arī izmantot Patch , lai izveidotu vai modificētu vairākus ierakstus ar vienu zvanu.
Tā vietā, lai nodotu vienu pamatierakstu, otrajā argumentā norādiet pamatierakstu tabulu. Norādiet izmaiņu ierakstus arī tabulā, kas atbilst pamata ierakstiem viens pret vienu. Ierakstu skaitam katrā izmaiņu tabulā ir jābūt tādam pašam kā ierakstu skaitam pamata tabulā.
Ja izmantojat Patch šādā veidā, atgrieztā vērtība ir arī tabula, kurā katrs ieraksts viens pret vienu atbilst bāzes un izmaiņu ierakstiem.
Ierakstu sapludināšana ārpus datu avota
Norādiet divus vai vairākus ierakstus, kurus vēlaties sapludināt. Funkcija apstrādā ierakstus secībā no argumentu saraksta sākuma līdz beigām, bet vēlākās rekvizītu vērtības ignorē agrākās.
Patch Atgriež sapludināto ierakstu un nemodificē tā argumentus vai ierakstus nevienā datu avotā.
Syntax
Ieraksta modificēšana vai izveide datu avotā
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource - Obligāts. Datu avots, kurā ir ieraksts, kuru vēlaties modificēt vai saturēs ierakstu, kuru vēlaties izveidot.
- BaseRecord - Obligāts. Ieraksts, kuru modificēt vai izveidot. Ja ieraksts ir no datu avota, funkcija atrod un modificē ierakstu. Ja tiek izmantots noklusējuma rezultāts, funkcija izveido ierakstu. Lai izveidotu jaunu ierakstu, plākstera priekšraksta DataSource un funkcijas Defaults DataSource ir jāsakrīt.
- ChangeRecords - Obligāts. Viens vai vairāki ieraksti, kuros ir rekvizīti, kas jāmodificē BaseRecord. Funkcija apstrādā izmaiņu ierakstus secībā no argumentu saraksta sākuma līdz beigām, bet vēlākās rekvizītu vērtības ignorē agrākās.
Ierakstu kopas modificēšana vai izveide datu avotā
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource - Obligāts. Datu avots, kurā ir ieraksti, kurus vēlaties modificēt vai saturēs ieraksti, kurus vēlaties izveidot.
- BaseRecordTable - Obligāts. Ierakstu tabula, kas jāmodificē vai jāveido. Ja ieraksts ir no datu avota, funkcija atrod un modificē ierakstu. Ja tiek izmantots noklusējuma rezultāts, funkcija izveido ierakstu. Lai izveidotu jaunu ierakstu, plākstera priekšraksta DataSource un funkcijas Defaults DataSource ir jāsakrīt.
- ChangeRecordTables - Obligāts. Viena vai vairākas ierakstu tabulas, kas satur rekvizītus, kurus modificēt katram BaseRecordTable ierakstam. Funkcija apstrādā izmaiņu ierakstus secībā no argumentu saraksta sākuma līdz beigām, bet vēlākās rekvizītu vērtības ignorē agrākās.
Merge records
Patch( Ieraksts1, Ieraksts2 [, ...] )
- Ieraksti - Obligāti. Vismaz divi ieraksti, kurus vēlaties sapludināt. Funkcija apstrādā ierakstus secībā no argumentu saraksta sākuma līdz beigām, bet vēlākās rekvizītu vērtības ignorē agrākās.
Examples
Ieraksta modificēšana vai izveide (datu avotā)
Šajos piemēros jūs modificējat vai izveidojat ierakstu datu avotā ar nosaukumu IceCream. Datu avots satur datus šajā tabulā un automātiski ģenerē vērtības kolonnā ID:
Lai izveidotu šī datu avota atmiņas versiju, lai varētu izmēģināt šos piemērus, novērtējiet šo formulu:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Saldējums, LookUp( IceCream, Garša = "Šokolādes" ), { Daudzums: 400 }) |
Modificē ieraksta datu avotu IceCream:
|
{ ID: 1, Garša: "Šokolāde", Daudzums: 400 } Ieraksts Šokolāde datu avotā IceCream tiek modificēts. |
| Patch( Saldējums, Noklusējumi( Saldējums ), { Garša: "Zemeņu" } ) | Izveido ierakstu datu avotā IceCream:
|
{ ID: 3, Flavor: "Zemeņu", Daudzums: 0 } Tiek izveidots ieraksts Zemeņu datu avotā IceCream . |
Pēc iepriekšējo formulu novērtēšanas datu avots beidzas ar šādām vērtībām:
Ierakstu sapludināšana (ārpus datu avota)
| Formula | Description | Result |
|---|---|---|
| Patch( { Vārds: "Džeimss", Rezultāts: 90 }, { Vārds: "Džims", Nodots: patiess } ) | Sapludina divus ierakstus ārpus datu avota:
|
{ Vārds:"Rihards", Rezultāts: 90, Nodots: true } |
Ierakstu kopas modificēšana vai izveide (datu avotā)
Ja izmantojat Patch tabulas, nevis atsevišķus ierakstus, vienā zvanā var izveidot vai modificēt vairākus ierakstus. Atgrieztā vērtība ir ierakstu tabula, kas viens pret vienu atbilst ievades tabulām.
Šajā piemērā tiek atjaunināts vairāku garšu daudzums datu avotā IceCream vienlaikus:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Rezultāts ir tabula ar atjauninātajiem ierakstiem: { ID: 1, Flavor: "Chocolate", Quantity: 300 } un { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Šajā piemērā tiek izveidoti vairāki jauni ieraksti , izmantojot noklusējumus:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Lietojot Patch ar tabulām, ierakstu skaitam katrā izmaiņu tabulā jāatbilst ierakstu skaitam pamattabulā. Pretējā gadījumā rodas kļūda.
Lai noteiktu kļūdas, modificējot vairākus ierakstus, izmantojiet IfError.
IfError ir vēlamais mehānisms un darbojas Power Fx resursdatoros:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch ar Dataverse kolonnu tipiem
Tālāk sniegtie piemēri attiecas tieši uz Microsoft Dataverse datu avotiem. Ierakstu formas atšķiras atkarībā no datu avota (piemēram, SharePoint un SQL Server ir dažādi formāti).
Kolonna Izvēle: Lai iestatītu kolonnu Izvēle, tieši izmantojiet uzskaitījuma vērtību. Šajā piemērā tabulā Konti ir iestatīta kolonna Statusa izvēle:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Uzmeklēšanas kolonna: Lai iestatītu uzmeklēšanas kolonnu, norādiet ierakstu ar saistītās tabulas primāro atslēgu. Šajā piemērā tiek iestatīta primārās kontaktpersonas uzmeklēšana kontu ierakstā:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Šie kolonnu tipa piemēri ir specifiski Dataverse. Citiem datu avotiem, piemēram, SharePoint vai SQL Server, var būt nepieciešamas atšķirīgas ierakstu formas līdzīgiem kolonnu tipiem. Skatiet konkrētā datu avota dokumentāciju, lai uzzinātu pareizo formātu.
Deleģēšana formulās, kurās tiek izmantots Patch
Pati Patch funkcija nav pakļauta deleģēšanai , jo tā raksta datu avotā, nevis vaicā. Tomēr deleģēšanas brīdinājumi var tikt parādīti formulās, kas tiek izmantotas Patch , ja formulas ierakstu atlases daļa (piemēram, Filtrs, Uzmeklēšana vai ForAll) ietver vaicājumu, kas pārsniedz datu avota deleģēšanas ierobežojumus.
Ja formulā, kurā ir iekļauts Patch, redzat deleģēšanas brīdinājumu, pārbaudiet, vai brīdinājums attiecas uz datu izgūšanas funkcijām, nevis uz Patch sevi. Papildinformāciju par deleģēšanu skatiet sadaļā Izpratne par deleģēšanu audekla programmā.
Bieži sastopamās Patch kļūdas ar funkciju
Lietojot Patch šo funkciju, kļūdas var rasties datu avota savienojamības, atļauju vai datu konfliktu dēļ. Izmantojiet IfError un IsError , lai atklātu kļūdas un atbilstoši reaģētu.
"Tīkla kļūda, izmantojot Patch funkciju": šī kļūda parasti norāda, ka programma nevar sasniegt datu avotu. Biežākie iemesli ir zaudēts interneta savienojums, datu avota īslaicīga nepieejamība vai nepietiekamas atļaujas pašreizējam lietotājam. Aplauziet zvanu Patchprogrammā IfError , lai lietotājiem sniegtu jēgpilnu ziņojumu.
"Pastāv konflikti ar izmaiņām serverī": šī kļūda rodas, ja cits lietotājs vai process modificē to pašu ierakstu laikā no brīža, kad programma nolasa ierakstu un ieraksta izmaiņas. Atsvaidziniet datu avotu, izsaucot funkciju Atsvaidzināt , un mēģiniet veikt darbību vēlreiz.
Atļauju kļūdas: ja lietotājam nav atļaujas izveidot vai modificēt ierakstus datu avotā, Patch izsaukums neizdodas. Izmantojiet IfError , lai uztvertu ar atļaujām saistītās kļūdas un vadītu lietotāju.
Vispārīgus kļūdu apstrādes modeļus skatiet sadaļā Kļūdu apstrāde.
As vai ThisRecord lietošana
Izmantojiet formulā atslēgvārdu As vai ThisRecord , lai izvairītos no neskaidra vērtēšanas konteksta.
Nākamajā piemērā apsveriet pirmo LookupIf paziņojumu.
(OrderID = A[@OrderID]) ir sagaidāms, OrderId ka salīdzinās darbības Lookup jomā ar OrderId iekasēšanu AForAll darbības jomā. Šajā gadījumā, visticamāk, vēlaties A[@OrderId] atrisināt kā lokālu parametru. Bet tas ir neskaidrs.
Power Apps pašlaik interpretē gan kreiso pusi OrderId, gan labo pusi A[@OrderId] kā lauku Lookup tvērumā. Tāpēc Lookup vienmēr atrod pirmo rindu [dbo].[Orders1] , jo nosacījums vienmēr ir patiess (tas ir, jebkura rinda ir vienāda OrderId ar sevi).
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 vai ThisRecord lietošana
Kad vien iespējams, izmantojiet operatoru As vai atslēgvārdu ThisRecord , lai izskaidrotu kreiso pusi. Kā ieteikts iepriekšējam scenārijam.
Ja formulā tiek izmantoti vairāki tvērumi ar ForAll, Filterun Lookup vienā datu avotā vai tabulā, tvēruma parametri var sadurties ar vienu un to pašu lauku citur. Tāpēc izmantojiet operatoru As vai ThisRecord , lai atrisinātu lauka nosaukumu un izvairītos no neskaidrībām.
Piemēram, varat izmantot operatoru As , lai izskaidrotu neskaidrības nākamajā piemērā.
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"
}
)
)
)
Tāpat šim nolūkam varat izmantot 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"
}
)
)
)
Lai uzzinātu vairāk par operatora As un ThisRecord lietošanu, skatiet rakstu Operatori .