Patch funktsioon rakenduses Power Apps

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

Kasutage funktsiooni Patch, et muuta kirjeid keerulistes olukordades. Näiteks kui teete värskendusi, mis ei vaja kasutaja sekkumist ega mitut ekraani hõlmavad vorme.

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.

Ü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 selle kliendi telefoninumbrit, kelle nimi on Contoso:

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 kirje kliendi jaoks, kelle nimi on Contoso:

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 üheks kirjeks, mis tuvastab nii telefoninumbri 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 funktsiooni Errors probleemide tuvastamiseks ja uurimiseks, nagu Töö andmeallikatega kirjeldab.

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.

Funktsiooni Patch saab kasutada ka mitme kirje loomiseks või muutmiseks ühe kutsumisega.

Ü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.

Patch tagastab ühendatud kirje ja ei 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.
  • ChangeRecord(s) – nõutav. Üks või mitu kirjet, mille atribuute on BaseRecord is 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.
  • ChangeRecordTable(s) – 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 [, …] )

  • Kirje(d) – nõutav. 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 ID veerus:

Näidis icecream

Valem Kirjeldus Tulemus
Patch( IceCream,
Lookup( IceCream, Flavor = "Chocolate" ), { Quantity: 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, Flavor: "Chocolate", Quantity: 400 }

Kirjet Chocolate andmeallikas IceCream on muudetud.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) 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, Flavor: "Strawberry", Quantity: 0 }

On loodud kirje Strawberry andmeallikas IceCream.

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

Näidis icecream pärast

Kirjete ühendamine (väljapoole andmeallikat)

Valem Kirjeldus Tulem
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Ü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).
{ Name: "Jim", Score: 90, Passed: true }

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]) on eeldatud, võrdlemaks väärtust OrderId otsingu ulatuses kogumi A väärtusega OrderId ulatuses 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. As on eespool nimetatud stsenaariumi korral soovitatav.

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.