Deli putem


Patch Funkciju

Odnosi se na: Canvas aplikacije Copilot Studio Desktop teku aplikacije zasnovane na modelima Power Platform CLI Dataverse funkcije

Menja ili kreira jedan ili više zapisa u izvoru podataka ili spaja zapise izvan izvora podataka.

Koristite funkciju Patch da biste izmenili zapise u složenim situacijama, na primer kada vršite ažuriranja koja ne zahtevaju interakciju korisnika ili koristite obrasce koji se nalaze na više ekrana.

Da biste lakše ažurirali zapise u izvoru podataka za jednostavne izmene, bolje je da koristite kontrolu obrazac za uređivanje. Kada dodate kontrolu obrazac za uređivanje, korisnicima dajete obrazac za popunjavanje i zatim se izmene čuvaju u izvoru podataka. Za više informacija, pogledajte Objašnjenje obrazaca podataka.

Pogledajte ovaj video da biste saznali kako da koristite funkciju Patch :

Pregled

Koristite Patch funkciju da biste izmenili jedan ili više zapisa izvora podataka. Vrednosti specifičnih polja se menjaju bez uticaja na druga svojstva. Na primer, ova formula menja telefonski broj za klijenta po imenu Contoso:

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

Koristite Patch ga sa funkcijom Defaults da biste kreirali zapise. Koristite ovo ponašanje za izgradnju jednog ekrana za kreiranje i uređivanje zapisa. Na primer, ova formula kreira zapis za klijenta po imenu Contoso:

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

Belešku

Kada zakrpate kolekciju pomoću zapisa iz izvora podataka sa podrazumevanim vrednostima, operacija zakrpa ažurira kolekciju i navedenim vrednostima zakrpa i podrazumevanim vrednostima iz izvora podataka. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju da bi se kreirao novi zapis.

Čak i ako ne radite sa izvorom podataka, možete da koristite Patch za objedinjavanje dva ili više zapisa. Na primer, ova formula spaja dva zapisa u jedan koji identifikuje i telefonski broj i lokaciju za Contoso:

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

Opis

Izmena ili kreiranje zapisa u izvoru podataka

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

  • Da biste izmenili zapis, osnovni zapis mora da potiče iz izvora podataka. Osnovni zapis je možda prošao kroz svojstvo Stavke galerije, postavljen je u promenljivu konteksta ili je prošao kroz neku drugu putanju. Ali, možete pratiti osnovni zapis do izvora podataka. To je važno jer zapis sadrži dodatne informacije koje će vam pomoći da ponovo pronađete zapis za izmenu.
  • Da biste kreirali zapis, koristite funkciju Defaults za kreiranje osnovnog zapisa sa podrazumevanim vrednostima.

Zatim odredite jedan ili više zapisa promena, od kojih svaki sadrži nove vrednosti svojstava koje nadjačavaju vrednosti svojstava u osnovnom zapisu. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.

Povratna vrednost je Patch zapis koji ste izmenili ili kreirali. Ako ste kreirali zapis, povratna vrednost može da sadrži svojstva koja je izvor podataka generisan automatski. Međutim, povratna vrednost ne pruža vrednost za polja povezane tabele.

Na primer, koristite Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, a zatim MyAccount.'Primary Contact'.'Full Name'. U ovom slučaju ne možete dati puno ime. Umesto toga, da biste pristupili poljima povezane tabele, koristite zasebno pronalaženje kao što je:

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

Kada ažurirate izvor podataka, može doći do nekih problema. Koristite IfError i IsErrorPatch sa povratnom vrednošću iz za otkrivanje i odgovaranje na greške, kao što je opisano u članku Rukovanje greškama. Možete i da koristite funkciju Errors za prepoznavanje i ispitivanje problema, kao što je opisano u odeljku Rad sa izvorima podataka.

Srodne funkcije uključuju funkciju Update za zamenu celog zapisa i funkciju Collect za kreiranje zapisa. Koristite funkciju UpdateIf za promenu specifičnih svojstava više zapisa na osnovu stanja.

Uređujte ili kreirajte skup zapisa u izvoru podataka

Patch može da se koristi i za kreiranje ili izmenu više zapisa pomoću jednog poziva.

Umesto da prođe jedan osnovni zapis, u drugom argumentu može se dati tabela osnovnih zapisa. Zapisi o promenama su dati i u tabeli, koja se slaže jedan-na-jedan sa osnovnim zapisima. Broj zapisa u svakoj tabeli promena mora biti isti kao i broj zapisa u osnovnoj tabeli.

Kada koristite Patch na ovaj način, povratna vrednost je takođe tabela sa svakim zapisom koji odgovara jedan-prema-jedan sa osnovom i menja zapise.

Spajanje zapisa izvan izvora podataka

Navedite dva ili više zapisa koje želite spojiti. Zapisi se obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva nadjačati ranije.

Patch daje objedinjeni zapis i ne menja njegove argumente ili zapise ni u jedan izvor podataka.

Sintaksa

Izmena ili kreiranje zapisa u izvoru podataka

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

  • DataSource – Obavezno. Izvor podataka koji sadrži zapis koji želite da izmenite ili će sadržati zapis koji želite da kreirate.
  • BaseRecord – Obavezno. Zapis za izmenu ili kreiranje. Ako je zapis došao iz izvora podataka, biće pronađen i promenjen. Ako se koristi rezultat za Defaults, kreira se zapis. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju da bi se kreirao novi zapis.
  • ChangeRecords – Obavezno. Jedan ili više zapisa koji sadrže svojstva za izmenu u BaseRecord. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.

