Bagikan melalui


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

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:

Kontrol tombol aktif, menampilkan pemberitahuan dari fungsi Notify.

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

  1. Tambahkan kontrol Input teks dan beri nama TextInput1 jika tidak memiliki nama tersebut secara default.

  2. Tambahkan kontrol Label dan beri nama Label1 jika tidak memiliki nama tersebut secara default.

  3. Atur rumus untuk properti TeksLabel1 ke:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Dalam TextInput1, masukkan 1234.

    Label1 akan menampilkan nilai 1234 karena ini adalah input yang valid untuk fungsi Value.

  5. 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

Referensi rumus untuk Power Apps