Patch-funktio
Koskee seuraavia: pohjaan perustuvat sovellukset Mallipohjaiset sovellukset Power Platform CLI Desktop -työnkulut
Muokkaa tietolähteentietuetta tai luo sellaisen tai yhdistää tietueita tietolähteen ulkopuolella.
Käytä Patch-funktiota tietueiden muokkaamiseksi 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.
Tässä videossa on tietoja Patch-funktion käytöstä:
Yleiskuvaus
Käytä Patch-funktiota muokkaamaan yhtä tai useampaa tietolähteen tietuetta. Tiettyjen kenttien arvoja muokataan vaikuttamatta muihin ominaisuuksiin. Esimerkiksi tämä kaava muuttaa Contoso-nimisen asiakkaan puhelinnumeroa:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Käytä Patch-funktiota Defaults-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" } )
Vaikka et työskentelisikään tietolähteen kanssa, voit käyttää Patch-funktiota 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" } )
Kuvaus
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 olla peräisin tietolähteestä. Perustietue saattaa olla peräisin valikoiman Items-ominaisuudesta, se saatettiin sijoittaa kontekstimuuttujan kautta tai se voi olla peräisin jostain muualta. Voit kuitenkin jäljittää perustietueen takaisin tietolähteeseen. Tämä on tärkeää, sillä tietue sisältää lisätietoja, jotka auttavat löytämään tietueen uudelleen muokkausta varten.
- 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.
Patch-funktion palautusarvo on tietue, jota muokkasit tai jonka loit. Jos loit tietueen, palautusarvo voi sisältää ominaisuuksia, joita 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ä funktioita IfError ja IsError palautusarvolla funktiosta Patch löytääksesi virheitä ja vastataksesi niihin Virheiden käsittelyssä kuvatulla tavalla. 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ä
Patchia voidaan käyttää myös useiden tietueiden luomiseen tai muokkaamiseen yhdellä kutsulla.
Yhden perustietueen välittämisen sijaan toisessa argumentissa voidaan antaa perustietueiden taulukko. Muutostietueet annetaan myös taulukkona, jonka tietueet vastaavat jokainen yhtä perustietuetta. Muutostaulukon tietueiden määrän täytyy vastata perustaulukon tietueiden määrää.
Kun Patch-funktiota käytetään tällä tavalla, palautusarvo on myös taulukko, jonka jokainen tietue vastaa yhtä perus- ja muutostietuetta.
Tietueiden yhdistäminen tietolähteen ulkopuolella
Määritä kaksi tai useampaa tietuetta, jotka haluat yhdistää. Tietueet käsitellään järjestyksessä argumenttiluettelon alusta loppuun niin, että myöhemmät ominaisuusarvot korvaavat aiemmat.
Patch palauttaa yhdistetyn tietueen eikä muokkaa sen argumentteja tai tietueita missään tietolähteessä.
Syntaksi
Tietueen luominen tai muokkaaminen tietolähteessä
Patch(tietolähde,BaseRecord,ChangeRecord1 [, ChangeRecord2 , ... ])
- Tietolähde – 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 on peräisin tietolähteestä, tietue etsitään ja sitä muokataan. Jos Defaults-funktion tulosta käytetään, tietue luodaan.
- ChangeRecords – pakollinen. Yksi tai useampi tietue, jotka sisältävät BaseRecordin muokattavat ominaisuudet. Muutostietueet käsitellään järjestyksessä argumenttiluettelon alusta loppuun niin, että myöhemmät ominaisuusarvot korvaavat aiemmat.
Tietueiden joukon luominen tai muokkaaminen tietolähteessä
Patch(DataSource,BaseRecordsTable,ChangeRecordTable1 [, ChangeRecordTable2 , ... ] )
- Tietolähde – 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 on peräisin tietolähteestä, tietue etsitään ja sitä muokataan. Jos Defaults-funktion tulosta käytetään, tietue luodaan.
- ChangeRecordTables – pakollinen. Yksi tai useampi tietueiden taulukko, jotka sisältävät BaseRecordTable-tietueiden muokattavat ominaisuudet. Muutostietueet käsitellään järjestyksessä argumenttiluettelon alusta loppuun niin, että myöhemmät ominaisuusarvot korvaavat aiemmat.
Tietueiden yhdistäminen
Patch( Tietue1,Tietue2 [, ...] )
- Tietueet - pakollinen. Vähintään kaksi tietuetta, jotka haluat yhdistää. Tietueet käsitellään järjestyksessä argumenttiluettelon alusta loppuun niin, että myöhemmät ominaisuusarvot korvaavat aiemmat.
Esimerkit
Tietueen luominen tai muokkaaminen (tietolähteessä)
Näissä esimerkeissä muokataan tietuetta tai luodaan se IceCream-nimisessä tietolähteessä, joka sisältää tämän taulukon tiedot, ja luodaan automaattisesti arvot ID-sarakkeessa:
Kaava | Description | Result |
---|---|---|
Laastari ( Jäätelö, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Muokkaa IceCream-tietolähteen tietuetta:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } IceCream-tietolähteen Chocolate-tietuetta on muokattu. |
Laastari (jäätelö, oletukset (jäätelö), { maku: "mansikka") } | Luo IceCream-tietolähteeseen tietueen:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } IceCream-tietolähteen Strawberry-tietue on luotu. |
Kun edelliset kaavat on arvioitu, tietolähteessä on lopulta nämä arvot:
Tietueiden yhdistäminen (tietolähteen ulkopuolella)
Kaava | Kuvaus | Tulos |
---|---|---|
Patch( { Nimi: "James", Pisteet: 90,Nimi } { : "Jim", Hyväksytty: true } ) | Yhdistää kaksi tietuetta tietolähteen ulkopuolella:
|
{ Name: "Jim", Score: 90, Passed: true } |
Käytössä As tai ThisRecord
Kun kaavassa käytetään avainsanana As tai ThisRecord, moniselitteinen arviointikontekstia ei muodostu.
Seuraavassa esimerkissä ensimmäisessä valinnassa on If
-lauseke. (OrderID = A[@OrderID])
odotetaan vertaavan OrderId
haun laajuutta OrderId
laajuuden kokoelmaan A
ForAll
. Tässä tapauksessa A[@OrderId]
halutaan todennäköisesti ratkaistavaksi paikallisena parametrina. Se on kuitenkin moniselitteinen.
Power Apps tulkitsee tällä hetkellä sekä vasemman puolen OrderId
-arvon että oikealla puolella olevan A[@OrderId]
-arvon kentäksi valinta-alueella. Tämän vuoksi valinta etsii aina ensimmäisen rivin kohdassa [dbo].[Orders1]
, koska ehto on aina tosi (sillä minkä tahansa rivin OrderId
on sama kuin se itse on).
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
Erota vasen puoli aina, kun se on mahdollista, As-operaattorilla tai ThisRecord-arvolla. Kuten edellä mainitussa skenaariossa suositellaan.
Kun kaava käyttää useita vaikutusalueita ForAll
-, Filter
- ja Lookup
-parametrien avulla samassa tietolähteessä tai taulukossa, on mahdollista, että vaikutusalueen parametrit voivat olla ristiriidassa saman kentän kanssa toisaalla. Niinpä kentän nimen ratkaisemiseen ja moniselitteisyyden välttämiseen kannattaa käyttää As-operaattoria tai ThisRecord-parametria.
Voit esimerkiksi käyttää As-operaattoria erottamiseen alla olevassa 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 ThisRecord-parametrin käyttämisestä on artikkelissa Operaattorit.