Bendrinti naudojant


Funkcija Patch

Taikoma: drobės programoms Modeliu pagrįstoms programoms Power Platform CLI darbalaukio srautai

Modifikuoja arba sukuria vieną ar kelis įrašus duomenų šaltinyje arba sulieja įrašus ne duomenų šaltinyje.

Naudokite Patch jei norite modifikuoti įrašus sudėtingose situacijose, pvz., atliekant atnaujinimus, su kuriais vartotojui nereikia bendrauti, arba naudoti formas, kurios apima kelis ekranus.

Jei norite duomenų šaltinio įrašus atnaujinti lengviau, atlikdami paprastus keitimus, geriau naudokite formos redagavimo valdiklį. Kai įtraukiate formos redagavimo valdiklį, vartotojams suteikiate formą, kurią jie gali užpildyti, o tada įrašyti pakeitimus duomenų šaltinyje. Norėdami gauti daugiau informacijos, žr. Duomenų formų supratimas.

Peržiūrėkite šį vaizdo įrašą ir sužinokite, kaip naudoti „Patch“ funkciją:

Apžvalga

Naudodami funkciją Patch, galite modifikuoti vieną ar kelis duomenų šaltinio įrašus. Konkrečių laukų reikšmės modifikuojamos nepaveikiant kitų ypatybių. Pavyzdžiui, ši formulė pakeičia kliento, kurio pavadinimas yra „Contoso“, telefono numerį:

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

Patch naudodami su funkcija Defaults, galite kurti įrašus. Naudodami šį veikimo būdą, galite sukurti vieną ekraną įrašams tiek kurti, tiek redaguoti. Pavyzdžiui, ši formulė sukuria įrašą klientui, kurio pavadinimas yra „Contoso“:

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

Net jei nedirbate su duomenų šaltiniu, naudodami Patch galite sulieti du ar daugiau įrašų. Pavyzdžiui, ši formulė du įrašus sulieja į vieną, kuriame identifikuojamas tiek „Contoso“ telefono numeris, tiek vietovė:

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

Aprašas

Įrašo modifikavimas arba sukūrimas duomenų šaltinyje

Norėdami šią funkciją naudoti su duomenų šaltiniu, nurodykite duomenų šaltinį, tada – pagrindinį įrašą:

  • Norint modifikuoti įrašą, pagrindinis įrašas turi būti kilęs iš duomenų šaltinio. Pagrindinis įrašas gali būti kilęs iš galerijos ypatybės Items, galėjo būti įdėtas į konteksto kintamąjį arba gautas kitu būdu. Tačiau pagrindinį įrašą galite atsekti iki duomenų šaltinio. Tai svarbu, nes įraše bus pateikta papildomos informacijos, padėsiančios vėl rasti įrašą, norint jį modifikuoti.
  • Norėdami sukurti įrašą, naudodami funkciją Defaults sukurkite pagrindinį įrašą su numatytosiomis reikšmėmis.

Tada nurodykite vieną ar daugiau pakeitimo įrašų; kiekviename iš jų yra naujų ypatybių reikšmių, kurios perrašo ypatybių reikšmes pagrindiniame įraše. Pakeitimo įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.

Patch pateikiama reikšmė yra įrašas, kurį modifikavote arba sukūrėte. Jei sukūrėte įrašą, pateikiamoje reikšmėje gali būti ypatybės, kurias duomenų šaltinis sugeneravo automatiškai. Tačiau grąžinama reikšmė nėra susijusios lentelės laukų reikšmė.

Pavyzdžiui, galite naudoti Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));, o tada – MyAccount.'Primary Contact'.'Full Name'. Šiuo atveju negalite gauti vardo ir pavardės. Norėdami pasiekti susijusios lentelės laukus, naudokite atskirą peržvalgą, pvz.:

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

Kai naujinate duomenų šaltinį, gali iškilti viena ar daugiau problemų. Naudokite IfError ir IsError su pataisos grąžinama reikšme iš Patch tam, kad nustatytumėte ir reaguotumėte klaidas, taip kaip aprašo Klaidų valdymas . Galite taip pat naudoti Klaidų funkciją, kad nustatytumėte ir ištirtumėte klaidas, kaip aprašo Darbas su duomenų šaltiniais skyrius.

