Plākstera funkcija programmā Power Apps

Modificē vai izveido vienu vai vairākus ierakstus datu avotā vai sapludina ierakstus ārpus datu avota.

Izmantojiet funkciju Patch, lai modificētu ierakstus sarežģītās situācijās, piemēram, ja veicat atjauninājumus, kuriem nav nepieciešama lietotāja mijiedarbība, vai izmantojiet veidlapas, kas aptver vairākus ekrānus.

Lai vieglāk atjauninātu ierakstus datu avotā un veiktu vienkāršas izmaiņas, tā vietā izmantojiet vadīklu Rediģēt veidlapu. Pievienojot vadīklu Rediģēt veidlapu, jūs nodrošināt lietotājiem aizpildāmo veidlapu un pēc tam saglabājat datu avota izmaiņas. Papildinformāciju skatiet tēmā Datu veidlapu izkārtojuma izprašana.

Noskatieties šo videoklipu, lai uzzinātu, kā izmantot Patch funkciju:

Pārskats

Izmantojiet funkciju Patch, lai modificētu vienu vai vairākus datu avota ierakstus. Konkrētu lauku vērtības tiek modificētas, neietekmējot citus rekvizītus. Piemēram, šī formula maina tālruņa numuru klientam ar nosaukumu Bērziņš:

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

Izmantojiet funkciju Patch ar funkciju Defaults, lai izveidotu ierakstus. Izmantojiet šo uzvedību, lai izveidotu vienu ekrānu gan ierakstu izveidei, gan rediģēšanai. Piemēram, šī formula izveido ierakstu klientam ar nosaukumu Bērziņš:

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

Pat, ja nestrādājat ar datu avotu, varat izmantot Patch, lai sapludinātu divus vai vairākus ierakstus. Piemēram, šī formula sapludina divus ierakstus vienā, kas identificē gan tālruņa numuru gan atrašanās vietu klientam Bērziņš:

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

Apraksts

Ieraksta modificēšana vai izveide datu avotā

Lai izmantotu šo funkciju ar datu avotu, norādiet datu avotu un pēc tam norādiet pamatierakstu:

  • Lai modificētu ierakstu, pamatierakstam ir jānāk no datu avota. Pamatieraksts var nākt no galerijas rekvizīta Elementi, tikt novietots konteksta mainīgajā vai nākt no cita ceļa. Taču varat izsekot pamatierakstam līdz datu avotam. Tas ir svarīgi, jo ieraksts ietvers papildinformāciju, lai palīdzētu atkal atrast ierakstu modificēšanai.
  • Lai izveidotu ierakstu, izmantojiet funkciju Defaults, lai izveidotu pamatierakstu ar noklusējuma vērtībām.

Pēc tam norādiet vienu vai vairākus izmaiņu ierakstus, no kuriem katrs satur jaunas rekvizītu vērtības, kuras ignorē rekvizīta vērtības pamatierakstā. Izmaiņu ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.

Patch atgrieztā vērtība ir ieraksts, kuru modificējāt vai izveidojāt. Ja izveidojāt ierakstu, atgrieztā vērtība varētu iekļaut rekvizītus, kurus datu avots ģenerēja automātiski. Taču atgrieztā vērtība nenodrošina vērtību saistītas tabulas laukiem.

Piemēram, jūs izmantojat Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); un pēc tam MyAccount.'Primary Contact'.'Full Name'. Šajā gadījumā nevarat piešķirt pilno vārdu. Lai piekļūtu saistītās tabulas laukiem, izmantojiet atsevišķu uzmeklēšanu, piemēram:

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

Atjauninot datu avotu, var rasties viena vai vairākas problēmas. Izmantojiet funkciju Errors, lai identificētu un izpētītu problēmas, kā aprakstīts sadaļā Darbs ar datu avotiem.

