Kongsi melalui


Fungsi tampalan

Digunakan untuk: Aplikasi kanvas Aplikasi berpandukan Power Platform model CLI Desktop mengalir

Ubah suai atau cipta satu atau lebih rekod dalam sumber data, atau cantum rekod di luar sumber data.

Gunakan fungsi Tampalan untuk mengubah suai rekod dalam situasi yang rumit seperti apabila anda melakukan kemas kini yang tidak memerlukan interaksi pengguna atau menggunakan borang yang merentangi berbilang skrin.

Untuk mengemas kini dalam sumber data dengan lebih mudah bagi perubahan yang mudah, gunakan kawalan Borang edit sebaliknya. Apabila anda menambah kawalan Borang edit, anda menyediakan pengguna dengan borang untuk diisi dan kemudian menyimpan perubahan ke sumber data. Untuk maklumat lanjut, lihat Memahami borang data.

Tonton video ini untuk mengetahui cara menggunakan fungsi Patch:

Gambaran keseluruhan

Gunakan fungsi Patch untuk mengubah suai satu atau lebih rekod sumber data. Nilai medan tertentu diubah suai tanpa memberi kesan pada sifat yang lain. Contohnya, formula ini mengubah nombor telefon pelanggan bernama Contoso:

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

Gunakan Patch dengan fungsi Defaults untuk mencipta rekod. Gunakan tingkah laku ini untuk membina skrin tunggal bagi kedua-dua mencipta dan mengedit rekod. Contohnya, formula ini mencipta rekod bagi pelanggan bernama Contoso:

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

Walaupun jika anda tidak bekerja dengan sumber data, anda boleh menggunakan Patch untuk mencantum dua atau lebih rekod. Contohnya, formula ini mencantumkan dua rekod ke dalam satu yang mengenal pasti kedua-dua nombor telefon dan lokasi untuk Contoso:

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

Penerangan

Ubah suai atau cipta rekod dalam sumber data

Untuk menggunakan fungsi ini dengan sumber data, tentukan sumber data, dan kemudian tentukan rekod asas:

  • Untuk mengubah suai rekod, rekod asas perlu datang daripada sumber data. Rekod asas mungkin datang daripada sifat galeri Item, diletakkan dalam pemboleh ubah konteks, atau datang daripada beberapa laluan yang lain. Tetapi, anda boleh menjejak rekod asas ke sumber data. Ini adalah penting kerana rekod akan termasuk maklumat tambahan untuk membantu mencari rekod semula untuk pengubahsuaian.
  • Untuk mencipta rekod, gunakan fungsi Defaults untuk mencipta rekod asas dengan nilai lalai.

Kemudian tentukan satu atau lebih rekod yang berubah, setiap satu mengandungi nilai sifat baharu yang menggantikan nilai sifat dalam rekod asas. Rekod yang berubah diproses dalam susunan daripada permulaan senarai argumen ke akhir, dengan nilai sifat terkini menggantikan yang sebelumnya.

Nilai yang dikembalikan Patch ialah rekod yang anda ubah suai atau cipta. Jika anda mencipta rekod, nilai yang dikembalikan mungkin termasuk sifat yang dijana oleh sumber data secara automatik. Walau bagaimanapun, nilai pulangan tidak menyediakan nilai untuk medan jadual yang berkaitan.

Contohnya, anda menggunakan Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); dan kemudian MyAccount.'Primary Contact'.'Full Name'. Anda tidak boleh menghasilkan nama penuh dalam kes ini. Sebaliknya, untuk mengakses medan jadual berkaitan, gunakan carian berasingan seperti:

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

Apabila anda mengemas kini sumber data, satu atau lebih isu mungkin timbul. Gunakan IfError dan IsError dengan nilai pulangan daripada Tampalan untuk mengesan dan bertindak balas terhadap ralat, seperti yang Pengendalian Ralat terangkan. Anda boleh juga menggunakan fungsi Ralat untuk mengenal pasti dan memeriksa isu, seperti yang Bekerja dengan Sumber Data terangkan.

