Share via


Funkcija »Patch«

Velja za: Aplikacije Canvas Aplikacije, ki temeljijo na modelu Power Platform CLI Tokovi namizja

Spremeni ali ustvari enega ali več zapisov v viru podatkov ali združi zapise zunaj vira podatkov.

Uporabite funkcijo Patch za spreminjanje zapisov v zapletenih situacijah, na primer pri izvajanju posodobitev, pri katerih niso zahtevane nobene interakcije uporabnika, ali pri uporabi obrazcev, ki zajemajo več zaslonov.

Za lažje posodabljanje zapisov v viru podatkov za enostavne spremembe uporabite kontrolnik Edit form. Ko dodate kontrolnik Edit form, uporabnikom zagotovite obrazec, ki ga izpolnijo, in nato shranite spremembe v vir podatkov. Če želite več informacij, glejte Razumevanje podatkovnih obrazcev.

Oglejte si ta videoposnetek, če želite izvedeti, kako uporabljati funkcijo Patch:

Pregled

Uporabite funkcijo Patch in spremenite enega ali več zapisov vira podatkov. Vrednosti določenih polj so spremenjene, ne da bi vplivale na druge lastnosti. Ta formula na primer spremeni telefonsko številko za stranko z imenom Contoso:

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

Uporabite funkcijo Patch skupaj s funkcijo Defaults in ustvarite zapise. To delovanje uporabite za razvoj enega zaslona za ustvarjanje in za urejanje zapisov. Ta formula na primer ustvari zapis za stranko z imenom Contoso:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Tudi če ne delate z virom podatkov, lahko uporabite funkcijo Patch za združevanje dveh ali več zapisov. Ta formula na primer združi dva zapisa v enega, ki določa tako telefonsko številko kot lokacijo za stranko Contoso:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

Opis

Spreminjanje ali ustvarjanje zapisa v viru podatkov

Če želite uporabljati to funkcijo z virom podatkov, navedite vir podatkov in nato še osnovni zapis:

  • Če želite spremeniti zapis, mora osnovni zapis izvirati iz vira podatkov. Osnovni zapis je bil morda pridobljen prek lastnosti galerije Items in bil vnesen v spremenljivko konteksta ali pa je bil pridobljen po kakšni drugi poti. Vendar pa lahko izsledite osnovni zapis nazaj v vir podatkov. To je pomembno, saj bo zapis vseboval dodatne informacije za vnovično iskanje zapisa za spremembo.
  • Če želite ustvariti zapis, uporabite funkcijo Defaults in ustvarite osnovni zapis s privzetimi vrednostmi.

Nato določite enega ali več zapisov sprememb, pri čemer vsak vsebuje nove vrednosti lastnosti, ki preglasijo vrednosti lastnosti v osnovnem zapisu. Spremenjeni zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.

Vrnjena vrednost funkcije Patch je zapis, ki ste ga spremenili ali ustvarili. Če ste ustvarili zapis, lahko vrnjena vrednost vključuje lastnosti, ki jih je vir podatkov ustvaril samodejno. Vendar vrnjena vrednost ne zagotavlja vrednosti za polja povezane tabele.

Uporabite na primer Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); in nato MyAccount.'Primary Contact'.'Full Name'. V tem primeru ne morete vrniti polnega imena. Namesto tega za dostop do polj povezane tabele uporabite ločeno iskanje, na primer:

LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'

Ko posodobite vir podatkov, lahko pride do ene ali več težav. Uporabite IfError in IsError s povratno vrednostjo iz Patch za odkrivanje napak in odzivanje nanje, kot je opisano v razdelku Obravnavanje napak . Uporabite lahko tudi funkcijo Errors za prepoznavanje in preučevanje težav, kot je opisano v članku Delo z viri podatkov.

Povezane funkcije vključujejo funkcijo Update za zamenjavo celotnega zapisa in funkcijo Collect za ustvarjanje zapisa. Uporabite funkcijo UpdateIf in spremenite določene lastnosti več zapisov glede na pogoj.

Spreminjanje ali ustvarjanje nabora zapisov v viru podatkov

Funkcija Patch se lahko uporablja tudi za ustvarjanje ali spreminjanje več zapisov z enim klicem.

Namesto posredovanja enega osnovnega zapisa je lahko v drugem argumentu navedena tabela osnovnih zapisov. Zapisi sprememb so prav tako navedeni v tabeli in se ujemajo z osnovnimi zapisi. Število zapisov v vsaki tabeli sprememb mora biti enako številu zapisov v osnovni tabeli.

Če uporabljate funkcijo Patch na ta način, je vrnjena vrednost tudi tabela z zapisi, ki se ujemajo z osnovnimi zapisi in zapisi sprememb.

Združevanje zapisov zunaj vira podatkov

Določite dva ali več zapisov, ki jih želite združiti. Zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.

Funkcija Patch vrne združeni zapis in ne spremeni svojih argumentov ali zapisov v nobenem viru podatkov.

Sintaksa