Susijusios funkcijos yra funkcija Update, skirta visam įrašui pakeisti, ir funkcija Collect, skirta įrašui sukurti. Naudodami funkciją UpdateIf galite pagal sąlygą modifikuoti konkrečias kelių įrašų ypatybes.

Įrašų rinkinio modifikavimas arba sukūrimas duomenų šaltinyje

Pataisa taip pat gali būti naudojama kuriant arba modifikuojant kelis įrašus vienu skambučiu.

Užuot perduodant vieną pagrindinį įrašą, antrame argumente gali būti pateikiama pagrindinių įrašų lentelė. Lentelėje taip pat pateikiami pakeitimo įrašai, atitinkantys kiekvieną pagrindinį įrašą. Kiekvienos pakeitimo lentelės įrašų skaičius turi būti toks pats, kaip pagrindinės lentelės įrašų skaičius.

Patch naudojant tokiu būdu, pateikiama reikšmė taip pat yra lentelė, kurios kiekvienas įrašas atitinka kiekvieną pagrindinį ir pakeitimo įrašą.

Įrašų suliejimas ne duomenų šaltinyje

Nurodykite du ar daugiau norimų sulieti įrašų. Įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.

Pataisa grąžina sulietą įrašą ir nemodifikuoja jo argumentų ar įrašų jokiuose duomenų šaltiniuose.

Sintaksė

Įrašo modifikavimas arba sukūrimas duomenų šaltinyje

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

  • DataSource - būtina. Duomenų šaltinis, kuriame yra norimas modifikuoti įrašas arba bus įrašas, kurį norite sukurti.
  • "BaseRecord " – būtina. Įrašas, kurį norite modifikuoti arba sukurti. Jei įrašas gautas iš duomenų šaltinio, įrašas randamas ir modifikuojamas. Jei naudojamas Defaults rezultatas , įrašas sukuriamas.
  • "ChangeRecords " – būtina. Vienas ar daugiau įrašų, kuriuose yra modifikuotinų BaseRecord ypatybių. Pakeitimo įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.

Įrašų rinkinio modifikavimas arba sukūrimas duomenų šaltinyje

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

  • DataSource - būtina. Duomenų šaltinis, kuriame yra norimi modifikuoti įrašai arba bus įrašai, kuriuos norite sukurti.
  • BaseRecordTable – būtina. Įrašų, kuriuos norite modifikuoti arba kurti, lentelė. Jei įrašas gautas iš duomenų šaltinio, įrašas randamas ir modifikuojamas. Jei naudojamas Defaults rezultatas , įrašas sukuriamas.
  • ChangeRecordTables – būtina. Viena arba kelios įrašų, kuriose yra modifikuotinų kiekvieno BaseRecordTable įrašo ypatybių, lentelės. Pakeitimo įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.

Įrašų suliejimas

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

  • Įrašai - Būtina. Bent du įrašai, kuriuos norite sulieti. Įrašai apdorojami eilės tvarka nuo argumentų sąrašo pradžios iki pabaigos, o vėlesnės ypatybių reikšmės perrašo ankstesniąsias.

Pavyzdžiai

Įrašo modifikavimas arba sukūrimas (duomenų šaltinyje)

Šiuose pavyzdžiuose įrašą modifikuosite arba sukursite duomenų šaltinyje pavadinimu Ledai, kuriame yra duomenų šioje lentelėje ir automatiškai sukuria vertes IDstulpelyje:

Ledų pavyzdys.

Formulė Aprašą Rezultatas
Pleistras( IceCream,
LookUp( Ledai, Skonis = "Šokoladas" ), { Kiekis: 400 } )
Modifikuoja įrašą duomenų šaltinyje Ledai:
  • Įrašo, kurį norite modifikuoti, stulpelyje ID yra reikšmė 1. (Šį ID turi įrašas Šokoladiniai.)
  • Reikšmė stulpelyje Kiekis pasikeičia į 400.
{ ID: 1, Skonis: "Šokoladiniai", Kiekis: 400 }

