Patch-funktio

Sovellettavissa seuraaviin: Pohjaan perustuvat sovellukset Mallipohjaiset sovellukset Power Platform CLI Työpöytä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ä

Patch-funktiota voidaan myös käyttää 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 minkään tietolähteen tietueita.

Syntaksi

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 on peräisin tietolähteestä, tietue etsitään ja sitä muokataan. Jos Defaults-funktion tulosta käytetään, tietue luodaan.
  • ChangeRecord(s) – 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, … ] )

  • 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 on peräisin tietolähteestä, tietue etsitään ja sitä muokataan. Jos Defaults-funktion tulosta käytetään, tietue luodaan.
  • ChangeRecordTable(s) – 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( Record1, Record2 [, …] )

  • Record(s) – 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:

Esimerkkinä icecream

Kaava Description Result
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
Muokkaa IceCream-tietolähteen tietuetta:
  • Muokattavan tietueen ID-sarake sisältää arvon 1. (Chocolate-tietueella on kyseinen ID.)
  • Quantity-sarakkeen arvoksi muuttuu 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

IceCream-tietolähteen Chocolate-tietuetta on muokattu.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) Luo IceCream-tietolähteeseen tietueen:
  • ID-sarake sisältää arvon 3, jonka tietolähde luo automaattisesti.
  • Quantity-sarake sisältää arvon 0, joka on kyseisen sarakkeen oletusarvo IceCream-tietolähteessä, kuten Defaults-funktio määrittää.
  • Flavor-sarake sisältää arvon Strawberry.
{ 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:

Esimerkkinä icecream myöhemmin.

Tietueiden yhdistäminen (tietolähteen ulkopuolella)

Kaava Kuvaus Tulos
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Yhdistää kaksi tietuetta tietolähteen ulkopuolella:
  • Tietueiden Name-sarakkeen arvot eivät täsmää. Tulos sisältää arvon (Jim) tietueessa, joka on lähempänä argumenttiluettelon loppua arvon (James) sijaan tietueessa, joka on lähempänä alkua.
  • Ensimmäinen tietue sisältää sarakkeen (Score), jota ei ole olemassa toisessa tietueessa. Tulos sisältää kyseisen sarakkeen arvollaan (90).
  • Toinen sarake sisältää sarakkeen (Passed), jota ei ole olemassa ensimmäisessä tietueessa. Tulos sisältää kyseisen sarakkeen arvollaan (true).
{ 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. Oletuksena on, että (OrderID = A[@OrderID]) vertaa valinta-alueen OrderId-arvoa kokoelman AOrderId-arvoon ForAll-alueella. 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. As-operaattorin käyttöä suositellaan edellä olevassa skenaariossa.

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.