Spreminjanje ali ustvarjanje zapisa v viru podatkov

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])

  • DataSource – obvezno. Vir podatkov, ki vsebuje zapis, ki ga želite spremeniti, ali bo vseboval zapis, ki ga želite ustvariti.
  • BaseRecord – obvezno. Zapis za spreminjanje ali ustvarjanje. Če je zapis pridobljen iz vira podatkov, je najden in spremenjen. Če se uporabi rezultat funkcije Defaults, se zapis ustvari.
  • ChangeRecord(s) – obvezno. Eden ali več zapisov, ki vsebujejo lastnosti, ki jih je mogoče spremeniti v argumentu BaseRecord. Spremenjeni zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.

Spreminjanje ali ustvarjanje nabora zapisov v viru podatkov

Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ] )

  • DataSource – obvezno. Vir podatkov, ki vsebuje zapise, ki jih želite spremeniti, ali bo vseboval zapise, ki jih želite ustvariti.
  • BaseRecordTable – obvezno. Tabela zapisov za spreminjanje ali ustvarjanje. Če je zapis pridobljen iz vira podatkov, je najden in spremenjen. Če se uporabi rezultat funkcije Defaults, se zapis ustvari.
  • ChangeRecordTable(s) – obvezno. Ena ali več tabel zapisov, ki vsebujejo lastnosti, ki jih je mogoče spremeniti za vsak zapis argumenta BaseRecordTable. Spremenjeni zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.

Spajanje zapisov

Patch( Record1, Record2 [, …] )

  • Record(s) – obvezno. Najmanj dva zapisa, ki ju želite združiti. Zapisi se obdelajo v vrstnem redu od začetka seznama argumentov do konca, pri čemer novejše vrednosti preglasijo starejše.

Primeri

Spreminjanje ali ustvarjanje zapisa (v viru podatkov)

V teh primerih boste spremenili ali ustvarili zapis v viru podatkov z imenom IceCream, ki vsebuje podatke v tej tabeli in samodejno ustvari vrednosti v stolpcu ID:

Primer sladoleda.

Formula Description Rezultat
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
Spremeni zapis v viru podatkov IceCream:
  • Stolpec ID zapisa, ki ga želite spremeniti, vsebuje vrednost 1. (Ta ID ima zapis Chocolate (Čokolada).)
  • Vrednost v stolpcu Quantity (Količina) se spremeni v 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

Vnos Chocolate v viru podatkov IceCream je spremenjen.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) Ustvari zapis v viru podatkov IceCream:
  • Stolpec ID vsebuje vrednost 3, ki jo vir podatkov ustvari samodejno.
  • Stolpec Quantity (Količina) vsebuje vrednost 0, ki je privzeta vrednost za ta stolpec v viru podatkov IceCream, kot to določa funkcija Defaults.
  • Stolpec Flavor (Okus) vsebuje vrednost Strawberry (Jagoda).
{ ID: 3, Flavor: "Strawberry", Quantity: 0 }

Ustvarjen je vnos Strawberry v viru podatkov IceCream.

Ko so prejšnje formule ovrednotene, se vir podatkov konča s temi vrednostmi:

Primer sladoleda po.

Združevanje zapisov (zunaj vira podatkov)

Formula Opis Rezultat
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Združi dva zapisa zunaj vira podatkov:
  • Vrednosti v stolpcu Name (Ime) posameznega zapisa se ne ujemajo. Rezultat vsebuje vrednost (Jim) v zapisu, ki je bližje koncu seznama argumentov, namesto vrednosti (James) v zapisu, ki je bližje začetku.
  • Prvi zapis vsebuje stolpec (Score), ki ne obstaja v drugem zapisu. Rezultat vsebuje ta stolpec z njegovo vrednostjo (90).
  • Drugi zapis vsebuje stolpec (Passed), ki ne obstaja v prvem zapisu. Rezultat vsebuje ta stolpec z njegovo vrednostjo (true).
{ Name: "Jim", Score: 90, Passed: true }

Uporaba možnosti Kot ali ThisRecord

Z uporabo ključne besede As ali ThisRecord v formuli se boste izognili dvoumnemu kontekstu vrednotenja.

V spodnjem primeru razmislite o prvem iskalnem pogoju v izjavi If. (OrderID = A[@OrderID]) naj bi primerjal OrderId v obsegu iskanja z OrderId iz zbirke A v obsegu ForAll. V tem primeru si verjetno želite, da bi bil A[@OrderId] razrešen kot lokalni parameter. Vendar je zapisano dvoumno.

Power Apps trenutno interpretira tako OrderId na levi strani kot A[@OrderId] na desni strani kot polje v obsegu iskanja. Zato bo funkcija iskanja vedno našla prvo vrstico v [dbo].[Orders1], ker je pogoj vedno resničen (da je OrderId vsake vrstice enak sebi).

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

Uporaba možnosti As ali ThisRecord

Če je le mogoče, uporabite operator As ali ThisRecord za obrazložitev leve strani. Za zgornji scenarij je priporočljiva uporaba operatorja As.

Ko v vaši formuli uporabite več obsegov z operaterji ForAll, Filter inLookup za isti vir podatkov ali tabelo, lahko pridejo parametri obsega v spor z istim poljem. Zato je priporočljivo uporabiti operator As ali ThisRecord za razrešitev imena polja in preprečitev dvoumnosti.

Operator As lahko na primer uporabite za obrazložitev v spodnjem primeru.

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

Za isti namen pa lahko uporabite tudi 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"
       }
   )
    )
)

Če želite izvedeti več o uporabi operatorjev As in ThisRecord, si preberite članek Operaterji.