Fungsi Error, IfError, IsError, IsBlankOrError
Berlaku untuk: Kolom rumus aplikasi kanvas Dataverse Alur desktop Aplikasi berdasarkan Power Pages Power Platform model CLI
Mendeteksi kesalahan dan memberikan nilai alternatif atau mengambil tindakan. Membuat kesalahan kustom atau melewatkan kesalahan.
Catatan
Jika aplikasi telah menonaktifkan fitur manajemen kesalahan tingkat rumus di bawah Pembaruan Pengaturan>>Dihentikan, fungsi tersebut tidak akan berfungsi dengan benar.
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 mengembalikan 0
jika nilai nol x
, karena 1/x
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 Patch DS1
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 mengembalikan nilai salah satu argumennya. Jenis semua nilai yang mungkin dihasilkan oleh IfError harus kompatibel.
Dalam contoh terakhir, Patch mengembalikan rekaman yang tidak kompatibel dengan Boolean yang digunakan untuk rumus Penggantian 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 dipaksa untuk mencocokkan jenis argumen pertama.
Excel menampilkan #DIV/0! ketika pembagian dengan nol terjadi.
Pertimbangkan IfError dengan berikut sebagai gantinya:
IfError( 1/x, "#DIV/0!" )
Rumus di atas tidak akan berfungsi. String "#DIV/0!"
teks dipaksa ke jenis argumen pertama ke IfError, yang merupakan angka. Hasil dari IfError adalah kesalahan lain karena string teks tidak dapat dipaksakan. 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 menjadi pintasan ke rekaman pertama tabel ini. FirstError selalu mengembalikan 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. Misalnya, untuk rumus yang terikat ke properti kontrol, nilai ini dalam bentuk ControlName.PropertyName. |
Diamati | String teks | Lokasi tempat kesalahan dimunculkan ke pengguna, digunakan untuk pelaporan. Misalnya, untuk rumus yang terikat ke properti kontrol, nilai ini dalam bentuk ControlName.PropertyName. |
Rincian | Rekaman | Detail tentang kesalahan. Saat ini, detail hanya diberikan untuk kesalahan jaringan. Rekaman 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 akan ada satu kesalahan yang dapat ditangani 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 mencegah pemrosesan 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 mewakili nilai null 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 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
Kesalahan( Catatan Kesalahan)
Kesalahan( Tabel Kesalahan)
- ErrorRecord – Wajib. Rekaman informasi kesalahan, termasuk Kind, Message, dan bidang lainnya. Jenis diperlukan. FirstError dapat diteruskan secara langsung.
- ErrorTable – Wajib. Tabel rekaman informasi kesalahan. AllErrors dapat diteruskan secara langsung.
IfError(Nilai1,Penggantian1 [, Nilai 2,Penggantian2 , ... [, Hasil Default ] ] )
- Nilai – Wajib. Rumus untuk menguji nilai kesalahan.
- Penggantian – Diperlukan. 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( Nilai )
IsBlankOrError( Nilai )
- Nilai – Wajib. Rumus untuk diuji.
Contoh
IfError Sederhana
Rumus | KETERANGAN | Hasil |
---|---|---|
JikaKesalahan( 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 |
JikaKesalahan(1/0, 2) | Argumen pertama menghasilkan nilai kesalahan (karena pembagian dengan nol). Fungsi ini mengevaluasi argumen kedua dan menghasilkannya sebagai hasilnya. | 2 |
JikaKesalahan( 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 |
JikaKesalahan( 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( "Ada masalah internal") | 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. | palsu |
IsError( Kosong() ) | Alasannya adalah kosong, namun bukan kesalahan. | palsu |
IsError( 1/0 ) | Argumen adalah kesalahan. | benar |
Jika( IsError( 1/0 ), Beritahu( "Ada masalah internal" ) ) | 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. | palsu |
IsBlankOrError( Kosong() ) | 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 dilewatkan sementara yang lain ditekan dan diganti dengan nilai. Dalam kasus pertama, b berada dalam status kesalahan karena fungsi Value memiliki argumen yang tidak valid. Karena ini tidak terduga oleh penulis rumus, ini dilewatkan sehingga pengguna melihatnya. Dalam kasus kedua, dengan rumus yang sama, b memiliki nilai 0, menghasilkan 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 tahu bahwa pembagian dengan nol tidak akan menjadi masalah dalam konteks tertentu, kesalahan tersebut dapat disaring, membiarkan semua kesalahan lainnya 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 Teks Label1 ke:
IfError( Value( TextInput1.Text ), -1 )
Dalam TextInput1, masukkan 1234.
Label1 menunjukkan nilai 1234 karena ini adalah input yang valid untuk fungsi Nilai.
Dalam TextInput1, masukkan ToInfinity.
Label1 menunjukkan 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.