Saistītās funkcijas ietver funkciju Update, lai aizstātu visu ierakstu, un funkciju Collect, lai izveidotu ierakstu. Izmantojiet funkciju UpdateIf, lai modificētu konkrētus vairāku ierakstu rekvizītus, pamatojoties uz nosacījumu.

Ierakstu kopas modificēšana vai izveide datu avotā

Patch funkciju var arī izmantot lai izveidotu vai modificētu vairākus ierakstus ar vienu izsaukumu.

Tā vietā, lai nodotu vienu pamatierakstu, otrajā argumentā var nodrošināt pamatierakstu tabulu. Izmaiņu ieraksti tiek sniegti arī tabulā, atbilstoši viens pret vienu ar pamatierakstiem. Ierakstu skaitam katrā izmaiņu tabulā ir jābūt tādam pašam kā ierakstu skaitam pamata tabulā.

Šādā veidā izmantojot Patch funkciju, arī atgrieztā vērtība ir tabula, kurā katrs ieraksts atbilst viens pret vienu ar pamata un izmaiņu ierakstiem.

Ierakstu sapludināšana ārpus datu avota

Norādiet divus vai vairākus ierakstus, kurus vēlaties sapludināt. Ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.

Patch atgriež sapludināto ierakstu un nemodificē tā argumentus vai ierakstus nevienā datu avotā.

Sintakse

Ieraksta modificēšana vai izveide datu avotā

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

  • DataSource – Obligāti. Datu avots, kurā ir ieraksts, kuru vēlaties modificēt vai saturēs ierakstu, kuru vēlaties izveidot.
  • BaseRecord — Obligāti. Ieraksts, kuru modificēt vai izveidot. Ja ieraksts nāca no datu avota, ieraksts tiek atrasts un modificēts. Ja tiek izmantots Defaults rezultāts, tiek izveidots ieraksts.
  • ChangeRecord(s) — Obligāti. Viens vai vairāki ieraksti, kuros ir rekvizīti, kas jāmodificē BaseRecord. Izmaiņu ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.

Ierakstu kopas modificēšana vai izveide datu avotā

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

  • DataSource – Obligāti. Datu avots, kurā ir ieraksti, kurus vēlaties modificēt vai saturēs ieraksti, kurus vēlaties izveidot.
  • BaseRecordTable — Obligāti. Ierakstu tabula, kas jāmodificē vai jāveido. Ja ieraksts nāca no datu avota, ieraksts tiek atrasts un modificēts. Ja tiek izmantots Defaults rezultāts, tiek izveidots ieraksts.
  • ChangeRecordTable(s) — Obligāti. Viena vai vairākas ierakstu tabulas, kas satur rekvizītus, kurus modificēt katram BaseRecordTable ierakstam. Izmaiņu ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.

Ierakstu sapludināšana

Patch( Record1, Record2 [, …] )

  • Ieraksts(i) — Obligāti. Vismaz divi ieraksti, kurus vēlaties sapludināt. Ieraksti tiek apstrādāti secībā no argumentu saraksta sākuma līdz beigām, vēlākajām rekvizīta vērtībām ignorējot agrākās.

Piemēri

Ieraksta modificēšana vai izveide (datu avotā)

Šajos piemēros jūs modificēsit vai izveidosit ierakstu datu avotā ar nosaukumu IceCream, kas satur datus šajā tabulā un automātiski ģenerē vērtības ID kolonnā:

Piemērs ar saldējumu.

Formula Apraksts Rezultāts
Patch(  IceCream,LookUp
( IceCream, Aromāts = "Šokolāde" ), {  Daudzums:  400 })
Modificē ieraksta datu avotu IceCream:
  • Ieraksta ID, ko modificēt, satur vērtību 1. (Ieraksts Šokolāde, kuram ir šis ID.)
  • Vērtība kolonnā Daudzums tiek mainīta uz 400.
{ ID: 1, Garša: "Šokolāde", Daudzums: 400 }

Ieraksts Šokolāde datu avotā IceCream ir modificēts.
Patch( IceCream, Defaults( IceCream ), { Garša: "Zemeņu" } ) Izveido ierakstu datu avotā IceCream:
  • Kolonna ID satur vērtību 3, kuru datu avots ģenerē automātiski.
  • Kolonna Daudzums satur vērtību 0, kas ir noklusējuma vērtība šai kolonnai datu avotā IceCream, kā konkretizē funkcija Defaults.
  • Kolonna Garša satur vērtību Zemeņu.
{ ID: 3, Garša: "Zemeņu", Daudzums: 0 }

Ieraksts Zemeņu datu avotā IceCream ir izveidots.

Pēc iepriekšējo formulu novērtēšanas, datu avots beidzas ar šādām vērtībām:

Piemēram ar saldējumu pēc.

Ierakstu sapludināšana (ārpus datu avota)

Formula Apraksts Rezultāts
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Sapludina divus ierakstus ārpus datu avota:
  • Vērtības katra ieraksta kolonnā Nosaukums nesakrīt. Rezultāts satur vērtību (Rihards) ierakstā, kas ir tuvāk argumentu saraksta beigām, nevis vērtību (James) ierakstā, kurš atrodas tuvāk sākumam.
  • Pirmajā ierakstā ir kolonna (Rezultāts), kura nepastāv otrajā ierakstā. Rezultāts satur šo kolonnu ar tās vērtību (90).
  • Otrais ieraksts satur kolonnu (Nodots), kura neeksistē pirmajā ierakstā. Rezultāts satur šo kolonnu ar tās vērtību (true).
{ Vārds: "Rihards", Rezultāts: 90, Nodots: true }

As vai ThisRecord lietošana

Ja formulā tiek izmantots atslēgvārds As vai ThisRecord, tiek novērsts neviennozīmīga novērtējuma konteksts.

Tālāk sniegtajā piemērā apsveriet pirmo uzmeklēšanu If priekšrakstā. Tiek paredzēts, ka (OrderID = A[@OrderID]) salīdzinās OrderId uzmeklēšanas tvērumā ar kolekcijas A vienumu OrderId vienuma ForAll tvērumā. Šajā gadījumā, iespējams, vēlēsities, lai A[@OrderId] tiktu atrisināts kā lokālais parametrs. Taču tas ir neviennozīmīgs.

Power Apps pašlaik interpretē gan kreisās puses OrderId, gan labās puses A[@OrderId] kā uzmeklēšanas tvērumā esošu lauku. Tāpēc uzmeklēšanas laikā vienmēr tiks atrasta pirmā rinda vienumā [dbo].[Orders1], jo nosacījums vienmēr ir patiess (t.i., visi rindas OrderId ir līdzīgi paši sev).

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 vai ThisRecord lietošana

Kad vien iespējams, izmantojiet As operatoru vai ThisRecord, lai novērstu kreisās puses daudznozīmību. Augstāk parādītajam scenārijam ir ieteicams As operators.

Ja vienā datu avotā vai tabulā jūsu formula izmanto vairākus tvērumus ar ForAll, Filter un Lookup, pastāv tvēruma parametru konflikta iespēja ar tādu pašu lauku kādā citā vietā. Tāpēc ir ieteicams izmantot As operatoru vai ThisRecord, lai atrisinātu lauka nosaukumu un novērstu neviennozīmību.

Piemēram, varat izmantot As operatoru, lai novērstu neviennozīmību tālāk sniegtajā piemērā.

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

Tāpat šim nolūkam varat izmantot 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"
        }
    )
    )
)

Lai uzzinātu vairāk par As operatora un ThisRecord lietojumu, skatiet rakstu Operatori.

Piezīme

Kādas ir jūsu dokumentācijas valodas preferences? Aizpildiet īsu aptauju. (ņemiet vērā, ka aptauja ir angļu valodā)

Aptaujai būs nepieciešamas aptuveni septiņas minūtes. Nekādi personas dati netiks vākti (paziņojums par konfidencialitāti).