Ambil perhatian
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba log masuk atau menukar direktori.
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Terpakai kepada: Apl
kanvas Aliran
Desktop Copilot Studio
Apl
dipacu model Power Platform CLI
Fungsi Dataverse
Ubah suai atau cipta satu atau lebih rekod dalam sumber data, atau cantum rekod di luar sumber data.
Gunakan fungsi untuk Patch mengubah suai rekod dalam situasi yang kompleks, seperti apabila anda melakukan kemas kini yang tidak memerlukan interaksi pengguna atau menggunakan borang yang merangkumi 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 ini Patch :
Gambaran keseluruhan
Gunakan fungsi untuk Patch 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, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Gunakan Patch dengan fungsi Lalai 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" } )
Nota
Apabila anda menampal koleksi menggunakan rekod daripada sumber data dengan nilai lalai, operasi tampalan mengemas kini koleksi dengan kedua-dua nilai tampalan yang ditentukan dan nilai lalai daripada sumber data. DataSource pernyataan tampalan dan DataSource fungsi Lalai mesti sepadan untuk mencipta rekod baharu.
Walaupun anda tidak bekerja dengan sumber data, anda boleh menggunakan Patch untuk menggabungkan 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 melalui sifat Item galeri, diletakkan dalam pembolehubah konteks atau melalui laluan lain. Tetapi, anda boleh menjejak rekod asas ke sumber data. Ini penting kerana rekod termasuk maklumat tambahan untuk membantu mencari semula rekod 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 pulangan ialah Patch rekod yang anda ubah suai atau cipta. Jika anda mencipta rekod, nilai pulangan 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 Patch untuk mengesan dan bertindak balas terhadap ralat, seperti yang diterangkan oleh Pengendalian Ralat . 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 atau 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 dengan cara ini, nilai pulangan juga merupakan jadual dengan setiap rekod sepadan satu demi satu dengan rekod asas dan perubahan.
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 digabungkan dan tidak mengubah suai argumen atau rekodnya dalam mana-mana sumber data.
Sintaks
Ubah suai atau cipta rekod dalam sumber data
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- Sumber Data– 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. DataSource pernyataan tampalan dan DataSource fungsi Lalai mesti sepadan untuk mencipta rekod baharu.
- ChangeRecords – 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
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- Sumber Data– 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. DataSource pernyataan tampalan dan DataSource fungsi Lalai mesti sepadan untuk mencipta rekod baharu.
- ChangeRecordTables – 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( Rekod1, Rekod2 [, ...] )
- 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:
| Formula | Penerangan | Keputusan |
|---|---|---|
|
Patch( Ais Krim, Cari( IceCream, Perisa = "Coklat" ), { Kuantiti: 400 } ) |
Mengubah suai rekod dalam sumber data IceCream:
|
{ ID: 1, Perisa: "Coklat", Kuantiti: 400 } Kemasukan Coklat dalam sumber data IceCream telah diubah suai. |
| Patch( Aiskrim, Lalai( Ais Krim ), { Perisa: "Strawberi" } ) | Cipta rekod dalam sumber data IceCream:
|
{ ID: 3, Perisa: "Strawberi", Kuantiti: 0 } Kemasukan Strawberi dalam sumber data IceCream telah dicipta. |
Selepas formula terdahulu dinilai, sumber data berakhir dengan nilai ini:
Cantum rekod (di luar sumber data)
| Formula | Penerangan | Keputusan |
|---|---|---|
| Patch( { Nama: "James", Skor: 90 }, { Nama: "Jim", Lulus: benar } ) | Cantumkan dua rekod di luar sumber data:
|
{ 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 membandingkan dalam OrderId skop carian dengan OrderId koleksi A dalam ForAll skop. 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. Seperti yang 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.