Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Aplikasi Canvas
Copilot Studio
Desktop mengalir
aplikasi
berbasis model Fungsi Power Platform CLI
Dataverse
Mengubah atau membuat satu atau beberapa rekaman di sumber data, atau menggabungkan rekaman di luar sumber data.
Patch Gunakan fungsi untuk memodifikasi rekaman dalam situasi kompleks, seperti saat Anda melakukan pembaruan yang tidak memerlukan interaksi pengguna atau menggunakan formulir yang mencakup beberapa layar.
Untuk memperbarui rekaman di sumber data secara lebih mudah untuk perubahan sederhana, gunakan kontrol Edit formulir sebagai gantinya. Bila anda menambahkan kontrol Edit formulir, Anda menyediakan formulir untuk diisi dan kemudian menyimpan perubahan ke sumber data kepada pengguna. Untuk informasi lebih lanjut, lihat Memahami formulir data.
Tonton video ini untuk mempelajari cara menggunakan Patch fungsi:
Gambaran Umum
Patch Gunakan fungsi untuk mengubah satu atau beberapa rekaman sumber data. Nilai bidang spesifik dimodifikasi tanpa mempengaruhi properti lainnya. Misalnya, rumus ini mengubah nomor telepon untuk pelanggan bernama Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Gunakan Patch dengan fungsi Default untuk membuat rekaman. Gunakan perilaku ini untuk membuat satu layar untuk pembuatan dan pengeditan rekaman. Misalnya, rumus ini membuat rekaman untuk pelanggan bernama Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Nota
Saat Anda menambal koleksi menggunakan rekaman dari sumber data dengan nilai default, operasi patch memperbarui koleksi dengan nilai patch yang ditentukan dan nilai default dari sumber data. Sumber Data pernyataan patch dan Sumber Data fungsi Default harus cocok untuk membuat rekaman baru.
Bahkan jika Anda tidak bekerja dengan sumber data, Anda bisa menggunakan Patch untuk menggabungkan dua rekaman atau lebih. Contohnya, rumus ini menggabungkan dua rekaman menjadi satu yang mengidentifikasi nomor telepon dan lokasi Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
KETERANGAN
Mengubah dan membuat rekaman di sumber data
Untuk menggunakan fungsi ini dengan sumber data, tentukan sumber data, lalu tentukan rekaman dasar:
- Untuk memodifikasi rekaman, rekaman dasar harus berasal dari sumber data. Rekaman dasar mungkin telah datang melalui properti Item galeri, ditempatkan dalam variabel konteks, atau melewati beberapa jalur lain. Namun, anda dapat melacak rekaman dasar kembali ke sumber data. Ini penting karena catatan menyertakan informasi tambahan untuk membantu menemukan rekaman lagi untuk modifikasi.
- Untuk membuat rekaman, gunakan fungsi Defaults untuk membuat rekaman dasar dengan nilai default.
Kemudian tentukan satu atau beberapa rekaman yang diubah, yang masing-masing berisi nilai properti baru yang menimpa nilai properti dalam rekaman dasar. Rekaman perubahan diproses secara berurutan dari awal daftar argumen sampai akhir, dengan nilai properti yang lebih baru menimpa yang sebelumnya.
Nilai yang dikembalikan adalah Patch rekaman yang Anda ubah atau buat. Jika Anda membuat rekaman, nilai pengembalian mungkin menyertakan properti yang dihasilkan sumber data secara otomatis. Namun, nilai hasil tidak memberikan nilai untuk bidang tabel terkait.
Misalnya, Anda menggunakan Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); dan kemudian MyAccount.'Primary Contact'.'Full Name'. Anda tidak dapat menghasilkan nama lengkap dalam kasus ini. Justru, untuk mengakses bidang tabel terkait, gunakan pencarian terpisah seperti:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Saat Anda memperbarui sumber data, satu atau beberapa masalah mungkin muncul. Gunakan IfError dan IsError dengan nilai pengembalian dari Patch untuk mendeteksi dan merespons kesalahan, seperti yang dijelaskan oleh Penanganan Kesalahan . Anda juga dapat menggunakan fungsi Errors untuk mengidentifikasi dan memeriksa masalah, seperti yang dijelaskan Bekerja dengan Sumber Data.
Fungsi terkait mencakup fungsi Update untuk menggantikan seluruh rekaman, dan fungsi Collect untuk membuat rekaman. Gunakan fungsi UpdateIf untuk memodifikasi properti tertentu dari beberapa rekaman berdasarkan kondisi.
Mengubah dan membuat rangkaian rekaman dalam sumber data
Patch juga dapat digunakan untuk membuat atau memodifikasi beberapa rekaman dengan satu panggilan.
Daripada meneruskan rekaman dasar tunggal, tabel rekaman dasar dapat diberikan dalam argumen kedua. Rekaman perubahan juga disediakan dalam tabel, yang terkait satu demi satu dengan rekaman dasar. Jumlah rekaman di setiap tabel perubahan harus sama dengan jumlah rekaman di tabel dasar.
Saat menggunakan Patch dengan cara ini, nilai yang dikembalikan juga merupakan tabel dengan setiap rekaman yang sesuai satu-untuk-satu dengan dasar dan mengubah rekaman.
Menggabungkan rekaman di luar sumber data
Tentukan dua rekaman atau lebih yang ingin Anda gabungkan. Rekaman diproses secara berurutan dari awal daftar argumen sampai akhir, dengan nilai properti yang lebih baru menimpa yang sebelumnya.
Patch mengembalikan rekaman gabungan dan tidak mengubah argumen atau rekamannya di sumber data apa pun.
Sintaks
Mengubah dan membuat rekaman di sumber data
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- Sumber Data– Wajib. Sumber data yang berisi rekaman yang akan dimodifikasi atau berisi rekaman yang ingin Anda buat.
- BaseRecord – Wajib. Rekaman untuk dimodifikasi atau dibuat. Jika rekaman berasal dari sumber data, rekaman ditemukan dan dimodifikasi. Jika hasil Defaults digunakan, rekaman dibuat. Sumber Data pernyataan patch dan Sumber Data fungsi Default harus cocok untuk membuat rekaman baru.
- ChangeRecords – Wajib. Satu atau beberapa rekaman yang berisi properti untuk dimodifikasi di BaseRecord. Rekaman perubahan diproses secara berurutan dari awal daftar argumen sampai akhir, dengan nilai properti yang lebih baru menimpa yang sebelumnya.
Mengubah dan membuat rangkaian rekaman dalam sumber data
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- Sumber Data– Wajib. Sumber data yang berisi rekaman yang akan dimodifikasi atau berisi rekaman yang ingin Anda buat.
- BaseRecordTable – Wajib. Tabel rekaman untuk dimodifikasi atau dibuat. Jika rekaman berasal dari sumber data, rekaman ditemukan dan dimodifikasi. Jika hasil Defaults digunakan, rekaman dibuat. Sumber Data pernyataan patch dan Sumber Data fungsi Default harus cocok untuk membuat rekaman baru.
- ChangeRecordTables – Wajib. Satu atau beberapa tabel rekaman yang berisi properti untuk diubah untuk setiap rekaman dari BaseRecordTable. Rekaman perubahan diproses secara berurutan dari awal daftar argumen sampai akhir, dengan nilai properti yang lebih baru menimpa yang sebelumnya.
Gabungkan Rekaman
Patch( Record1, Record2 [, ...] )
- Catatan - Wajib. Sedikitnya dua rekaman yang ingin digabungkan. Rekaman diproses secara berurutan dari awal daftar argumen sampai akhir, dengan nilai properti yang lebih baru menimpa yang sebelumnya.
Contoh
Mengubah dan membuat rekaman (di sumber data)
Di contoh ini, Anda akan memodifikasi atau membuat rekaman di sumber data, bernama IceCream, yang berisi data dalam tabel ini dan secara otomatis menghasilkan nilai di kolomID:
| Rumus | KETERANGAN | Hasil |
|---|---|---|
|
Patch(IceCream, LookUp( IceCream, Rasa = "Cokelat" ), { Jumlah: 400 } ) |
Memodifikasi rekaman di sumber data IceCream:
|
{ ID: 1, Rasa: "Cokelat", jumlah: 400 } Entri Chocolate dalam sumber data IceCream telah dimodifikasi. |
| Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) | Membuat rekaman di sumber data IceCream:
|
{ ID: 3, Rasa: "Stroberi", Kuantitas: 0 } Entri Strawberry dalam sumber data IceCream telah dibuat. |
Setelah rumus sebelumnya dievaluasi, sumber data diakhiri dengan nilai berikut:
Menggabungkan rekaman (di luar sumber data)
| Rumus | KETERANGAN | Hasil |
|---|---|---|
| Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) | Menggabungkan dua rekaman di luar sumber data:
|
{ Name: "Jim", Score: 90, Passed: true } |
Penggunaan As atau thisrecord
Menggunakan kata kunci As atau thisrecord dalam formula untuk menghindari konteks penilaian yang ambigu.
Pada contoh di bawah, pertimbangkan pencarian pertama dalam pernyataan If.
(OrderID = A[@OrderID]) diharapkan untuk membandingkan dalam OrderId cakupan pencarian dengan OrderId koleksi AForAll dalam cakupan. Dalam kasus ini, Anda mungkin ingin A[@OrderId] diselesaikan sebagai parameter lokal. Namun ambigu.
Power Apps saat ini menafsirkan sisi kiri OrderId maupun sisi kanan A[@OrderId] sebagai bidang di cakupan pencarian. Oleh karena itu, pencarian akan selalu menemukan baris pertama di [dbo].[Orders1] karena kondisi selalu benar (yaitu, setiap OrderId baris apa pun sama dengan 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"
}
)
)
)
Penggunaan As atau thisrecord
Bila memungkinkan, gunakan operator As atau thisrecord untuk menghapus ambiguitas sisi kiri. Seperti yang direkomendasikan untuk skenario di atas.
Bila rumus anda menggunakan beberapa cakupan dengan ForAll, Filter, dan Lookup di sumber data atau tabel yang sama, kemungkinan parameter cakupan dapat bertabrakan dengan bidang yang sama di tempat lain. Oleh karena itu, sebaiknya gunakan operator As atau thisrecord untuk menangani nama bidang dan menghindari ambiguitas.
Misalnya, Anda dapat menggunakan operator As untuk menghapus ambiguitas dalam contoh di bawah ini.
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"
}
)
)
)
Atau, Anda dapat menggunakan thisrecord 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 mempelajari lebih lanjut tentang penggunaan operator As dan thisrecord Lihat artikel operator.