Kongsi melalui


Ralat, IfError, IsError, fungsi IsBlankOrError

Digunakan untuk: Lajur Dataverse formula aplikasi kanvas Desktop mengalir aplikasi Power Platform berpandukan model CLI

Mengesan ralat dan memberikan nilai alternatif atau mengambil tindakan. Cipta ralat tersuai atau hantar melalui ralat.

Nota

IfError

Fungsi IfError menguji nilai sehingga ia mencari ralat. Jika fungsi menemui ralat, fungsi akan menilai dan mengembalikan nilai penggantian yang sepadan dan menghentikan penilaian selanjutnya. Nilai lalai juga boleh dibekalkan ketika tiada ralat ditemui. Struktur IfError menyerupai fungsi If: IfError diuji untuk ralat manakala If diuji untuk benar.

Gunakan IfError untuk menggantikan ralat dengan nilai yang sah sehingga pengiraan hiliran boleh diteruskan. Sebagai contoh, gunakan fungsi ini jika input pengguna dapat menghasilkan pembahagian dengan sifar:

IfError( 1/x, 0 )

Formula ini mengembalikan 0 jika nilai x adalah sifar kerana 1/x akan menghasilkan ralat. Jika x bukan sifar, maka 1/x dikembalikan.

Menghentikan pemprosesan selanjutnya

Apabila formula perantaian bersama dalam formula tingkah laku, seperti:

Patch( DS1, ... );
Patch( DS2, ... )

Fungsi Patch kedua untuk DS2 akan dicuba walaupun jika Patch untuk DS1 gagal. Skop ralat adalah terhad pada setiap formula yang dirantai.

Gunakan IfError untuk melakukan tindakan dan hanya meneruskan pemprosesan jika tindakan itu berjaya. Menggunakan IfError untuk contoh ini:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Jika Patch bagi DS1 mempunyai masalah, Notify pertama dilaksanakan. Tidak ada pemprosesan selanjutnya berlaku termasuk Patch kedua bagi DS2. Jika Tampalan pertama berjaya, Tampalan kedua akan dilaksanakan.

Jika dibekalkan, argumen DefaultResult pilihan akan dikembalikan jika tiada ralat ditemui. Tanpa argumen, argumen Nilai terakhir akan dikembalikan.

Berdasarkan contoh terakhir, nilai pulangan dari IfError boleh disemak untuk menentukan jika terdapat sebarang masalah:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Keserasian jenis

IfError akan mengembalikan nilai salah satu daripada argumennya. Jenis semua nilai yang mungkin dikembalikan oleh IfError mestilah serasi.

Dalam contoh terakhir, Patch akan mengembalikan rekod yang tidak serasi dengan Boolean yang digunakan untuk formula Penggantian atau DefaultResult. Manakah yang baik kerana tidak ada situasi yang mana nilai pulangan daripada panggilan Patch akan dikembalikan oleh IfError.

Nota

Sementara tingkah laku dalam proses perubahan, jenis semua argumen untuk IfError mesti serasi pada masa ini.

Dalam contoh mudah yang diterangkan lebih awal:

IfError( 1/x, 0 )

Jenis 1/x dan 0 serasi kerana kedua-duanya ialah nombor. Jika tidak, argumen kedua akan dipaksa untuk dipadankan dengan jenis argumen pertama.

Excel akan memaparkan #DIV/0! apabila divisyen dengan sifar berlaku.

Pertimbangkan IfError dengan yang berikut:

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

Formula di atas tidak akan berfungsi. Rentetan teks "#DIV/0!" akan dipaksa untuk jenis argumen pertama untuk IfError, yang merupakan nombor. Hasil IfError akan menjadi satu lagi ralat kerana rentetan teks tidak dapat dipaksa. Sebagai pembetulan, tukar argumen pertama kepada rentetan teks supaya IfError selalu mengembalikan rentetan teks:

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

Seperti yang dilihat di atas, IfError boleh mengembalikan ralat jika Penggantian atau DefaultResult adalah ralat.

FirstError / AllErrors

Dalam formula penggantian, maklumat tentang ralat ditemukan tersedia melalui rekod FirstError dan jadual AllErrors. AllErrors ialah jadual rekod maklumat ralat dengan FirstError menjadi pintasan kepada rekod pertama jadual ini. FirstError akan sentiasa mengembalikan nilai yang sama seperti Pertama( AllErrors ).

Rekod ralat termasuk:

