Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Koskee seuraavia: Pohjaan perustuvat sovellukset
Copilot Studio
Desktop työnkulkuja
Mallipohjaiset sovellukset
Power Platform CLI
Dataverse -funktiot
Muokkaa tietolähteentietuetta tai luo sellaisen tai yhdistää tietueita tietolähteen ulkopuolella.
-funktion Patch avulla voit muokata tietueita monimutkaisissa tilanteissa, esimerkiksi kun teet päivityksiä, jotka eivät vaadi käyttäjän toimia, tai käytät lomakkeita, jotka ulottuvat usealle näytölle.
Jos haluat päivittää tietolähdetietueet helpommin yksinkertaisissa muutoksissa, käytä sen sijaan Edit form -ohjausobjektia. Kun lisäät Edit form -ohjausobjektin, tarjoat käyttäjille täytettävän lomakkeen, jonka muutokset tallennetaan tietolähteeseen. Lisätietoja on kohdassa Tutustu tietolomakkeisiin.
Katso tästä videosta, miten funktiota Patch käytetään:
Overview
-funktiolla Patch voit muokata yhtä tai useampaa tietolähteen tietuetta. Se päivittää tiettyjen kenttien arvot vaikuttamatta muihin ominaisuuksiin. Esimerkiksi tämä kaava muuttaa Contoso-nimisen asiakkaan puhelinnumeroa:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Käytetään PatchDefaults-funktion kanssa tietueiden luomiseen. Käytä tätä toimintaa rakentamaan yksi näyttö sekä tietueiden luomiseen että muokkaamiseen. Esimerkiksi tämä kaava luo tietueen asiakkaalle nimeltä Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Note
Kun korjaat kokoelman käyttämällä tietuetta tietolähteestä oletusarvoilla, korjausoperaatio päivittää kokoelman sekä määriteltyjen korjausarvojen että tietolähteen oletusarvoilla. Patch-lauseen DataSource ja Defaults-funktion DataSource täytyy täsmätä uuden tietueen luomiseksi.
Vaikka et työskentelisikään tietolähteen kanssa, voit käyttää tätä Patch kahden tai useamman tietueen yhdistämiseen. Esimerkiksi tämä kaava yhdistää kaksi tietuetta yhdeksi tietueeksi, joka sisältää sekä Contoson puhelinnumeron että sijainnin:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Description
Tietueen luominen tai muokkaaminen tietolähteessä
Määritä tietolähde ja sitten määritä perustietue tämän funktion käyttämiseksi tietolähteen kanssa:
- Tietueen muokkaamiseksi perustietueen täytyy tulla tietolähteestä. Voit saada perustietueen gallerian Items-ominaisuuden kautta, sijoittaa sen kontekstimuuttujaan tai saada sen jonkin muun reitin kautta. Mutta sinun täytyy pystyä jäljittämään perustietue takaisin tietolähteeseen. Tämä vaatimus on tärkeä, koska tietue sisältää lisätietoa, joka auttaa sinua löytämään tietueen uudelleen muokattavaksi.
- Luo tietue käyttämällä Defaults-funktiota perustietueen luomiseksi oletusarvoilla.
Määritä sitten yksi tai useampi muutostietue, jotka sisältävät uusia ominaisuusarvoja, jotka korvaavat perustietueen arvot. Muutostietueet käsitellään järjestyksessä argumenttiluettelon alusta loppuun niin, että myöhemmät ominaisuusarvot korvaavat aiemmat.
Palautusarvo Patch on tietue, jota muokkasit tai loit. Jos loit tietueen, palautusarvo saattaa sisältää ominaisuuksia, jotka tietolähde loi automaattisesti. Palautusarvo ei kuitenkaan anna arvoa liittyvän taulukon kentille.
Voit käyttää esimerkiksi Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); ja sitten MyAccount.'Primary Contact'.'Full Name'. Tässä tilanteessa ei voi tuottaa koko nimeä. Jos haluat käyttää liittyvän taulukon kenttiä, käytä erillistä valintaa, kuten
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Kun päivität tietolähdettä, voi esiintyä yksi tai useampi ongelma. Käytä IfError-funktiota ja IsError-funktiota paluuarvon Patch kanssa kohdassa virheiden havaitseminen ja niihin vastaaminen, kuten virheenkäsittely kuvailee. Voit myös käyttää Errors-funktiota ongelmien tunnistamiseen ja tarkasteluun, kuten kuvataan aiheessa Tietolähteiden kanssa työskentely.
Liittyviin funktioihin kuuluvat Update-funktio, jota voidaan käyttää kokonaisen tietueen korvaamiseen, sekä Collect-funktio, jota voidaan käyttää tietueen luomiseen. Voit käyttää UpdateIf-funktiota muokkaamaan useiden tietueiden tiettyjä ominaisuuksia ehdon perusteella.
Tietueiden joukon luominen tai muokkaaminen tietolähteessä
Voit myös luoda Patch tai muokata useita tietueita yhdellä kutsulla.
Sen sijaan, että läpäisisit yhden perustietueen, anna toisessa argumentissa taulukko perustietueista. Tarjoa myös muutostietueet taulukkoon, vastaten yksitellen perustietueiden kanssa. Muutostaulukon tietueiden määrän täytyy vastata perustaulukon tietueiden määrää.
Kun käytät Patch näin, palautusarvo on myös taulukko, jossa jokainen tietue vastaa yksitellen perus- ja muutostietueita.
Tietueiden yhdistäminen tietolähteen ulkopuolella
Määritä kaksi tai useampaa tietuetta, jotka haluat yhdistää. Funktio käsittelee tietueita järjestyksessä argumenttilistan alusta loppuun, ja myöhemmät ominaisuusarvot syrjäyttävät aiemmat.
Patch palauttaa yhdistetyn tietueen eikä muokkaa sen argumentteja tai minkään tietolähteen tietueita.
Syntax
Tietueen luominen tai muokkaaminen tietolähteessä
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- DataSource – Pakollinen. Tietolähde, joka sisältää tietueen, jota haluat muokata tai tulee sisältämään tietueen, jonka haluat luoda.
- BaseRecord – pakollinen. Muokattava tai luotava tietue. Jos tietue tuli tietolähteestä, funktio löytää ja muokkaa tietueen. Jos Defaults-tulosta käytetään, funktio luo tietueen. Korjaustiedostolausekkeen DataSource-tietolähteen ja Defaults-funktion DataSource-tietolähteen on vastattava toisiaan, jotta uusi tietue voidaan luoda.
- ChangeRecords – pakollinen. Yksi tai useampi tietue, jotka sisältävät BaseRecordin muokattavat ominaisuudet. Funktioprosessit muuttavat tietueita argumenttilistan alusta loppuun, ja myöhemmät ominaisuusarvot ohittavat aiemmat.
Tietueiden joukon luominen tai muokkaaminen tietolähteessä
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – Pakollinen. Tietolähde, joka sisältää tietueet, joita haluat muokata tai tulee sisältämään tietueet, jotka haluat luoda.
- BaseRecordTable – Pakollinen. Muokattavien tai luotavien tietueiden taulukko. Jos tietue tuli tietolähteestä, funktio löytää ja muokkaa tietueen. Jos Defaults-tulosta käytetään, funktio luo tietueen. Korjaustiedostolausekkeen DataSource-tietolähteen ja Defaults-funktion DataSource-tietolähteen on vastattava toisiaan, jotta uusi tietue voidaan luoda.
- ChangeRecordTables – pakollinen. Yksi tai useampi tietueiden taulukko, jotka sisältävät BaseRecordTable-tietueiden muokattavat ominaisuudet. Funktioprosessit muuttavat tietueita argumenttilistan alusta loppuun, ja myöhemmät ominaisuusarvot ohittavat aiemmat.
Merge records
Patch( Tietue1, Tietue2 [, ...] )
- Tietueet - pakollinen. Vähintään kaksi tietuetta, jotka haluat yhdistää. Funktio käsittelee tietueita järjestyksessä argumenttilistan alusta loppuun, ja myöhemmät ominaisuusarvot syrjäyttävät aiemmat.
Examples
Tietueen luominen tai muokkaaminen (tietolähteessä)
Näissä esimerkeissä muokkaat tai luot tietueen tietolähteeseen nimeltä IceCream. Tietolähde sisältää tämän taulukon tiedot ja generoi automaattisesti arvotID-sarakkeessa:
Luodaksesi muistiversion tästä tietolähteestä, jotta voit kokeilla näitä esimerkkejä, arvioi tämä kaava:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Jäätelö, LookUp ( Jäätelö, Maku = "Suklaa" ), { Määrä: 400 } ) |
Muokkaa IceCream-tietolähteen tietuetta:
|
{ ID: 1, Maku: "Suklaa", Määrä: 400 } SuklaamerkintääIceCream-tietolähteessä on muokattu. |
| Patch( Jäätelö, Defaults ( Jäätelö ), { Maku: "Mansikka" } ) | Luo IceCream-tietolähteeseen tietueen:
|
{ ID: 3, Maku: "Mansikka", Määrä: 0 } Strawberry-merkintäIceCream-tietolähteessä on luotu. |
Kun aiemmat kaavat on arvioitu, tietolähde päättyy seuraaviin arvoihin:
Tietueiden yhdistäminen (tietolähteen ulkopuolella)
| Formula | Description | Result |
|---|---|---|
| Patch( { Nimi: "James", Pistemäärä: 90 }, { Nimi: "Jim", Läpäissy: true } ) | Yhdistää kaksi tietuetta tietolähteen ulkopuolella:
|
{ Nimi: "Jim", Score: 90, Passed: true } |
Muokkaa tai luo joukko tietueita (tietolähteessä)
Kun käytät Patch taulukoita yksittäisten tietueiden sijaan, voit luoda tai muokata useita tietueita yhdellä kutsulla. Palautusarvo on tietuetaulukko, joka vastaa yksi yhteen syötetytappien kanssa.
Tämä esimerkki päivittää määrän useille mauille IceCream-tietolähteessä samanaikaisesti:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Tuloksena on taulukko, jossa on päivitetyt tietueet: { ID: 1, Flavor: "Chocolate", Quantity: 300 } ja { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Tämä esimerkki luo useita uusia tietueita oletuksena käyttäen:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Kun käytät Patch taulukoita, kunkin muutostaulukon tietueiden määrän on oltava sama kuin perustaulukon tietueiden määrä. Muuten tapahtuu virhe.
Virheiden tunnistamiseen, kun muokkaat useita tietueita, käytä IfErroria.
IfError on suosittu mekanismi ja toimii Power FX -isäntien välillä:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch Dataverse-saraketyypeillä
Seuraavat esimerkit koskevat erityisesti Microsoft Dataverse tietolähteitä. Tietueiden muodot vaihtelevat tietolähteen mukaan (esimerkiksi SharePoint ja SQL Server käyttävät eri muotoja).
Valintapalsta: Choice-sarakkeen asettamiseksi käytä enum-arvoa suoraan. Tämä esimerkki asettaa Tilavalinta-sarakkeen Tilit-taulukossa:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Haun sarakke: Lookup-sarakkeen asettamiseksi anna tietue, jossa on liittyvän taulukon pääavain. Tämä esimerkki esittää Ensisijaisen yhteystiedon haun tilitietueeseen:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Nämä saraketyyppiesimerkit ovat Dataverse-kohtaisia. Muut tietolähteet, kuten SharePoint tai SQL Server, saattavat vaatia erilaisia tietuemuotoja samankaltaisille saraketyypeille. Katso dokumentaatiosta juuri sinun tietolähteesi kohdalla oikean muodon löytämiseksi.
Delegointi kaavoissa, joissa käytetään Patch
Funktio Patch itsessään ei ole delegoinnin kohteena, koska se kirjoittaa tietolähteelle eikä kysele sitä. Delegointivaroitukset voivat kuitenkin näkyä kaavoissa, joita käytetään Patch , jos kaavan tietuevalintaosio (kuten Suodatin, LookUp tai ForAll) sisältää kyselyn, joka ylittää tietolähteiden delegointirajat.
Kun näet delegointivaroituksen kaavasta, joka sisältää Patch, tarkista, koskeeko varoitus tiedonhakufunktioita eikä Patch itseään. Lisätietoja delegoinnista löytyy kohdasta Ymmärrä delegointi canvas-sovelluksessa.
Yleisiä virheitä funktiossa Patch
Kun käytät funktiota Patch , virheitä voi ilmetä tietolähteiden yhteyden, käyttöoikeuksien tai tietoristiriitojen vuoksi. Käytä IfError - ja IsError-toimintoja virheiden tunnistamiseen ja asianmukaiseen reagointiin.
"Verkkovirhe funktiota käytettäessä Patch ": Tämä virhe tarkoittaa yleensä, ettei sovellus pääse tietolähteeseen. Yleisiä syitä ovat katkennut internet-yhteys, tietolähteen tilapäinen käyttökelpoisuus tai riittämättömät käyttöoikeudet nykyiselle käyttäjälle. Kääri Patch puhelu IfError-tilaan tarjotaksesi käyttäjille merkityksellisen viestin.
"Ristiriitoja palvelimen muutosten kanssa": Tämä virhe ilmenee, kun toinen käyttäjä tai prosessi muuttaa samaa tietuetta sen välillä, kun sovelluksesi lukee tietueen ja kirjoittaa muutoksen. Päivitä tietolähde kutsumalla Refresh-funktio ja yritä operaatiota uudelleen.
Käyttöoikeusvirheet: Jos käyttäjällä ei ole lupaa luoda tai muokata tietueita tietolähteessä, kutsu Patch epäonnistuu. Käytä IfErroria havaitaksesi käyttöoikeusvirheet ja ohjataksesi käyttäjää.
Yleisiä virheenkäsittelymalleja varten katso Virheiden käsittely.
Käytössä As tai ThisRecord
Käytä kaavaasi As- tai ThisRecord-avainsanaa välttääksesi epäselvän arviointikontekstin.
Seuraavassa esimerkissä tarkastellaan lauseen ensimmäistä LookupIf kohtaa.
(OrderID = A[@OrderID]) Odotetaan, että vertaillaan OrderIdLookup laajuutta ja OrderId kokoelmaa A laajuudessa ForAll . Tässä tapauksessa haluat A[@OrderId] todennäköisesti ratkaista paikallisena parametrina. Mutta se on epäselvää.
Power Apps tulkitsee tällä hetkellä sekä vasemman puolen OrderId että oikean puolen A[@OrderId] kenttänä Lookup-skoopissa. Näin ollen Lookup löytää aina ensimmäisen rivin joukossa [dbo].[Orders1] , koska ehto on aina tosi (eli jokainen rivi OrderId on yhtä suuri kuin itsensä).
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"
}
)
)
)
Käytössä As tai ThisRecord
Aina kun mahdollista, käytä As-operaattoria tai ThisRecord-avainsanaa vasen puolen täsmentämiseen. Kuten edellisessä tilanteessa suositellaan.
Kun kaava käyttää useita scope-alueita, joissa ForAll, Filter, ja Lookup samassa tietolähteessä tai taulukossa, scope-parametrit voivat törmätä samaan kenttään muualla. Siksi käytä As-operaattoria tai ThisRecordia kentän nimen ratkaisemiseen ja epäselvyyden välttämiseen.
Esimerkiksi voit käyttää As-operaattoria täsmentääksesi seuraavassa esimerkissä.
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"
}
)
)
)
Vaihtoehtoisesti voit käyttää ThisRecord-parametria samaan tarkoitukseen.
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"
}
)
)
)
Lisätietoja As-operaattorin ja ThisRecordin käytöstä löydät Operaattorit-artikkelista.