Latihan
Laluan pembelajaran
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Pelayar ini tidak lagi disokong.
Naik taraf kepada Microsoft Edge untuk memanfaatkan ciri, kemas kini keselamatan dan sokongan teknikal yang terkini.
Nota
Tingkah laku yang diterangkan oleh artikel ini hanya tersedia apabila ciri pratonton Pengurusan ralat peringkat formula melalui Tetapan>Ciri akan datang>Pratonton dihidupkan. Maklumat lanjut: Mengawal ciri yang didayakan
Ralat berlaku. Rangkaian menurun, storan penuh, nilai yang tidak dijangka mengalir masuk. Penting untuk logik anda terus berfungsi dengan betul dalam menghadapi isu yang berpotensi.
Secara lalai, ralat mengalir melalui formula aplikasi dan dilaporkan kepada pengguna akhir aplikasi tersebut. Dengan cara ini, pengguna akhir tahu sesuatu yang tidak dijangka telah berlaku, mereka berpotensi menyelesaikan masalah itu sendiri dengan input yang berbeza, atau mereka boleh melaporkan masalah itu kepada pemilik aplikasi.
Sebagai pembuat aplikasi, anda boleh mengawal ralat dalam aplikasi anda:
Mari kita mulakan dengan contoh mudah.
1/Value( TextInput1.Text )
Kita mendapat ralat kerana teks lalai bagi kawalan TextInput ialah "Text input"
, yang tidak boleh ditukar kepada nombor. Secara lalai ini satu perkara yang baik: pengguna akhir akan mendapatkan pemberitahuan bahawa sesuatu tidak berfungsi seperti yang diharapkan dalam aplikasi.
Jelas sekali, kami tidak mahu ralat menyapa pengguna setiap kali mereka memulakan aplikasi ini. Mungkin "Text input"
bukan lalai yang betul untuk kotak input teks. Untuk membetulkan perkara ini, mari tukar sifat Default bagi kawalan TextInput kepada:
Blank()
Hmm, sekarang kita ada ralat yang berbeza. Operasi matematik dengan blank, seperti bahagi, akan memberikan nilai kosong kepada sifar. Tindakan itu sekarang menyebabkan ralat pembahagian dengan sifar. Untuk membetulkan perkara ini, kita perlu menentukan tingkah laku yang sesuai untuk situasi ini dalam aplikasi ini. Jawapannya mungkin dengan menunjukkan blank apabila input teks ialah blank. Kita boleh mencapainya dengan membalut formula kita dengan fungsi IfError:
IfError( 1/Value( TextInput1.Text ), Blank() )
Sekarang ralat digantikan dengan nilai yang sah dan sepanduk ralat telah hilang. Tetapi, kita mungkin telah terlebih sasar, IfError yang kita gunakan merangkumi semua ralat, termasuk menaip nilai yang buruk seperti "hello"
. Kita boleh menangani perkara ini dengan menala IfError kita untuk mengendalikan pembahagian dengan kes sifar sahaja dengan dan melempar semula semua ralat lain:
IfError( 1/Value( TextInput1.Text ),
If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) )
Jadi, mari kita jalankan aplikasi kita dan cuba beberapa nilai yang berbeza.
Tanpa sebarang nilai, apabila aplikasi dimulakan, tiada jawapan dipaparkan kerana nilai lalai ialah blank, tetapi juga tiada ralat ditunjukkan kerana IfError menggantikan ralat pembahagian dengan sifar.
Jika kita menaip masuk 4, kita mendapat hasil yang dijangkakan sebanyak 0.25:
Jika kita menaip masuk sesuatu yang tidak sah, seperti hello
, maka kita akan menerima sepanduk ralat:
Ini ialah contoh pengenalan yang mudah. Pengendalian ralat boleh dilakukan dengan pelbagai cara, bergantung pada keperluan aplikasi:
IfError( Text( 1/Value( TextInput1.Text ) ),
If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
Ralat mengalir melalui formula sama seperti yang berlaku dalam Excel. Sebagai contoh dalam Excel, jika sel A1
mempunyai formula =1/0
, maka A1 akan memaparkan nilai ralat #DIV0!
:
Jika sel A2
merujuk pada A1
dengan formula seperti =A1*2
, maka ralat tersebar melalui formula itu juga:
Ralat itu menggantikan nilai yang sepatutnya dikira. Tiada hasil untuk pendaraban dalam sel A2
, hanya ralat daripada pembahagian dalam A1
.
Power Fx berfungsi dengan cara yang sama. Secara amnya, jika ralat diberikan sebagai argumen kepada fungsi atau pengendali, operasi tidak akan berlaku dan ralat input akan mengalir sebagai hasil daripada operasi. Sebagai contoh, Mid( Text( 1/0 ), 1, 1 )
akan mengembalikan ralat Pembahagian dengan Sifar, kerana ralat paling dalam diturunkan melalui fungsi Text dan fungsi Mid:
Secara amnya, ralat tidak mengalir melalui sifat kawalan Power Apps. Mari kembangkan contoh sebelumnya dengan kawalan tambahan yang dipaparkan jika sifat Text
label pertama ialah keadaan ralat:
Tidak mengapa ralat tidak disebarkan melalui kawalan kerana sistem akan memerhati ralat pada input pada semua sifat kawalan. Ralat itu tidak akan hilang.
Kebanyakan fungsi dan pengendali mengikut peraturan "ralat masuk, ralat keluar", tetapi terdapat beberapa pengecualian. Fungsi IsError, IsErrorOrBlank dan IfError direka bentuk untuk bekerja dengan ralat supaya ia tidak akan mengembalikan ralat walaupun ralat dihantar ke dalamnya.
Ralat tidak diperhatikan sehingga nilainya digunakan.
Hasilnya, fungsi If dan Select mungkin juga tidak mengembalikan ralat jika salah satu diluluskan. Pertimbangkan formula If( false, 1/0, 3 )
. Terdapat ralat pembahagian dengan sifar dalam formula ini, tetapi oleh kerana If
tidak mengambil cabang itu kerana false
, Power Fx dan Power Apps tidak akan melaporkan ralat:
Menggunakan fungsi Set dengan ralat tidak akan melaporkan ralat pada ketika ralat itu diletakkan ke dalam pemboleh ubah. Sebagai contoh dalam Power Apps, berikut adalah formula dalam App.OnStart yang meletakkan ralat pembahagian dengan sifar ke dalam pemboleh ubah x
:
Tiada ralat dilaporkan kerana x
tidak dirujuk. Walau bagaimanapun, ketika kita menambah kawalan label dan menetapkan sifat Text kepada x
, ralat dipaparkan:
Anda boleh melihat ralat dalam formula dengan fungsi IfError, IsError dan IsErrorOrBlank. Dengan fungsi ini, anda boleh mengembalikan nilai alternatif, mengambil tindakan alternatif atau mengubah suai ralat sebelum ia diperhatikan dan dilaporkan.
Selepas ralat diperhatikan, langkah seterusnya ialah untuk melaporkan ralat itu kepada pengguna akhir.
Tidak seperti Excel, tempat yang sesuai untuk menunjukkan hasil ralat tidak selalu ada, kerana hasil formula mungkin memacu sifat seperti koordinat X dan Y bagi kawalan yang tiada tempat yang sesuai untuk menunjukkan beberapa teks. Setiap hos Power Fx mengawal cara ralat akhirnya dipaparkan kepada pengguna akhir dan sejauh mana kawalan yang dimiliki oleh pembuat ke atas proses ini. Dalam Power Apps, sepanduk ralat ditunjukkan dan App.OnError digunakan untuk mengawal cara ralat dilaporkan.
Anda perlu ambil perhatian bahawa App.OnError tidak boleh menggantikan ralat dengan cara yang sama seperti yang IfError boleh lakukan. Pada ketika App.OnError dilaksanakan, ralat telah berlaku dan hasilnya telah disebarkan melalui formula lain. App.OnError hanya mengawal cara ralat dilaporkan kepada pengguna akhir dan menyediakan cangkuk untuk pembuat mencatat ralat jika dikehendaki.
Skop pemboleh ubah FirstError dan AllErrors memberikan maklumat konteks tentang ralat atau ralat-ralat. Ini memberikan maklumat tentang jenis ralat dan tempat ralat itu berasal dan tempat ia diperhatikan.
Formula tingkah laku menyokong pengambilan tindakan, pengubahsuaian pangkalan data dan penukaran keadaan. Formula ini membenarkan lebih daripada satu tindakan dilakukan dalam jujukan menggunakan ;
operator perantaian (atau ;;
bergantung pada penempatan).
Dalam hal ini, sebagai contoh, kawalan grid menunjukkan perkara yang ada dalam jadual T
. Setiap butang pilih mengubah keadaan dalam jadual ini dengan dua panggilan Patch:
Dalam formula tingkah laku berantai, tindakan tidak berhenti selepas ralat pertama. Mari ubah suai contoh kita untuk menghantar nombor indeks yang tidak sah dalam panggilan Patch pertama. Patch kedua diteruskan walaupun terdapat ralat yang lebih awal ini. Ralat pertama dilaporkan kepada pengguna akhir dan ditunjukkan sebagai ralat dalam Studio pada kawalan:
IfError boleh digunakan untuk menghentikan pelaksanaan selepas ralat. Sama seperti fungsi If, argumen ketiga untuk fungsi ini menyediakan tempat untuk meletakkan tindakan yang perlu dilaksanakan hanya jika tiada ralat:
Jika ralat ditemui semasa salah satu lelaran ForAll, lelaran selebihnya tidak akan berhenti. ForAll direka bentuk untuk melaksanakan setiap lelaran secara bebas, membolehkan pelaksanaan selari. Apabila ForAll selesai, ralat akan dikembalikan, yang mengandungi semua ralat yang ditemui (dengan memeriksa AllErrors dalam IfError atau App.OnError).
Sebagai contoh, formula berikut akan menyebabkan ForAll mengembalikan dua ralat (untuk pembahagian dengan sifar bagi Value
0, dua kali) dan Collection
akan mempunyai tiga rekod (untuk apabila Value
bukan 0): [1, 2, 3]
.
Clear( Collection );
ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) );
Oleh kerana formula tingkah laku boleh melaksanakan lebih daripada satu tindakan, ia juga boleh menemui lebih daripada satu ralat.
Secara lalai, ralat pertama dilaporkan kepada pengguna akhir. Dalam contoh ini, kedua-dua panggilan Patch akan gagal, kedua dengan ralat pembahagian dengan sifar. Hanya ralat pertama (perihal Indeks) ditunjukkan kepada pengguna:
Fungsi IfError dan App.OnError boleh mengakses semua ralat yang ditemui dengan pemboleh ubah skop AllErrors. Dalam hal ini, kita boleh menetapkan ini kepada pemboleh ubah global dan melihat kedua-dua ralat yang ditemui. Ia muncul dalam jadual dalam susunan yang sama di tempat ia ditemui:
Ralat berbilang boleh dikembalikan dalam formula bukan tingkah laku juga. Contohnya, menggunakan fungsi Patch dengan sekumpulan rekod untuk dikemas kini boleh mengembalikan berbilang ralat, satu untuk setiap rekod yang gagal.
Seperti yang kita lihat sebelum ini, ralat boleh disimpan dalam pemboleh ubah. Ralat juga boleh disertakan dalam struktur data, seperti jadual. Ini penting supaya ralat pada mana-mana satu rekod tidak boleh membatalkan seluruh jadual.
Contohnya, pertimbangkan kawalan jadual data ini dalam Power Apps:
Pengiraan dalam AddColumns telah menemui ralat pembahagian dengan sifar untuk salah satu nilai. Untuk satu rekod itu, lajur Timbal balik mempunyai nilai ralat (pembahagian dengan sifar) tetapi rekod lain tidak dan dalam keadaan baik. IsError( Index( output, 2 ) )
mengembalikan false dan IsError( Index( output, 2 ).Value )
mengembalikan true.
Jika ralat berlaku semasa menapis jadual, keseluruhan rekod adalah ralat tetapi masih dikembalikan dalam hasil supaya pengguna akhir mengetahui sesuatu telah berlaku dan terdapat masalah.
Ambil contoh ini. Di sini, jadual asal tidak mempunyai ralat, tetapi tindakan menapis menghasilkan ralat apabila Nilai bersamaan dengan 0:
Nilai -5 dan -3 ditapis dengan betul. Nilai 0 menyebabkan ralat dalam pemprosesan penapis, jadi tidak jelas sama ada rekod itu perlu disertakan atau tidak dalam hasil. Untuk memaksimumkan ketelusan bagi pengguna akhir dan membantu pembuat melakukan nyahpepijat, kami menyertakan rekod ralat sebagai ganti yang asal. Dalam kes ini, IsError( Index( output, 2 ) )
mengembalikan benar.
Fungsi yang mengubah suai data dalam sumber data, seperti Patch, Collect, Remove, RemoveIf, Update, UpdateIf dan SubmitForm melaporkan ralat dalam dua cara:
Sebagai contoh, formula ini akan menyemak ralat daripada Collect dan memaparkan mesej ralat tersuai:
IfError( Collect( Names, { Name: "duplicate" } ),
Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) )
Fungsi Errors juga mengembalikan maklumat tentang ralat lalu semasa operasi masa jalanan. Ia boleh berguna untuk memaparkan ralat pada skrin borang tanpa perlu merekodkan ralat dalam pemboleh ubah keadaan.
Kadangkala beberapa kemungkinan ralat dijangkakan dan boleh diabaikan dengan selamat. Dalam IfError dan App.OnError, jika ralat dikesan dan harus dihantar kepada pengendali lebih tinggi yang seterusnya, ia boleh dilempar semula dengan Error( AllErrors )
.
Anda juga boleh mencipta ralat anda sendiri dengan fungsi Error.
Jika anda mencipta ralat sendiri, anda disyorkan agar menggunakan nilai melebihi 1000 untuk mengelakkan kemungkinan konflik dengan nilai ralat sistem masa hadapan.
ErrorKind enum | Nilai | Penerangan |
---|---|---|
AnalysisError | 18 | Ralat sistem. Terdapat masalah dengan analisis pengkompil. |
BadLanguageCode | 14 | Kod bahasa yang tidak sah atau tidak dikenali telah digunakan. |
BadRegex | 15 | Ungkapan biasa tidak sah. Semak sintaks yang digunakan dengan fungsi IsMatch, Match atau MatchAll. |
Konflik | 6 | Rekod yang dikemas kini telah pun ditukar di sumber dan konflik perlu diselesaikan. Penyelesaian biasa ialah menyimpan sebarang perubahan setempat, segar semula rekod dan mengenakan semula perubahan. |
ConstraintViolated | 8 | Rekod tidak menghantar semakan kekangan pada pelayan. |
CreatePermission | 3 | Pengguna tidak mempunyai keizinan mencipta rekod untuk sumber data. Sebagai contoh, fungsi Collect telah dipanggil. |
DeletePermissions | 5 | Pengguna tidak mempunyai keizinan memadam rekod untuk sumber data. Sebagai contoh, fungsi Remove telah dipanggil. |
Div0 | 13 | Pembahagian dengan sifar. |
EditPermissions | 4 | Pengguna tidak mempunyai keizinan mencipta rekod untuk sumber data. Sebagai contoh, fungsi Patch telah dipanggil. |
GeneratedValue | 9 | Nilai telah tersilap dihantar ke pelayan untuk medan yang dikira secara automatik oleh pelayan. |
InvalidFunctionUsage | 16 | Penggunaan fungsi yang tidak sah. Selalunya satu atau lebih argumen kepada fungsi tidak betul atau digunakan dengan cara yang tidak sah. |
FileNotFound | 17 | Storan SaveData tidak ditemui. |
InsufficientMemory | 21 | Tiada memori atau storan yang mencukupi pada peranti untuk operasi. |
InvalidArgument | 25 | Argumen tidak sah telah dihantar ke fungsi. |
Internal | 26 | Ralat sistem. Terdapat masalah dalaman dengan salah satu fungsi. |
MissingRequired | 2 | Medan rekod yang diperlukan tiada. |
Network | 23 | Terdapat masalah dengan komunikasi rangkaian. |
None | 0 | Ralat sistem. Tiada ralat. |
NotApplicable | 27 | Tiada nilai tersedia. Berguna untuk membezakan nilai blank yang boleh dianggap sebagai sifar dalam pengiraan berangka daripada nilai kosong yang harus dibenderakan sebagai masalah yang berpotensi jika nilai itu digunakan. |
NotFound | 7 | Rekod tidak ditemukan. Sebagai contoh, rekod yang akan diubah suai dalam fungsi Patch. |
NotSupported | 20 | Operasi tidak disokong oleh pemain atau peranti ini. |
Numeric | 24 | Fungsi berangka telah digunakan dengan cara yang tidak betul. Sebagai contoh, Sqrt dengan -1. |
QuoteExceeded | 22 | Kuota storan melebihi. |
ReadOnlyValue | 10 | Lajur adalah baca sahaja dan tidak boleh diubah suai. |
ReadPermission | 19 | Pengguna tidak mempunyai keizinan baca rekod untuk sumber data. |
Sync | 1 | Ralat dilaporkan oleh sumber data. Semak lajur Mesej untuk maklumat lanjut. |
Unknown | 12 | Terdapat ralat, tetapi tidak diketahui jenis. |
Validation | 11 | Rekod tidak menghantar semakan pensahihan. |
Latihan
Laluan pembelajaran
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization