Bagikan melalui


Error, , IfErrorIsError, IsBlankOrError fungsi

Functions Berlaku pada
Error
IfError
IsError
Aplikasi Kanvas Copilot Studio Desktop mengalir kolom rumus Dataverse Aplikasi berbasis model Power Platform CLI Fungsi Dataverse Power Pages
IsBlankOrError Aplikasi Kanvas Copilot Studio Desktop mengalir aplikasi berbasis model Power Platform CLI Fungsi Dataverse Power Pages

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 menguji IfError nilai hingga menemukan 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 menyerupan fungsi If : IfError menguji kesalahan, sementara Jika pengujian untuk true.

Gunakan IfError untuk mengganti kesalahan dengan nilai yang valid sehingga perhitungan 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 melanjutkan pemrosesan 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.

Membangun pada contoh terakhir, nilai pengembalian 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 dikembalikan oleh IfError harus kompatibel.

Dalam contoh terakhir, Patch mengembalikan rekaman yang tidak kompatibel dengan Boolean yang digunakan untuk rumus Penggantianatau DefaultResult . Yang baik-baik saja, karena tidak ada situasi di mana nilai pengembalian dari panggilan Patch ini akan dikembalikan oleh IfError.

Catatan

Saat perilaku dalam proses untuk perubahan, jenis semua argumen harus IfError 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 yang berikut ini sebagai gantinya:

IfError( 1/x, "#DIV/0!" )

Rumus di atas tidak akan berfungsi. String "#DIV/0!" teks dikoercasikan ke jenis argumen pertama ke IfError, yang merupakan angka. Hasilnya IfError adalah kesalahan lain karena string teks tidak dapat dipaksa. Sebagai perbaikan, konversi argumen pertama menjadi string teks sehingga IfError selalu mengembalikan string teks:

IfError( Text( 1/x ), "#DIV/0!" )

Seperti yang terlihat di atas, IfError dapat mengembalikan 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 ).

Error rekaman meliputi:

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:

Kontrol tombol aktif, menampilkan pemberitahuan dari fungsi Notify.

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 menguji IsError nilai kesalahan.

Nilai yang dihasilkan adalah Boolean true atau false.

Menggunakan IsError mencegah pemrosesan kesalahan lebih lanjut.

IsBlankOrError

Fungsi menguji IsBlankOrError nilai kosong atau nilai kesalahan dan setara dengan Or( IsBlank( X ), IsError( X ) ).

Saat mengaktifkan penanganan kesalahan untuk aplikasi yang ada, pertimbangkan untuk 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. Error penanganan 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.

Error Gunakan fungsi 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 Jenis dan Pesan, menggunakan catatan yang sama seperti yang dijelaskan di atas untuk fungsi tersebut IfError .

Dalam konteks IfError, gunakan Error fungsi untuk menumbuhkan kembali atau melewati kesalahan. Misalnya, logika Anda mungkin IfError memutuskan bahwa dalam beberapa kasus kesalahan dapat diabaikan dengan aman, tetapi dalam kasus lain kesalahan penting untuk dikirim. Dalam IfError atau App.OnError, gunakan Error( FirstError ) untuk melewati kesalahan.

Fungsi ini Error juga dapat diteruskan tabel kesalahan, seperti yang akan ditemukan dalam tabel AllErrors . Gunakan Error( AllErrors ) untuk menumbuhkan kembali semua kesalahan dan bukan hanya yang pertama.

Rekaman kosong atau tabel kosong yang diteruskan untuk Error tidak menghasilkan kesalahan.

Sintaks

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Wajib. Error rekaman informasi, termasuk Jenis, Pesan, dan bidang lainnya. Jenis diperlukan. FirstError dapat diteruskan secara langsung.
  • ErrorTable – Wajib. Tabel rekaman informasi kesalahan. AllErrors dapat diteruskan secara langsung.

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • 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

Sederhana IfError

Rumus Description 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, Beri tahu( "Ada masalah internal" ) ) Argumen pertama menghasilkan nilai kesalahan (karena pembagian dengan nol). Fungsi ini mengevaluasi argumen kedua dan menampilkan pesan kepada pengguna. Nilai IfError yang dikembalikan adalah nilai pengembalian Notify, dikoerksi ke jenis yang sama dengan argumen pertama ke IfError (angka). 1

Sederhana IsError

Rumus Description Hasil
IsError( 1 ) Argumen bukanlah kesalahan. palsu
IsError(Kosong() ) Alasannya adalah kosong, namun bukan kesalahan. palsu
IsError( 1/0 ) Argumen adalah kesalahan. benar
If( IsError( 1/0 ), Beri tahu( "Ada masalah internal" ) ) Argumen untuk IsError mengembalikan 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

Sederhana IsBlankOrError

Rumus Description Hasil
IsBlankOrError( 1 ) Alasannya bukan kesalahan atau kekosongan. palsu
IsBlankOrError(Kosong() ) Alasannya adalah kosong. benar
IsBlankOrError( 1/0 ) Argumen adalah kesalahan. benar

Sederhana Error

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 Error fungsi , kesalahan yang diharapkan dapat dihapus dan kesalahan yang tersisa 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

  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 menunjukkan nilai 1234 karena ini adalah input yang valid untuk fungsi Nilai.

  5. Dalam TextInput1, masukkan ToInfinity.

    Label1 menunjukkan nilai-1 karena ini bukan input yang valid untuk fungsi Value. Tanpa membungkus fungsi Nilai dengan IfError, label tidak akan menunjukkan nilai karena nilai kesalahan diperlakukan sebagai kosong.

Lihat juga

Referensi rumus untuk Power Apps