Medan Jenis Description
Jenis ErrorKind enum (nombor) Kategori ralat.
Mesej Rentetan teks Mesej tentang ralat, sesuai untuk ditunjukkan kepada pengguna akhir.
Sumber Rentetan teks Lokasi di mana ralat berasal, digunakan untuk pelaporan. Contohnya, untuk formula yang terikat kepada sifat kawalan, ini akan berada dalam borang ControlName.PropertyName.
Diperhatikan Rentetan teks Lokasi di mana ralat ditunjukkan kepada pengguna, digunakan untuk pelaporan. Contohnya, untuk formula yang terikat kepada sifat kawalan, ini akan berada dalam borang ControlName.PropertyName.
Butiran Rekod Butiran tentang ralat. Pada masa ini, butiran disediakan hanya untuk ralat rangkaian. Rekod ini termasuk HttpStatusCode yang mengandungi kod status HTTP dan HttpResponse yang mengandungi badan respons daripada penyambung atau perkhidmatan.

Sebagai contoh, pertimbangkan formula berikut sebagai kawalan Butang sifat OnSelect:

Set( a, 1/0 )

Dan formula ini pada sifat OnSelect bagi kawalan Butang kedua:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Formula contoh di atas akan memaparkan sepanduk berikut apabila kedua-dua butang diaktifkan dalam jujukan:

Kawalan butang diaktifkan, menunjukkan pemberitahuan dari fungsi Makluman.

Biasanya, akan ada satu ralat yang FirstError boleh bekerja dengannya secukupnya. Walau bagaimanapun, terdapat senario di mana berbilang ralat mungkin dikembalikan. Contohnya, apabila menggunakan operator perantaian formula atau fungsi Serentak. Walaupun dalam situasi ini, pelaporan FirstError mungkin cukup untuk mendedahkan masalah daripada melebihi beban pengguna dengan berbilang ralat. Jika anda masih mempunyai keperluan untuk bekerja dengan setiap ralat secara individu, anda boleh menggunakan jadual AllErrors.

IsError

Fungsi IsError menguji untuk nilai ralat.

Nilai pulangan adalah Boolean benar atau palsu.

Menggunakan IsError akan menghalang pemprosesan ralat selanjutnya.

IsBlankOrError

Fungsi IsBlankOrError menguji sama ada nilai kosong atau nilai ralat dan adalah bersamaan dengan Or( IsBlank( X ), IsError( X ) ).

Apabila mendayakan pengendalian ralat untuk aplikasi sedia ada, pertimbangkan menggantikan IsBlank dengan IsBlankOrError untuk menjaga tingkah laku aplikasi sedia ada. Sebelum penambahan pengendalian ralat, nilai kosong digunakan untuk mewakili nilai nol daripada pangkalan data dan nilai ralat. Pengendalian ralat memisahkan kedua-dua tafsiran kosong ini yang boleh mengubah tingkah laku aplikasi sedia ada yang terus menggunakan IsBlank.

Nilai pulangan adalah boolean benar atau palsu.

Menggunakan IsBlankOrError akan mencegah sebarang pemprosesan ralat.

Gunakan fungsi Ralat untuk mencipta dan melaporkan ralat tersuai. Contohnya, anda mungkin mempunyai logik untuk menentukan sama ada sebarang nilai yang diberikan sah untuk konteks anda atau tidak—sesuatu yang tidak diperiksa untuk masalah secara automatik. Anda boleh mencipta dan mengembalikan ralat anda sendiri, lengkapkan dengan Jenis dan Mesej, menggunakan rekod sama yang diterangkan di atas untuk fungsi IfError.

Dalam konteks IfError, gunakan fungsi Ralat untuk melempar semula atau menghantar melalui ralat. Contohnya, logik anda dalam IfError mungkin memutuskan bahawa dalam sesetengah kes ralat boleh diabaikan secara selamat, tetapi dalam kes lain ralat adalah penting untuk dihantar. Dalam IfError atau App.OnError, gunakan Ralat( FirstError ) untuk menghantar ralat.

Fungsi Ralat boleh juga diberikan jadual ralat, seperti yang ditemukan dalam jadual AllErrors. Gunakan Ralat( AllErrors ) untuk melempar semula semua ralat dan bukan hanya yang pertama.

Rekod kosong atau jadual kosong yang dihantar ke Ralat menyebabkan tiada ralat.

Sintaks

Ralat( ErrorRecord )
Ralat( ErrorTable )

  • ErrorRecord – Diperlukan. Rekod maklumat ralat, termasuk Jenis, Mesej dan medan lain. Jenis diperlukan. FirstError boleh dihantar secara terus.
  • ErrorTable – Diperlukan. Jadual rekod maklumat ralat. AllErrors boleh dihantar secara terus.

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

  • Nilai – Diperlukan. Formula untuk menguji nilai ralat.
  • Penggantian – Diperlukan. Formula untuk dinilai dan nilai untuk dikembalikan jika pemadaman argumen Nilai akan mengembalikan ralat.
  • DefaultResult – Pilihan. Formula untuk menilai jika formula tidak menemui sebarang ralat.

IsError( Nilai )
IsBlankOrError( Nilai )

  • Nilai – Diperlukan. Formula untuk menguji.

Contoh