Modifikuotas duomenų šaltinio Ledai įrašas Šokoladiniai.
Patch( IceCream, Defaults( IceCream ), { Skonis: "Braškių" } ) Sukuria įrašą duomenų šaltinyje Ledai:
  • Stulpelyje ID yra reikšmė 3, kurią duomenų šaltinis generuoja automatiškai.
  • Stulpelyje Kiekis yra 0, o tai yra numatytoji to stulpelio reikšmė duomenų šaltinyje Ledai, kaip nurodo funkcija Defaults.
  • Stulpelyje Flavor yra reikšmė Braškiniai.
{IID: 3, Flavor: "Strawberry", Quantity: 0 }

Sukurtas duomenų šaltinio Ledai įrašas Braškiniai.

Įvertinus ankstesnes formules, duomenų šaltinis baigiamas šiomis reikšmėmis:

Pavyzdys ledas po.

Įrašų suliejimas (ne duomenų šaltinyje)

Formulė Aprašymas Rezultatas
Patch( { Vardas: "James", Rezultatas: 90,Vardas } { : "Jim", Praėjo: tiesa } ) Sulieja du įrašus ne duomenų šaltinyje:
  • Nesutampa reikšmės kiekvieno įrašo stulpelyje Name. Rezultatuose pateikiama reikšmė (Jim) įraše, kuris yra arčiau argumentų sąrašo pabaigos, o ne reikšmė (James) įraše, kuris yra arčiau pradžios.
  • Pirmajame įraše yra stulpelis (Score), kurio nėra antrajame įraše. Rezultatuose pateikiamas šis stulpelis su savo reikšme (90).
  • Antrajame įraše yra stulpelis (Passed), kurio nėra pirmajame įraše. Rezultatuose pateikiamas šis stulpelis su savo reikšme (true).
{ Vardas: "Džimas", Balas: 90, Įvykdė: teisinga }

Naudokite As arba ThisRecord

Naudojant As ar ThisRecord raktinį žodį formulėje bus išvengta dviprasmiško vertinimo turinio.

Tolesniame pavyzdyje, apgalvokite pirmąją paiešką If teiginyje. (OrderID = A[@OrderID]) tikimasi, kad paieškos apimtis bus lyginama OrderId OrderId su surinkimo A ForAll apimtimi. Tuo atveju, jums gali reikėti A[@OrderId] būti nustatytam kaip vietiniam parametrui. Tai yra dviprasmiška.

„Power Apps“ šiuo metu interpretuoja tiek kairės pusės OrderId, tiek ir dešinės pusės A[@OrderId] kaip paieškos tikslo laukelį. Dėl to, paieška visuomet suras pirmąją eilutę [dbo].[Orders1], nes sąlyga visuomet yra teisinga (tai yra, bet kuri OrderId eilutė yra lygi jai pačiai.)

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

As arba ThisRecord naudojimas

Kai tik įmanoma, naudokite As operatorių arba ThisRecord tam, kad būtų atskirta kairės pusės prasmė. Kaip rekomenduojama aukščiau pateiktam scenarijui.

Kai jūsų formulė naudoja keletą tikslų su ForAll, Filter ir Lookup tame pačiame duomenų šaltinyje ar lentelėje, gali būti, kad tikslo parametrai susidurs tame pačiame laukelyje Dėl to, rekomenduojama naudoti As operatorių ar ThisRecord tam, kad nustatytumėte laukelio pavadinimą ir išvengtumėte dviprasmybių.

Pavyzdžiui, galite naudoti As operatorių tam, kad atskirtumėte tolesnį pavyzdį.

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

Kitu atveju, galite naudoti ThisRecord tuo pačiu tikslu.

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

Tam, kad sužinotumėte apie As operatoriaus naudojimą ir ThisRecord, žr. Operatoriai straipsnį.