Funkcija Naljepak

Odnosi se na: Aplikacije od gotovih gradivnih elemenata Aplikacije Power Platform stvorene prema modelu CLI Tokovi radne površine

Izmjenjuje ili stvara jedan ili više zapisa u izvoru podataka ili spaja zapise izvan nekog izvora podataka.

Upotrijebite funkciju Patch za izmjenu zapisa u složenim situacijama, kao što je kada radite ažuriranja koja ne zahtijevaju interakciju korisnika ili koristite obrasce koji se protežu na više zaslona.

Da biste lakše ažurirali zapise u nekom izvoru podataka u slučaju jednostavnih promjena, umjesto toga upotrijebite kontrolu Edit form. Kada dodate kontrolu Edit form, korisnicima pružate obrazac za ispunjavanje i zatim spremanje tih promjena u izvor podataka. Dodatne informacije potražite u odjeljku Razumijevanje obrazaca podataka.

Pogledajte ovaj videozapis da biste saznali kako koristiti funkciju Patch:

Pretpregled

Upotrijebite funkciju Patch kako biste izmijenili jedan ili više zapisa nekog izvora podataka. Vrijednosti određenih polja modificiraju se bez utjecaja na druga svojstva. Na primjer, ova formula mijenja telefonski broj klijenta po imenu Contoso:

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

Koristite Patch s funkcijom Defaults kako biste stvarali zapise. Koristite ovo ponašanje za izradu jednog zaslona i za stvaranje i za uređivanje zapisa. Na primjer, ova formula stvara zapis klijenta po imenu Contoso:

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

Čak i ako ne radite s izvorom podataka, možete upotrijebiti Patch da spojite dva ili više zapisa. Na primjer, ova formula spaja dva zapisa u jedan koji određuje i telefonski broj i lokaciju za Contoso:

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

Opis

Izmjena ili stvaranje zapisa u izvoru podataka

Da biste ovu funkciju koristili s nekim izvorom podataka, navedite taj izvor podataka, a zatim odredite osnovni zapis:

  • Da biste izmijenili neki zapis, osnovni zapis mora potjecati iz nekog izvora podataka. Osnovni zapis možda potječe iz svojstva Items neke galerije, smješten je u varijabli konteksta ili potječe s neke druge strane. No, porijeklo osnovnog zapisa možete pratiti do izvora podataka. Ovo je važno jer će zapis sadržavati dodatne informacije koje će vam pomoći da se ponovo pronađe zapis radi izmjene.
  • Da biste stvorili neki zapis, upotrijebite funkciju Defaults kako biste stvotili osnovni zapis sa zadanim vrijednostima.

Zatim odredite jedan ili više zapisa promjena, od kojih svaki sadrži nove vrijednosti svojstava koje nadjačavaju vrijednosti svojstava u osnovnom zapisu. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.

Povratna vrijednost funkcije Patch zapis je koji ste izmijenili ili stvorili. Ako ste stvorili neki zapis, povratna vrijednost može sadržati svojstva koja je izvor podataka automatski generirao. Međutim, povratna vrijednost ne daje vrijednost za polja povezane tablice.

Na primjer, koristite Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); i onda MyAccount.'Primary Contact'.'Full Name'. U ovom slučaju ne možete dati puno ime. Umjesto toga, za pristup poljima povezane tablice koristite zasebno pretraživanje, kao što je:

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

Kada ažurirate neki izvor podataka, može doći do jednog ili više problema. Koristite IfError i IsError s povratnom vrijednošću iz Patch za otkrivanje i reagiranje na pogreške, kao što opisuje Error Handling. Možete koristiti i funkciju Errors kako biste utvrdili i ispitali probleme kako je opisano u odjeljku Rad s izvorima podataka.

U povezane funkcije spadaju funkcija Update za zamjenu cijelog zapisa i funkcija Collect za stvaranje zapisa. Upotrijebite funkciju UpdateIf kako biste promjenili specifična svojstva više zapisa na temelju nekog uvjeta.

Izmjena ili stvaranje skupa zapisa u izvoru podataka

Funkcija Patch također se može koristiti za stvaranje ili izmjenu više zapisa jednim pozivom.

Umjesto da proslijeđivanja jednog osnovnog zapisa, u drugom argumentu može se dati tablica osnovnih zapisa. Zapisi promjene nalaze se i u jednoj tablici koja odgovara osnovnim zapisima „jedan na jedan”. Broj zapisa u svakoj tablici promjena mora biti isti kao broj zapisa u osnovnoj tablici.

Pri takvom korištenju funkcije Patch, povratna vrijednost je također tablica čiji svaki zapis odgovara „jedan na jedan” osnovnim zapisima i zapisima promjene.

Spajanje zapisa izvan izvora podataka

Navedite dva ili više zapisa koje želite spojiti. Zapisi se obrađuju redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.

Funkcija Patch vraća spojeni zapis i ne mijenja svoje argumente ili zapise ni u jednom izvoru podataka.

Sintaksa