Fungsi berkaitan termasuk fungsi Update untuk menggantikan keseluruhan rekod, dan fungsi Collect untuk mencipta rekod. Gunakan fungsi UpdateIf untuk mengubah suai sifat tertentu bagi berbilang rekod berasaskan pada syarat.

Ubah suai atau cipta set rekod dalam data sumber

Patch juga boleh digunakan untuk mencipta dan mengubah suai berbilang rekod dengan satu panggilan.

Daripada melalui rekod asas tunggal, jadual rekod asas boleh disediakan dalam argumen kedua. Rekod ubah juga disediakan dalam jadual, berpadanan satu untuk satu dengan rekod asas. Bilangan rekod dalam setiap jadual ubah mesti sama dengan bilangan rekod dalam jadual asas.

Apabila menggunakan Patch melalui cara ini, nilai yang dikembalikan juga adalah jadual dengan setiap rekod berpadanan satu ke satu dengan rekod asas dan ubah.

Cantumkan rekod di luar sumber data

Tentukan dua atau lebih rekod yang anda mahu cantumkan. Rekod diproses dalam susunan dari permulaan senarai argumen hingga akhir, dengan nilai sifat yang terkini menggantikan nilai terdahulu.

Patch mengembalikan rekod yang dicantum dan tidak mengubah suai argumen atau rekodnya dalam mana-mana sumber data.

Sintaks

Ubah suai atau cipta rekod dalam sumber data

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

  • DataSource – Diperlukan. Sumber data yang mengandungi rekod yang anda mahu ubah suai atau akan mengandungi rekod yang anda mahu cipta.
  • BaseRecord – Diperlukan. Rekod untuk diubah suai atau cipta. Jika rekod datang daripada sumber data, rekod ditemui dan diubah suai. Hasil Defaults digunakan, rekod dicipta.
  • ChangeRecord – Diperlukan. Satu atau lebih rekod yang mengandungi sifat untuk diubah suai dalam BaseRecord. Rekod yang berubah diproses dalam susunan daripada permulaan senarai argumen ke akhir, dengan nilai sifat terkini menggantikan yang sebelumnya.

Ubah suai atau cipta set rekod dalam data sumber

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

  • DataSource – Diperlukan. Sumber data mengandungi rekod yang anda mahu ubah suai atau akan mengandungi rekod yang anda mahu cipta.
  • BaseRecordTable – Diperlukan. Jadual rekod untuk diubah suai atau dicipta. Jika rekod datang daripada sumber data, rekod ditemui dan diubah suai. Hasil Defaults digunakan, rekod dicipta.
  • ChangeRecordTable – Diperlukan. Satu atau lebih jadual rekod yang mengandungi sifat untuk diubah suai bagi setiap rekod BaseRecordTable. Rekod yang berubah diproses dalam susunan daripada permulaan senarai argumen ke akhir, dengan nilai sifat terkini menggantikan yang sebelumnya.

Cantum rekod

Patch( Record1, Record2 [, …] )

  • Rekod - Diperlukan. Sekurang-kurangnya dua rekod yang anda mahu cantumkan. Rekod diproses mengikut susunan daripada awal senarai argumen hingga akhir, dengan nilai sifat terkini menggantikan nilai terdahulu.

Contoh

Ubah suai atau cipta rekod (dalam sumber data)

Dalam contoh ini, anda akan mengubah suai atau mencipta rekod dalam sumber data, yang dinamakan IceCream, yang mengandungi data dalam jadual ini dan menjana nilai secara automatik dalam IDlajur:

Contoh icecream.

