Deli z drugimi prek


Patch funkcija

Velja za: Aplikacije Canvas Copilot Studio Desktop tokovi Modelno vodene aplikacije Power Platform CLI Dataverse funkcije

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

S funkcijo Patch lahko spremenite zapise v zapletenih situacijah, na primer pri posodobitvah, ki ne zahtevajo interakcije uporabnika ali uporabljajo obrazce, ki se raztezajo čez 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 in se naučite uporabljati Patch funkcijo:

Pregled

S funkcijo Patch 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, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )

Uporabite Patch s funkcijo »Privzeto«, če želite ustvariti 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" } )

opomba,

Ko popravite zbirko z zapisom iz vira podatkov s privzetimi vrednostmi, postopek popravka posodobi zbirko z določenimi vrednostmi popravkov in privzetimi vrednostmi iz vira podatkov. Če želite ustvariti nov zapis, se morata vir DataSource izjave popravka in Vir podatkov funkcije Defaults ujemati.

Tudi če ne delate z virom podatkov, lahko spojite Patch dva 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 morda prišel skozi lastnost Elementov galerije, je bil postavljen v kontekstno spremenljivko ali pa je prišel skozi drugo pot. Vendar pa lahko izsledite osnovni zapis nazaj v vir podatkov. To je pomembno, saj zapis vključuje dodatne informacije za ponovno iskanje zapisa za spreminjanje.
  • Č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 je zapis Patch , 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 »IsErrorPatch« z vrnjeno vrednostjo, da zaznate napake in se odzovete nanje, kot je opisano v opisu »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

Patch lahko uporabite 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 jo Patch uporabljate na ta način, je vrnjena vrednost tudi tabela z vsakim zapisom, ki ustreza zapisu »ena za ena« z osnovo in spremeni zapise.

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.

Patch vrne spojeni zapis in ne spremeni svojih argumentov ali zapisov v nobenih virih podatkov.

Sintaksa

Spreminjanje ali ustvarjanje zapisa v viru podatkov

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

  • DataSource – Zahtevano. Vir podatkov, ki vsebuje zapis, ki ga želite spremeniti, ali bo vseboval zapis, ki ga želite ustvariti.
  • BaseRecord – Zahtevano. 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. Če želite ustvariti nov zapis, se morata vir DataSource izjave popravka in Vir podatkov funkcije Defaults ujemati.
  • ChangeRecords – Zahtevano. 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 – Zahtevano. Vir podatkov, ki vsebuje zapise, ki jih želite spremeniti, ali bo vseboval zapise, ki jih želite ustvariti.
  • BaseRecordTable – Zahtevano. 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. Če želite ustvariti nov zapis, se morata vir DataSource izjave popravka in Vir podatkov funkcije Defaults ujemati.
  • ChangeRecordTables – Zahtevano. 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 [, ...] )

  • Zapisi - 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 Opis Rezultat
PatchNe, ne
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 ), { Okus: "Jagoda" } ) 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, Okus: "Jagoda", Količina: 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]) pričakuje se primerjava OrderId v obsegu iskanja z OrderId zbirke A v ForAll obseg. 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. Kot je priporočeno za zgornji scenarij.

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.