Uređujte ili kreirajte skup zapisa u izvoru podataka

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

  • DataSource – Obavezno. Izvor podataka koji sadrži zapise koje želite da izmenite ili će sadržati zapise koje želite da kreirate.
  • BaseRecordTable - Obavezno. Tabela zapisa koju možete menjati ili kreirati. Ako je zapis došao iz izvora podataka, biće pronađen i promenjen. Ako se koristi rezultat za Defaults, kreira se zapis. Izvor podataka izraza zakrpa i DataSource funkcije Defaults moraju da se podudaraju da bi se kreirao novi zapis.
  • ChangeRecordTables – Obavezno. Jedna ili više tabela zapisa koja sadrži svojstva koja se menjaju za svaki zapis za BaseRecordTable. Zapisi o promenama obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.

Objedinjavanje zapisa

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

  • Evidencija - Obavezno. Bar dva zapisa koja želite da objedinite. Zapisi se obrađuju se od početka liste argumenata do kraja, pri čemu će kasnije vrednosti svojstva zameniti ranije.

Primeri

Izmena ili kreiranje zapisa (u izvoru podataka)

U ovim primerima ćete modifikovati ili kreirati zapis u izvoru podataka po imenu IceCream, koji sadrži podatke u ovoj tabeli i automatski generiše vrednosti u IDkolone:

Primer sladoleda.

Formula Opis rezultat
Patch( IceCream,
LookUp( Ledeni krem, ukus = "Čokolada" ), { Količina: 400 } )
Izmenjuje zapis u izvoru podataka IceCream:
  • Kolona ID zapisa koji treba izmeniti sadrži vrednost 1. (Zapis Čokolada ima taj ID.)
  • Vrednost u koloni Količina se menja u 400.
{ ID: 1, ukus: "Čokolada", Količina: 400 }

Unos Čokolada u izvor podataka IceCream je izmenjen.
Patch( IceCream, Defaults( IceCream ), { Ukus: "Jagoda" } ) Kreira zapis u izvoru podataka IceCream:
  • Kolona ID sadrži vrednost 3, koji izvor podataka automatski generiše.
  • Kolona Količina sadrži 0, što je podrazumevana vrednost za tu kolonu u IceCream izvoru podataka, kako određuje funkcija Defaults.
  • Kolona Flavor sadrži vrednost Strawberry.
{ ID: 3, ukus: "Jagoda", Količina: 0 }

Unos Strawberry u izvor podataka IceCream je kreiran.

Nakon izračunavanja prethodnih formula, izvor podataka se završava ovim vrednostima:

Primer sladoleda posle.

Spajanje zapisa (izvan izvora podataka)

Formula Opis rezultat
Patch( { Ime: "Džejms", ocena: 90 }, { ime: "Džim", prosleđeno: tačno } ) Spaja dva zapisa izvan izvora podataka:
  • Vrednosti u koloni Ime za svaki zapis se ne podudara. Rezultat sadrži vrednost (Jim) u zapisu koji je bliži kraju liste argumenata umesto vrednosti (James) u zapisu koji je bliži početku.
  • Prvi zapis sadrži kolonu (Rezultat) koja ne postoji u drugom zapisu. Rezultat sadrži tu kolonu sa njenom vrednošću (90).
  • Drugi zapis sadrži kolonu (Preneto) koja ne postoji u prvom zapisu. Rezultat sadrži tu kolonu sa njenom vrednošću (tačno).
{ Ime: "Džim", ocena: 90, prosleđeno: tačno }

Upotreba As ili ThisRecord

Upotrebom ključne reči As ili ThisRecord u formuli izbegava se dvosmisleno tumačenje konteksta.

U primeru ispod, razmotrite prvo pretraživanje u izjavi If. (OrderID = A[@OrderID]) se očekuje da uporedi OrderId u opsegu pretrage sa OrderId kolekcijom A u ForAll obimu. U ovom slučaju, verovatno želite da A[@OrderId] bude razrešen kao lokalni parametar. Ali to je dvosmisleno.

Power Apps trenutno tumači oba OrderId na levoj strani i A[@OrderId] na desnoj strani kao polje u opsegu pronalaženja. Stoga će funkcija traženja uvek pronaći prvi red u [dbo].[Orders1] jer je uslov uvek tačan (tj., svaki OrderId u redu je jednak 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 As ili ThisRecord

Kad god je to moguće koristite operator As ili ThisRecord da leva strana ne bude dvosmislena. Kao što je preporučeno za gornji scenario.

Kada formula koristi više opsega pomoću funkcija ForAll, Filter i Lookup na istom izvoru podataka ili tabeli, može doći do preklapanja parametara opsega sa istim poljem na nekom drugom mestu. Zbog toga se preporučuje korišćenje operatora As ili ThisRecord da bi se rešio naziv polja i izbegla dvosmislenost.

Na primer, možete da koristite operator As za otklanjanje dvosmislenosti u donjem 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"
       }
   )
    )
)

Odnosno, možete koristiti operator 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 korišćenju operatora As i ThisRecord, pogledajte članak Operatori.