Formula Description Keputusan
Tampalan( IceCream,
Cari( IceCream, Perisa = "Coklat" ), { Kuantiti: 400 } )
Mengubah suai rekod dalam sumber data IceCream:
  • Lajur ID rekod untuk diubah suai mengandungi nilai 1. (Rekod Coklat mempunyai ID itu.)
  • Nilai dalam lajur kuantiti berubah ke 400.
{ ID: 1, Perisa: "Coklat", Kuantiti: 400 }

Kemasukan Coklat dalam sumber data IceCream telah diubah suai.
Tampalan( IceCream, Lalai( IceCream ), { Perisa: "Strawberi" } ) Cipta rekod dalam sumber data IceCream:
  • Lajur ID mengandungi nilai 3, di mana sumber data dijana secara automatik.
  • Lajur Kuantiti mengandungi 0, yang merupakan nilai lalai untuk lajur dalam sumber data IceCream, yang menentukan fungsi Defaults.
  • Lajur Perasa mengandungi nilai Strawberi.
{ ID: 3, Perisa: "Strawberi", Kuantiti: 0 }

Kemasukan Strawberi dalam sumber data IceCream telah dicipta.

Selepas formula terdahulu dinilai, sumber data berakhir dengan nilai ini:

Contoh icecream selepas.

Cantum rekod (di luar sumber data)

Formula Penerangan Hasil
Tampalan( { Nama: "James", Skor: 90 }, { Nama: "Jim", Lulus: benar } ) Cantumkan dua rekod di luar sumber data:
  • Nilai dalam lajur Nama untuk setiap rekod tidak sepadan. Hasil mengandungi nilai (Jim) dalam rekod yang lebih dekat dengan senarai argumen berbanding nilai (James) dalam rekod yang lebih dekat dengan awal.
  • Rekod pertama mengandungi lajur (Skor) yang tidak wujud dalam rekod kedua. Hasil mengandungi lajur dengan nilai (90).
  • Rekod kedua mengandungi lajur (Lulus) yang tidak wujud dalam rekod pertama. Hasil mengandungi lajur dengan nilai (benar).
{ Nama: "Jim", Skor: 90, Lulus: benar }

Penggunaan Sebagai atau RekodIni

Menggunakan Sebagai atau kata kunci RekodIni dalam formula mengelakkan konteks penilaian yang tidak jelas.

Dalam contoh di bawah, pertimbangkan carian pertama dalam pernyataan If tersebut. (OrderID = A[@OrderID]) dijangka untuk membandingkan OrderId dalam skop carian dengan OrderId koleksi A dalam skop ForAll. Dalam kes ini, anda mungkin mahu A[@OrderId] diselesaikan sebagai parameter tempatan. Tetapi ia adalah tidak jelas.

Power Apps kini menafsirkan kedua-dua belah kiri OrderId dan belah kanan A[@OrderId] sebagai medan dalam skop carian. Oleh itu, carian sentiasa akan mencari baris pertama dalam [dbo].[Orders1] kerana keadaan sentiasa benar (iaitu, mana-mana baris OrderId adalah sama untuk dirinya sendiri.)

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

Menggunakan Sebagai atau RekodIni

Apabila mungkin gunakan operator Sebagai atau RekodIni untuk tidak meragui belah kiri. Sebagai disyorkan untuk senario di atas.

Apabila formula anda menggunakan pelbagai skop dengan ForAll, Filter dan Lookup pada sumber data atau jadual yang sama, ada kemungkinan parameter skop boleh bertembung dengan medan yang sama di tempat lain. Oleh itu, ia disyorkan untuk menggunakan operator Sebagai atau RekodIni untuk menyelesaikan nama medan dan mengelakkan kekaburan.

Sebagai contoh, anda boleh menggunakan operator Sebagai untuk tidak meragui dalam contoh di bawah.

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

Sebagai alternatif, anda boleh menggunakan RekodIni untuk tujuan yang sama.

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

Untuk mengetahui lebih lanjut tentang penggunaan operator Sebagai dan RekodIni lihat artikel Operators.