Jagamisviis:


Plaastri funktsioon

Kehtib: Lõuendirakendused Mudelipõhised rakendused Power Platform CLI töölauavood

Muudab või loob kirje andmeallikas või ühendab kirjed väljaspool andmeallikat.

Kasutage funktsiooni Paigaldus, et muuta kirjeid keerulistes olukordades, näiteks kui teete värskendusi, mis ei nõua kasutaja sekkumist, või kui kasutate vorme, mis katavad mitut ekraani.

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.

Vaadake videost, kuidas kasutada Patch funktsiooni.

Ülevaade

Kasutage funktsiooni Patch, et muuta ühte või mitut kirjet andmeallikas. Teatud väljade väärtusi muudetakse ilma teisi atribuute mõjutamata. Näiteks muudab see valem kliendi nimega Contoso telefoninumbri.

Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )

Kasutage funktsiooni Patch koos Defaults, et luua kirjeid. 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" } )

Isegi juhul, kui te ei tööta andmeallikaga, saate Patch abil ühendada kaks või rohkem kirjet. 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" } )

Kirjeldus

Kirje muutmine ja loomine andmeallikas.

Selle funktsiooni kasutamiseks andmeallikas määrake andmeallikas ja määrake seejärel põhikirje.

  • Kirje muutmiseks peab põhikirje olema pärit andmeallikasst. Põhikirje võib olla tulnud läbi galerii Üksuste atribuudi, pandud konteksti muutujasse või tulnud mõne muu tee kaudu. Kuid saate põhikirjet jälgida tagasi andmeallikasse. See on oluline, kuna kirje sisaldab lisateavet, mis aitab kirjet uuesti muutmise jaoks leida.
  • 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.

Funktsiooni Patch tagastusväärtus on kirje, mille muutsite või lõite. Kui lõite kirje, võib tagastatav vää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 ilmneda üks või mitu probleemi. Kasutage IfError ja IsError tagastatava väärtusega Paigaldus st, et tuvastada vigu ja reageerida neile, nagu Veakäsitlus 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.

Paika saab kasutada ka mitme kirje loomiseks või muutmiseks ühe kõnega.

Ühe põhikirje edastamise asemel võib teise argumendina esitada põhikirjete tabeli. Kirjete muutmine on saadaval ka tabelina, mis vastab üks-ühele põhikirjetele. Kirjete arv iga muudatusega tabelis peab olema sama, mis kirjete arv põhitabelis.

Kui kasutate sel viisil funktsiooni Patch, on tagastamise väärtuseks ka tabel iga kirjega, mis vastab üks-ühele põhitabeliga ja muudetud kirjetega.

Kirjete ühendamine väljapoole andmeallikat

Määrake kaks või rohkem kirjet, mida soovite ühendada. Kirjed töödeldakse järjekorras argumentide loendi algusest kuni lõpuni, nii et hilisemad atribuudi väärtused alistavad varasemad.

Paik tagastab ühendatud kirje ega muuda selle argumente ega kirjeid üheski andmeallikas.

Süntaks

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, siis kirje leitakse ja muudetakse. Kui kasutatakse Defaults tulemit, luuakse kirje.
  • ChangeRecords – nõutav. Üks või mitu kirjet, mille atribuute on BaseRecordis vaja muuta. Kirjete muutmine toimub järjekorras argumentide loendi algusest kuni lõpuni, nii et hilisemad atribuudi väärtused alistavad 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, siis kirje leitakse ja muudetakse. Kui kasutatakse Defaults tulemit, luuakse kirje.
  • ChangeRecordTables – nõutav. Üks või mitu kirjete tabelit, mis sisaldavad atribuute tabeli BaseRecordTable kirjete muutmiseks. Kirjete muutmine toimub järjekorras argumentide loendi algusest kuni lõpuni, nii et hilisemad atribuudi väärtused alistavad varasemad.

Kirjete ühendamine

Patch( Record1; Record2 [, ...] )

  • Nõutavad kirjed . Valige ühendamiseks vähemalt kaks kirjet. Kirjed töödeldakse järjekorras argumentide loendi algusest kuni lõpuni, nii et hilisemad atribuudi väärtused alistavad varasemad.

