Fungsi Patch
Berlaku untuk: Aplikasi
kanvas Aplikasi berdasarkan model
Power Platform CLI
Desktop alur
Mengubah atau membuat satu atau beberapa rekaman di sumber data, atau menggabungkan rekaman di luar sumber data.
Gunakan fungsi Patch untuk memodifikasi rekaman dalam situasi yang kompleks, misalnya saat Anda melakukan pembaruan yang tidak memerlukan interaksi pengguna atau menggunakan formulir yang menjangkau 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.
Lihat video ini untuk mempelajari cara menggunakan fungsi Patch:
Gambaran Umum
Gunakan fungsi Patch untuk memodifikasi 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, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Gunakan Patch dengan fungsi Defaults 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" } )
Bahkan jika Anda tidak bekerja dengan sumber data, Anda dapat 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 memiliki properti Item galeri, ditempatkan dalam variabel konteks, atau melalui jalur lain. Namun, anda dapat melacak rekaman dasar kembali ke sumber data. Hal ini penting karena rekaman akan berisi informasi tambahan untuk membantu menemukan rekaman kembali 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 Patch yang dihasilkan adalah rekaman yang Anda modifikasi atau buat. Jika anda membuat rekaman, nilai yang dihasilkan dapat mencakup 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'
Bila Anda memperbarui sumber data, satu atau beberapa masalah mungkin timbul. Gunakan IfError dan IsError dengan nilai pengembalian dari Patch untuk mendeteksi dan merespons kesalahan, saat Penanganan Kesalahan menjelaskan. 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.
Bila menggunakan Patch dengan cara ini, nilai yang dihasilkan juga merupakan tabel dengan setiap rekaman yang sesuai satu untuk satu dengan rekaman dasar dan perubahan.
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 yang digabungkan dan tidak mengubah argumen atau rekamannya di sumber data apa pun.
Sintaks
Mengubah dan membuat rekaman di sumber data
Tambalan ( Sumber Data, 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.
- 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 ( Sumber Data, 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.
- 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
Tambalan( Rekaman1,Rekor2 [, ...] )
- 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 | Description | Hasil |
---|---|---|
Tambalan ( Es Krim, 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), Rasa { : "Stroberi" } ) | Membuat rekaman di sumber data IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 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 |
---|---|---|
Tambalan ( { Nama: "James", Skor: 90 }, { Nama: "Jim", Lulus: benar } ) | 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 A
ForAll
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.