Izmjena ili stvaranje zapisa u izvoru podataka

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

  • DataSource – obavezno. Izvor podataka koji sadrži zapis koji želite izmijeniti ili će sadržavati zapis koji želite stvoriti.
  • BaseRecord – obavezno. Zapis koji se mijenja ili stvara. Ako je zapis nastao iz nekog izvora podataka, taj zapis će se pronaći i izmijeniti. Ako se koristi rezultat funkcije Defaults, stvara se zapis.
  • ChangeRecord(s) – obavezno. Jedan ili više zapisa koji sadrže svojstva koja se mogu mijenjati u BaseRecord. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.

Izmjena ili stvaranje skupa zapisa u izvoru podataka

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

  • DataSource – obavezno. Izvor podataka koji sadrži zapise koje želite izmijeniti ili će sadržavati zapise koje želite stvoriti.
  • BaseRecordTable – obavezno. Tablica zapisa za izmjenu ili stvaranje. Ako je zapis nastao iz nekog izvora podataka, taj zapis će se pronaći i izmijeniti. Ako se koristi rezultat funkcije Defaults, stvara se zapis.
  • ChangeRecordTable(s) – obavezno. Jedna ili više tablica zapisa koje sadrže svojstva za izmjenu za svaki zapis u BaseRecordTable. Zapisi promjena obrađuju se redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.

Spajanje zapisa

Patch( Record1, Record2 [, …] )

  • Record(s) – obavezno. Najmanje dva zapisa koje želite spojiti. Zapisi se obrađuju redoslijedom od početka do kraja popisa argumenata, pri čemu kasnije vrijednosti svojstava nadjačavaju ranije.

Primjeri

Izmjena ili stvaranje zapisa (u izvoru podataka)

U ovim ćete primjerima izmijeniti ili stvoriti zapis u izvoru podataka, nazvan IceCream, koji sadrži podatke u ovoj tablici i automatski generira vrijednosti u stupcuID:

Primjer sladoleda.

Formula Opis Rezultat
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
Mijenja jedan zapis u izvoru podataka IceCream:
  • Stupac ID zapisa koji se mijenja sadrži vrijednost 1. (Zapis Chocolate ima taj ID.)
  • Vrijednost u stupcu Quantity mijenja se u 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

Unos Chocolate u izvoru podataka IceCream izmijenjen je.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) Stvara jedan zapis u izvoru podataka IceCream:
  • Stupac ID sadrži vrijednost 3 koju izvor podataka automatski generira.
  • Stupac Quantity sadrži 0, što je zadana vrijednost za ovaj stupac u izvoru podataka IceCream, kako je određeno funkcijom Defaults.
  • Stupac Flavor sadrži vrijednost Strawberry.
{ ID: 3, Flavor: "Strawberry", Quantity: 0 }

Unos Strawberry u izvoru podataka IceCream stvoren je.

Nakon što su procijenjene prethodne formule, izvor podataka završava ovim vrijednostima:

Primjer sladoleda poslije.

Spajanje zapisa (izvan izvora podataka)

Formula Opis Rezultat
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Spaja dva zapisa izvan izvora podataka:
  • Vrijednosti u stupcu Name svakog zapisa ne podudaraju se. Rezultat sadrži vrijednost (Jim) u zapisu koji se bliži kraju popisa argumenata umjesto vrijednosti (James) u zapisu koji je bliži početku.
  • Prvi zapis sadrži stupac (Score) koji ne postoji u drugom zapisu. Rezultat sadrži taj stupac s njegovom vrijednošću (90).
  • Drugi zapis sadrži stupac (Passed) koji ne postoji u prvom zapisu. Rezultat sadrži taj stupac s njegovom vrijednošću (true).
{ Name: "Jim", Score: 90, Passed: true }

Upotreba ključnih riječi As ili ThisRecord

Upotrebom ključnih riječi As ili ThisRecord u formuli izbjegava se dvosmislen kontekst procjene.

U donjem primjeru razmotrite prvo pretraživanje u If izjavi. Za (OrderID = A[@OrderID]) se očekuje da usporedi OrderId u opsegu pretraživanja s OrderId iz kolekcije A u opsegu ForAll. U tom slučaju vjerojatno želite da se A[@OrderId] riješi kao lokalni parametar. Ali to je dvosmisleno.

Power Apps trenutno tumači lijevu stranu OrderId i desnu stranu A[@OrderId] kao polje u opsegu pretraživanja. Stoga će pretraga uvijek pronaći prvi redak u [dbo].[Orders1] jer je uvjet uvijek istinit (odnosno bilo koji redak OrderId je jednak je samom 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"
       }
   )
    )
)

Upotreba ključnih riječi As ili ThisRecord

Kad god je to moguće koristite operator As ili ThisRecord za određivanje lijeve strane. Za gornji primjer preporučuje se As.

Kada vaša formula koristi više opsega sa ForAll, Filter, i Lookup na istom izvoru podataka ili tablici, moguće je da se parametri opsega mogu podudarati s istim poljem negdje drugdje. Zato se preporučuje upotreba operatora As ili ThisRecord za određivanje naziva polja i izbjegavanje dvosmislenosti.

Na primjer, u donjem primjeru možete upotrijebiti operator As za uklanjanje višeznačnosti.

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

Možete i koristiti ThisRecord u istu svrhu.

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

Da biste saznali više o operatoru As i ThisRecord pogledajte članak Operatori.