Näited

Kirje muutmine ja loomine (andmeallikas).

Nendes näidetes muudate ja loote kirje andmeallikas nimega IceCream, mis sisaldab andmeid selles tabelis ja automaatselt loob väärtused IDveerus:

Näide jäätisest.

Valem Kirjeldus Tulemus
Plaaster( Jääkreem,
LookUp( Jäätis, maitse = „Šokolaad” ), { Kogus: 400 } )
Muudab kirje andmeallikas IceCream:
  • Kirje ID veerg, mida muuta, sisaldab väärtust 1. (Kirjel Chocolate on see ID.)
  • Väärtus veerus Kogus muutub väärtuseks 400.
{ ID: 1, Maitse: „Šokolaad”, Kogus: 400 }

Kirjet Chocolate andmeallikas IceCream on muudetud.
Patch( Jäätis, Defaults( IceCream ), { Maitse: "Maasikas" } ) Loob kirje andmeallikas IceCream:
  • Veerg ID sisaldab väärtust 3, mille andmeallikas loob automaatselt.
  • Veerg Kogus sisaldab 0, mis on vaikeväärtus sellele veerule andmeallikas IceCream, nagu funktsioon Defaults määrab.
  • Veerg Maitse sisaldab väärtust maasikas.
{ ID: 3, maitse: "maasikas", kogus: 0 }

On loodud kirje Strawberry andmeallikas IceCream.

Pärast eelmiste valemite hindamist lõpeb andmeallikas nende väärtustega.

Näide jääkreem pärast.

Kirjete ühendamine (väljapoole andmeallikat)

Valem Kirjeldus Tulem
Patch( { Nimi: "James", Skoor: 90,Nimi } { : "Jim", Möödas: tõsi } ) Ühendab kaks kirjet väljapoole andmeallikat:
  • Kõikide kirjete väärtused veerus Nimi ei ühti. Tulemiks on väärtus (Jim), mis on argumentide loendi lõpule lähemal, mitte selle kirje väärtus (James), mis on algusele lähemal.
  • Esimene kirje sisaldab veergu (Skoor), mida pole teisel kirjel olemas. Tulemiks on veerg selle väärtusega (90).
  • Teine kirje sisaldab veergu (Läbitud), mida pole esimesel kirjel olemas. Tulemiks on veerg väärtusega (tõene).
{ Nimi: „Jim”, Skoor: 90, Läbitud: tõsi }

Tehtemärgi As või ThisRecord kasutamine

Märksõna As või ThisRecord kasutamine valemis aitab vältida ebaselget hindamiskonteksti.

Allolevas näites vaadake esimest otsingut lauses If. (OrderID = A[@OrderID]) eeldatakse, et OrderId võrreldakse otsingu ulatust kogumise OrderId A ulatusega ForAll . Sel juhul soovite tõenäoliselt, et A[@OrderId] lahendataks kohaliku parameetrina. Aga see on ebaselge.

Power Apps tõlgendab praegu nii vasakpoolset väärtust OrderId kui ka parempoolset väärtust A[@OrderId] otsinguulatuse väljana. Seetõttu leiab otsing alati esimese rea kohas [dbo].[Orders1], kuna tingimus on alati tõene (see tähendab, et mis tahes 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

Kui võimalik, kasutage tehtemärki As või ThisRecord, et kõrvaldada vasaku poole ebaselgus. Nagu ülaltoodud stsenaariumi puhul soovitatakse.

Kui teie valem kasutab ühe ja sama andmeallika või tabeli puhul mitut ulatust koos funktsioonidega ForAll, Filter ja Lookup, on võimalik, et ulatuse parameetrid võivad sama väljaga kuskil mujal põrkuda. Seetõttu on soovitatav kasutada tehtemärki As või ThisRecord, et lahendada välja nimi ja vältida ebaselgust.

Näiteks saate kasutada tehtemärki As, et kõrvaldada allolevas näites ebaselgus.

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"
       }
   )
    )
)

Kui soovite lisateavet tehtemärkide As ja ThisRecord kohta, lugege artiklit Tehtemärgid.