Simple IfError

Formula Penerangan Hasil
IfError( 1, 2 ) Argumen pertama bukanlah ralat. Fungsi ini tidak mempunyai ralat lain untuk menyemak dan tidak ada nilai pulangan lalai. Fungsi akan mengembalikan argumen nilai terakhir yang dinilai. 1
IfError( 1/0, 2 ) Argumen pertama akan mengembalikan nilai ralat (kerana pembahagian dengan sifar). Fungsi menilai argumen kedua dan mengembalikannya sebagai hasilnya. 2
IfError( 10, 20, 30 ) Argumen pertama bukanlah ralat. Fungsi ini tidak mempunyai ralat lain untuk menyemak tetapi mempunya nilai pulangan lalai. Fungsi akan mengembalikan argumen DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Argumen pertama 10 bukan ralat, maka fungsi tidak menilai penggantian argumen yang sepadan 11. Argumen ketiga 20 bukan ralat, maka fungsi tidak menilai penggantian argumen yang sepadan 21. Argumen kelima 300 tidak mempunyai penggantian yang sesuai dan merupakan hasil lalai. Fungsi akan mengembalikan hasil kerana formula tidak mengandungi ralat. 300
IfError( 1/0, Makluman( "Terdapat masalah dalaman" ) ) Argumen pertama akan mengembalikan nilai ralat (disebabkan oleh pembahagian dengan sifar). Fungsi menilai argumen kedua dan memaparkan mesej kepada pengguna. Nilai pulangan IfError ialah nilai pulangan bagi Makluman, dipaksa untuk jenis yang sama dengan argumen untuk IfError (nombor). 1

Simple IsError

Formula Penerangan Hasil
IsError( 1 ) Argumen bukanlah ralat. false
IsError( Blank() ) Argumen adalah kosong, tetapi bukan ralat. false
IsError( 1/0 ) Argumen adalah ralat. benar
Jika( IsError( 1/0 ), Maklumkan( "Terdapat masalah dalaman" ) ) Argumen untuk IsError akan mengembalikan nilai ralat (kerana pembahagian dengan sifar). Fungsi ini mengembalikan benar, yang menyebabkan If untuk memaparkan mesej kepada pengguna dengan fungsi Notify. Nilai pulangan If ialah nilai pulangan bagi Makluman, dipaksa untuk jenis yang sama dengan argumen untuk If (boolean). benar

IsBlankOrError Mudah

Formula Penerangan Hasil
IsBlankOrError( 1 ) Argumen bukanlah ralat atau kosong. false
IsBlankOrError( Kosong() ) Argumen adalah kosong. benar
IsBlankOrError( 1/0 ) Argumen adalah ralat. benar

Ralat Ringkas

Dalam contoh ini, tarikh disahkan relatif antara satu sama lain, menyebabkan ralat jika terdapat masalah.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

Dalam contoh ini, sesetengah ralat dibenarkan melalui manakala yang lain disekat dan digantikan dengan nilai. Dalam kes pertama, b akan berada dalam keadaan ralat kerana fungsi Nilai mempunyai argumen tidak sah. Kerana ini tidak dijangka oleh penulis formula, ia dihantar supaya pengguna akan melihatnya. Dalam kes kedua, dengan formula yang sama, b akan mempunyai nilai 0, menyebabkan divisyen dengan sifar. Dalam kes ini, penulis formula mungkin mengetahui bahawa ini boleh diterima untuk logik ini, menyekat ralat (tiada sepanduk ditunjukkan), dan mengembalikan -1 sebaliknya.

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

Jadual AllErrors boleh ditapis seperti mana-mana jadual lain. Digunakan dengan fungsi Ralat, ralat yang dijangkakan boleh dialih keluar dan ralat baki dikekalkan dan dilaporkan. Contohnya, jika kita tahu bahawa divisyen dengan sifar tidak akan menjadi masalah dalam konteks tertentu, ralat tersebut boleh ditapis, meninggalkan semua ralat lain yang utuh dengan formula berikut:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Langkah demi langkah

  1. Tambah kawalan Input teks dan namakannya TextInput1 jika tidak mempunyai nama tersebut secara lalai.

  2. Tambah kawalan Label dan namakannya Label1 jika tidak mempunyai nama tersebut secara lalai.

  3. Set formula untuk sifat Label1Teks untuk:

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

    Label1 akan menunjukkan nilai 1234 kerana ini adalah input yang sah untuk fungsi Nilai.

  5. Dalam TextInput1, masuk ToInfinity.

    Label1 akan menunjukkan nilai -1 kerana ini bukan input yang sah untuk fungsi Nilai. Tanpa memperkemaskan fungsi Nilai dengan IfError, label tidak akan menunjukkan nilai kerana nilai ralat dianggap sebagai kosong.

Lihat juga

Rujukan formula untuk Power Apps