Fungsi Error, IfError, IsError, IsBlankOrError
Berlaku untuk: Kolom rumus aplikasi
Dataverse kanvas Alur
desktop Aplikasi
Power Pages
Power Platform berbasis model CLI
Mendeteksi kesalahan dan memberikan nilai alternatif atau mengambil tindakan. Membuat kesalahan kustom atau melewatkan kesalahan.
Catatan
- Perilaku yang dijelaskan di artikel ini hanya tersedia bila fitur pratinjau Manajemen kesalahan tingkat rumus di pengaturan > Fitur mendatang > Pratinjau diaktifkan.
IfError
Fungsi IfError menguji nilai hingga ditemukan kesalahan. Jika fungsi menemukan kesalahan, fungsi mengevaluasi dan menghasilkan nilai penggantian yang sesuai dan menghentikan evaluasi lebih lanjut. Nilai default juga dapat diberikan bila tidak ditemukan kesalahan. Struktur IfError menyerupai fungsi If: iferror menguji kesalahan, sementara If menguji untuk true.
Gunakan IfError untuk mengganti kesalahan dengan nilai yang valid sehingga kalkulasi hilir dapat dilanjutkan. Misalnya, gunakan fungsi ini jika input pengguna dapat menghasilkan pembagian dengan nol:
IfError( 1/x, 0 )
Rumus ini menghasilkan 0
jika nilai x
adalah nol, karena 1/x
akan menghasilkan kesalahan. Jika x
bukan nol, maka 1/x
akan dihasilkan.
Menghentikan pemrosesan lebih lanjut
Saat menautkan rumus bersama dalam rumus perilaku, seperti:
Patch( DS1, ... );
Patch( DS2, ... )
Fungsi Patch kedua ke DS2
akan dicoba meskipun Patch ke DS1
gagal. Cakupan kesalahan terbatas pada setiap rumus yang dirantai.
Gunakan IfError untuk melakukan tindakan dan hanya memproses jika tindakan berhasil. Menerapkan IfError ke contoh ini:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Jika PatchDS1
memiliki masalah, Notify dijalankan pertama kali. Tidak ada pemrosesan lebih lanjut yang terjadi termasuk Patch pada DS2
kedua. Jika Patch pertama berhasil, Patch kedua akan dijalankan.
Jika tersedia, argumen DefaultResult opsional akan ditampilkan jika tidak ditemukan kesalahan. Tanpa argumen ini, argumen Nilai terakhir dihasilkan.
Membuat pada contoh terakhir, nilai yang dihasilkan dari IfError dapat diperiksa untuk menentukan apakah ada masalah:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Kompatibilitas jenis
IfError akan menghasilkan nilai dari salah satu argumennya. Jenis semua nilai yang mungkin dihasilkan oleh IfError harus kompatibel.
Pada contoh terakhir, Patch akan menghasilkan rekaman yang tidak kompatibel dengan Boolean yang digunakan untuk rumus Pengganti atau DefaultResult. Hal tersebut bukanlah masalah, karena tidak ada situasi dengan nilai yang dihasilkan dari panggilan Patch ini akan dihasilkan oleh IfError.
Catatan
Sementara perilaku sedang dalam proses untuk perubahan, jenis semua argumen untuk IfError harus kompatibel saat ini.
Dalam contoh sederhana yang dijelaskan sebelumnya:
IfError( 1/x, 0 )
Jenis dan 1/x
dan 0
kompatibel karena keduanya adalah angka. Jika tidak, argumen kedua akan dipaksa untuk mencocokkan jenis argumen pertama.
Excel akan menampilkan #DIV/0! pembagian dengan nol terjadi.
Pertimbangkan IfError dengan berikut sebagai gantinya:
IfError( 1/x, "#DIV/0!" )
Rumus di atas tidak akan berfungsi. String teks "#DIV/0!"
akan dipaksa ke jenis argumen pertama ke IfError, yang merupakan angka. Hasil IfError akan menjadi kesalahan lain karena string teks tidak dapat dipaksa. Sebagai perbaikan, mengonversi argumen pertama ke string teks sehingga IfError selalu menghasilkan string teks:
IfError( Text( 1/x ), "#DIV/0!" )
Seperti yang terlihat di atas, IfError dapat menghasilkan kesalahan jika Penggantian atau DefaultResult adalah kesalahan.
FirstError / AllErrors
Dalam rumus pengganti, informasi tentang kesalahan ditemukan tersedia melalui tabel FirstError dan tabel AllErrors. AllErrors adalah tabel rekaman informasi kesalahan dengan FirstError yang merupakan pintasan ke rekaman pertama tabel ini. FirstError akan selalu menghasilkan nilai yang sama dengan First (AllErrors ).
Rekaman kesalahan mencakup:
Bidang | Tipe | Description |
---|---|---|
Jenis | ErrorKind enum (angka) | Kategori kesalahan. |
Pesan | String teks | Pesan tentang kesalahan, cocok untuk ditampilkan kepada pengguna akhir. |
Sumber | String teks | Lokasi asal kesalahan, yang digunakan untuk pelaporan. Contohnya, untuk rumus yang dibatasi ke properti kontrol, rumus ini akan berada di formulir ControlName.PropertyName. |
Diamati | String teks | Lokasi tempat kesalahan dimunculkan ke pengguna, digunakan untuk pelaporan. Contohnya, untuk rumus yang dibatasi ke properti kontrol, rumus ini akan berada di formulir ControlName.PropertyName. |
Rincian | Rekaman | Detail tentang kesalahan. Saat ini, rincian hanya diberikan untuk kesalahan jaringan. Catatan ini mencakup HttpStatusCode yang berisi kode status HTTP dan HttpResponse yang berisi isi respons dari konektor atau layanan. |
Misalnya, pertimbangkan rumus berikut sebagai properti OnSelect kontrol Tombol:
Set( a, 1/0 )
Dan rumus ini pada properti OnSelect dari kontrol Tombol kedua:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Contoh rumus di atas akan menampilkan banner berikut saat dua tombol diaktifkan secara berurutan:
Biasanya, hanya ada satu kesalahan yang dapat ditangani secara memadai oleh FirstError . Namun, ada skenario pengembalian beberapa kesalahan. Contohnya, bila menggunakan operator rangkaian rumus atau fungsi Concurrent. Bahkan dalam situasi ini, pelaporan FirstError mungkin cukup untuk mengungkap masalah, namun membebani pengguna dengan beberapa kesalahan. Jika Anda tetap memiliki persyaratan untuk bekerja dengan setiap kesalahan secara terpisah, Anda dapat menggunakan tabel AllErrors .
IsError
Fungsi IsError menguji untuk nilai kesalahan.
Nilai yang dihasilkan adalah Boolean true atau false.
Menggunakan IsError akan mencegah proses kesalahan lebih lanjut.
IsBlankOrError
Fungsi IsBlankOrError menguji nilai kosong atau nilai kesalahan dan setara dengan Or( IsBlank( X ), IsError( X ) )
.
Saat mengaktifkan penanganan kesalahan untuk aplikasi yang ada, pertimbangkan mengganti IsBlank dengan IsBlankOrError untuk mempertahankan perilaku aplikasi yang ada. Sebelum penambahan penanganan kesalahan, nilai kosong digunakan untuk menunjukkan nilai nihil dari database dan nilai kesalahan. Penanganan kesalahan memisahkan kedua interpretasi kosong ini yang dapat mengubah perilaku aplikasi yang ada yang terus menggunakan IsBlank.
Nilai yang dihasilkan adalah boolean true atau false.
Menggunakan IsBlankOrError akan mencegah pemrosesan kesalahan lebih lanjut.
Gunakan fungsi Error untuk membuat dan melaporkan kesalahan kustom. Misalnya, Anda mungkin memiliki logika untuk menentukan apakah nilai tertentu valid untuk konteks Anda atau tidak— sesuatu yang tidak dicentang secara otomatis. Anda dapat membuat dan mengembalikan kesalahan Anda sendiri, lengkap dengan Kind dan Message, menggunakan rekaman yang sama seperti yang dijelaskan di atas untuk fungsi IfError .
Dalam konteks IfError, gunakan fungsi Error untuk membuat ulang atau meneruskan kesalahan. Contohnya, logika Anda di IfError dapat memutuskan bahwa dalam beberapa kasus kesalahan dapat diabaikan dengan aman, namun pada kasus lain kesalahan penting untuk dikirim. Dalam IfError atau App.OnError, gunakan Error(FirstError ) untuk melewatkan kesalahan.
Fungsi Error juga dapat dilewatkan tabel kesalahan, seperti yang ditemukan di tabel AllErrors . Gunakan Error(AllErrors ) untuk membuat ulang semua kesalahan dan tidak hanya yang pertama.
Rekaman kosong atau tabel kosong yang dilewatkan ke Error mengakibatkan tidak ada kesalahan.
Sintaks
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – Wajib. Rekaman informasi kesalahan, termasuk Kind, Message, dan bidang lainnya. Kind adalah wajib. FirstError dapat dilewatkan secara langsung.
- ErrorTable – Wajib. Tabel rekaman informasi kesalahan. AllErrors dapat dilewatkan secara langsung.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Value – Wajib. Rumus untuk menguji nilai kesalahan.
- Replacement – Wajib. Rumus untuk mengevaluasi dan nilai untuk menghasilkan jika argumen Nilai yang cocok menghasilkan kesalahan.
- DefaultResult – Opsional. Rumus untuk mengevaluasi apakah rumus tidak menemukan kesalahan.
IsError( Value )
IsBlankOrError( Nilai )
- Value – Wajib. Rumus untuk diuji.
Contoh
IfError Sederhana
Rumus | KETERANGAN | Hasil |
---|---|---|
IfError( 1, 2 ) | Argumen pertama bukanlah kesalahan. Fungsi tidak memiliki kesalahan lain untuk memeriksa dan tidak ada nilai hasil default. Fungsi ini menghasilkan argumen nilai terakhir yang dievaluasi. | 1 |
IfError( 1/0, 2 ) | Argumen pertama menghasilkan nilai kesalahan (karena pembagian dengan nol). Fungsi ini mengevaluasi argumen kedua dan menghasilkannya sebagai hasilnya. | 2 |
IfError( 10, 20, 30 ) | Argumen pertama bukanlah kesalahan. Fungsi tidak memiliki kesalahan lain untuk memeriksa, tetapi tidak memiliki nilai hasil default. Fungsi ini menghasilkan argumen DefaultResult. | 30 |
IfError( 10, 11, 20, 21, 300 ) | Argumen pertama 10 bukan kesalahan, sehingga fungsi tidak mengevaluasi argumen pengganti yang sesuai 11. Argumen ketiga 20 bukan kesalahan, sehingga fungsi tidak mengevaluasi argumen pengganti yang sesuai 21. Argumen kelima 300 tidak memiliki penggantian yang sesuai dan merupakan hasil default. Fungsi ini menghasilkan hasil karena rumus tidak berisi kesalahan. | 300 |
IfError( 1/0, Notify( "There was an internal problem" ) ) | Argumen pertama menghasilkan nilai kesalahan (karena pembagian dengan nol). Fungsi ini mengevaluasi argumen kedua dan menampilkan pesan kepada pengguna. Nilai yang dihasilkan IfError adalah nilai yang dihasilkan Notify, yang dipaksa ke jenis yang sama seperti argumen pertama ke IfError (angka). | 1 |
IsError Sederhana
Rumus | KETERANGAN | Hasil |
---|---|---|
IsError( 1 ) | Argumen bukanlah kesalahan. | salah |
IsError( Blank() ) | Alasannya adalah kosong, namun bukan kesalahan. | salah |
IsError( 1/0 ) | Argumen adalah kesalahan. | benar |
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) | Argumen ke IsError menghasilkan nilai kesalahan (karena pembagian dengan nol). Fungsi ini menghasilkan true, yang menyebabkan If untuk menampilkan pesan kepada pengguna dengan fungsi Notify. Nilai yang dihasilkan If adalah nilai yang dihasilkan Notify, yang dipaksa ke jenis yang sama seperti argumen pertama ke If (boolean). | benar |
IsBlankOrError Sederhana
Rumus | KETERANGAN | Hasil |
---|---|---|
IsBlankOrError( 1 ) | Alasannya bukan kesalahan atau kekosongan. | salah |
IsBlankOrError( Blank() ) | Alasannya adalah kosong. | benar |
IsBlankOrError( 1/0 ) | Argumen adalah kesalahan. | benar |
Kesalahan Sederhana
Dalam contoh ini, tanggal divalidasi relatif terhadap yang lain, sehingga menghasilkan kesalahan jika ada masalah.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
Dalam contoh ini, beberapa kesalahan diizinkan untuk melewati sementara yang lain ditekan dan diganti dengan nilai. Pada kasus pertama, b akan berada dalam status kesalahan karena fungsi Value memiliki argumen yang tidak valid. Karena ini tidak terduga oleh penulis rumus, itu dilewati sehingga pengguna akan melihatnya. Pada kasus kedua, dengan rumus yang sama, b akan memiliki nilai 0, sehingga ada pembagian dengan nol. Dalam kasus ini, penulis rumus mungkin mengetahui bahwa hal ini diterima untuk logika ini, menekan kesalahan (tidak ada banner yang ditampilkan), dan justru menghasilkan -1.
With( {a: 1, b: Value("a")},
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument
With( {a: 1, b: 0} )
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1
Tabel AllErrors dapat difilter seperti tabel lain. Digunakan dengan fungsi Error , kesalahan yang diperkirakan dapat dihilangkan dan kesalahan lainnya dipertahankan dan dilaporkan. Misalnya, jika kita mengetahui bahwa pembagian dengan nol tidak akan menjadi masalah dalam konteks tertentu, kesalahan tersebut dapat difilter, sehingga semua kesalahan lain tetap utuh dengan rumus berikut:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Langkah demi langkah
Tambahkan kontrol Input teks dan beri nama TextInput1 jika tidak memiliki nama tersebut secara default.
Tambahkan kontrol Label dan beri nama Label1 jika tidak memiliki nama tersebut secara default.
Atur rumus untuk properti TeksLabel1 ke:
IfError( Value( TextInput1.Text ), -1 )
Dalam TextInput1, masukkan 1234.
Label1 akan menampilkan nilai 1234 karena ini adalah input yang valid untuk fungsi Value.
Dalam TextInput1, masukkan ToInfinity.
Label1 akan menampilkan nilai -1 karena ini bukan input yang valid untuk fungsi Value. Tanpa mengemas fungsi Value dengan IfError, label akan menampilkan tidak ada sebagai nilai kesalahan diperlakukan sebagai kosong.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk