Κοινή χρήση μέσω


Χειρισμός σφαλμάτων

Σημείωμα

Η συμπεριφορά που περιγράφεται σε αυτό το άρθρο είναι διαθέσιμη μόνο όταν η δυνατότητα προεπισκόπησης Διαχείριση σφαλμάτων σε επίπεδο τύπου μέσω των Ρυθμίσεων>Επερχόμενες δυνατότητες>Έκδοση προεπισκόπησης είναι ενεργοποιημένη. Περισσότερες πληροφορίες: Έλεγχος των δυνατοτήτων που έχουν ενεργοποιηθεί

Συμβαίνουν σφάλματα. Τα δίκτυα πέφτουν, ο χώρος αποθήκευσης γεμίζει, εμφανίζονται μη αναμενόμενες τιμές. Είναι σημαντικό η λογική σας να συνεχίσει να λειτουργεί σωστά μπροστά σε ενδεχόμενα ζητήματα.

Από προεπιλογή, τα σφάλματα εμφανίζονται στους τύπους μιας εφαρμογής και αναφέρονται στον τελικό χρήστη της εφαρμογής. Με αυτόν τον τρόπο, ο τελικός χρήστης γνωρίζει ότι συνέβη κάτι απροσδόκητο, μπορεί ενδεχομένως να επιδιορθώσει το πρόβλημα μόνος του με διαφορετική εισαγωγή ή μπορεί να αναφέρει το πρόβλημα στον κάτοχο της εφαρμογής.

Ως δημιουργός εφαρμογών, μπορείτε να ελέγξετε τα σφάλματα στην εφαρμογή σας:

  • Εντοπισμός και χειρισμός ενός σφάλματος. Εάν υπάρχει πιθανότητα να παρουσιαστεί κάποιο σφάλμα, οι τύποι της εφαρμογής μπορούν να γραφτούν έτσι ώστε να εντοπίσετε τη συνθήκη σφάλματος και να προσπαθήσετε ξανά τη λειτουργία. Ο τελικός χρήστης δεν χρειάζεται να ανησυχεί ότι παρουσιάστηκε σφάλμα επειδή ο δημιουργός έλαβε υπόψη του τη δυνατότητα. Αυτό γίνεται με τις συναρτήσεις IfError, IsError, και IsErrorOrBlank εντός ενός τύπου.
  • Αναφορά ενός σφάλματος. Εάν δεν γίνει χειρισμός ενός σφάλματος στον τύπο όπου παρουσιάστηκε, το σφάλμα εμφανίζεται ως φυσαλίδα στο πρόγραμμα χειρισμού app.OnError . Εδώ, το σφάλμα δεν μπορεί πλέον να αντικατασταθεί όπως έχει ήδη συμβεί και αποτελεί μέρος των υπολογισμών τύπου. Ωστόσο, μπορείτε να χρησιμοποιήσετε το App.OnError για να ελέγξετε τον τρόπο με τον οποίο αναφέρεται το σφάλμα στον τελικό χρήστη, συμπεριλαμβανομένης της διακοπής της αναφοράς του σφάλματος. Το App.OnError παρέχει επίσης ένα σύνηθες σημείο στραγγαλισμού για την αναφορά σφαλμάτων σε ολόκληρη την εφαρμογή.
  • Δημιουργία και αλλαγή σφάλματος. Τέλος, μπορεί να εντοπίσετε μια συνθήκη σφάλματος με τη δική σας λογική, μια συνθήκη που αφορά ειδικά την εφαρμογή σας. Χρησιμοποιήστε τη συνάρτηση Error για να δημιουργήσετε προσαρμοσμένα σφάλματα. Η συνάρτηση Error χρησιμοποιείται επίσης για την αλλαγή ενός σφάλματος μετά την ερώτηση σε IfError ή App.OnError.

Πώς να ξεκινήσετε

Ας ξεκινήσουμε με ένα απλό παράδειγμα.

  1. Δημιουργήστε μια νέα οθόνη σε μια εφαρμογή καμβά Power Apps.
  2. Εισαγάγετε ένα στοιχείο ελέγχου TextInput. Θα επιστρέψει στο προεπιλεγμένο όνομα TextInput1.
  3. Εισαγάγετε ένα στοιχείο ελέγχου Label.
  4. Επιλέξτε την ιδιότητα Text του στοιχείου ελέγχου Label στον τύπο
1/Value( TextInput1.Text )

Εμφανίζεται ένα διαφημιστικό πλαίσιο σφάλματος με

Έχουμε ένα σφάλμα επειδή το προεπιλεγμένο κείμενο ενός στοιχείου ελέγχου TextInput είναι "Text input", το οποίο δεν είναι δυνατό να μετατραπεί σε αριθμό. Από προεπιλογή, αυτό είναι καλό: ο τελικός χρήστης θα λάβει μια ειδοποίηση ότι κάτι δεν λειτουργεί όπως ήταν αναμενόμενο στην εφαρμογή.

Προφανώς, δεν θέλουμε να εμφανίζεται σφάλμα χαιρετισμού στο χρήστη κάθε φορά που ξεκινάει αυτή η εφαρμογή. Το πιθανότερο το "Text input" δεν είναι η σωστή προεπιλογή για πλαίσιο εισαγωγής κειμένου ούτως ή άλλως. Για να το λύσουμε αυτό, ας αλλάξουμε την ιδιότητα Default του στοιχείο ελέγχου TextInput σε:

Blank()

Διαφημιστικό πλαίσιο σφάλματος που εμφανίζεται με το μήνυμα

Τώρα έχουμε διαφορετικό σφάλμα. Οι μαθηματικές πράξεις με κενό, όπως η διαίρεση, θα εξωθήσουν την κενή τιμή στο μηδέν. Αυτό έχει πλέον ως αποτέλεσμα διαίρεση με μηδενικό σφάλμα. Για να διορθώσουμε αυτό το πρόβλημα, πρέπει να αποφασίσουμε ποια είναι η κατάλληλη συμπεριφορά για αυτήν την κατάσταση σε αυτήν την εφαρμογή. Η απάντηση μπορεί να είναι να εμφανίζεται κενό όταν το κείμενο που εισάγεται είναι κενό. Αυτό μπορούμε να το πετύχομε περιτυλίγοντας τον τύπο με τη συνάρτηση IfError:

IfError( 1/Value( TextInput1.Text ), Blank() )

Δεν εμφανίζεται διαφημιστικό πλαίσιο σφάλματος, ένα σφάλμα λόγω κενής τιμής έχει αντικατασταθεί με ένα κενό

Τώρα το σφάλμα αντικαθίσταται με μια έγκυρη τιμή και το διαφημιστικό πλαίσιο σφάλματος δεν εμφανίζεται. Ωστόσο, ενδέχεται να έχουμε προσπέραση, το IfError που χρησιμοποιήσαμε καλύπτει όλα τα σφάλματα, συμπεριλαμβανομένης της πληκτρολόγησης σε κακές τιμές, όπως. "hello" Μπορούμε να αντιμετωπίσουμε αυτό το πρόβλημα συντονίζοντας το IfError να χειρίζεται την υπόθεση της διαίρεσης με το μηδέν μόνο και αλλάζοντας όλα τα άλλα σφάλματα:

IfError( 1/Value( TextInput1.Text ), 
         If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) )

Δεν εμφανίζεται διαφημιστικό πλαίσιο σφάλματος, ένα σφάλμα που οφείλεται ειδικά στη διαίρεση με το μηδέν έχει αντικατασταθεί από ένα κενό, διαφορετικά το σφάλμα εμφανίζεται εκ νέου

Επομένως, εκτελέστε την εφαρμογή και δοκιμάστε ορισμένες διαφορετικές τιμές.

Χωρίς καμία τιμή, όπως όταν ξεκινά η εφαρμογή, δεν εμφανίζεται απάντηση καθώς η προεπιλεγμένη τιμή είναι κενή, αλλά δεν εμφανίζεται κανένα σφάλμα καθώς το IfError αντικαθιστά τη διαίρεση με μηδενικό σφάλμα.

Δεν εμφανίζεται απάντηση και δεν υπάρχει διαφημιστικό πλαίσιο σφάλματος

Εάν πληκτρολογήσουμε 4, θα έχουμε το αναμενόμενο αποτέλεσμα με 0,25:

0,25 εμφανίζεται και δεν υπάρχει διαφημιστικό πλαίσιο σφάλματος

Επίσης, εάν πληκτρολογήσουμε κάτι μη έγκυρο, όπως hello, στη συνέχεια, θα εμφανιστεί ένα διαφημιστικό πλαίσιο σφάλματος:

δεν εμφανίζεται καμία τιμή και διαφημιστικό πλαίσιο σφάλματος για την αδυναμία μετατροπής του μηνύματος

Αυτό είναι ένα απλό εισαγωγικό παράδειγμα. Ο χειρισμός σφαλμάτων μπορεί να γίνει με πολλούς και διάφορους τρόπους, ανάλογα με τις ανάγκες της εφαρμογής:

  1. Αντί για ένα διαφημιστικό πλαίσιο σφάλματος, θα μπορούσαμε να εμφανίσουμε "#Error" , στο στοιχείο ελέγχου ετικέτας με τον τύπο. Για να διατηρήσουμε τους τύπους των υποκατάστατων με το πρώτο όρισμα σε IfError, πρέπει να μετατρέψουμε ρητά το αριθμητικό αποτέλεσμα σε συμβολοσειρά κειμένου με τη συνάρτηση Text.
    IfError( Text( 1/Value( TextInput1.Text ) ), 
             If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" )
    
    δεν εμφανίζεται διαφημιστικό πλαίσιο σφάλματος και αντίθετα εμφανίζεται #Error ως αποτέλεσμα
  2. Αντί να περιτυλίξουμε τη συγκεκριμένη παρουσία με το IfError, θα μπορούσαμε να έχουμε γράψει ένα κεντρικό πρόγραμμα χειρισμού App.OnError. Δεν μπορούμε να αντικαταστήσουμε τη συμβολοσειρά που εμφανίζεται με "#Error" καθώς το σφάλμα έχει ήδη συμβεί και το καθώς το σφάλμα έχει ήδη συμβεί και το App.OnError παρέχεται μόνο για τον έλεγχο αναφορών.
    If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) )
    

Μετάδοση σφαλμάτων

Τα σφάλματα περνούν μέσα από τύπους όπως και στο Excel. Για παράδειγμα, στο Excel, εάν το κελί A1 έχει τον τύπο =1/0, τότε το A1 θα εμφανίσει την τιμή σφάλματος #DIV0!:

Υπολογιστικό φύλλο Excel με A1=1/0 και #DIV/0! να εμφανίζονται στο κελί

Εάν το κελί A2 αναφέρεται στο A1 με έναν τύπο όπως =A1*2, τότε το σφάλμα μεταδίδεται και μέσω αυτού του τύπου:

Υπολογιστικό φύλλο Excel με A2=A1*2 και #DIV/0! να εμφανίζονται στο κελί

Το σφάλμα αντικαθιστά την τιμή που θα είχε υπολογιστεί διαφορετικά. Δεν υπάρχει αποτέλεσμα για τον πολλαπλασιασμό στο κελί A2, παρά μόνο το σφάλμα από τη διαίρεση στο A1.

Το Power Fx λειτουργεί με τον ίδιο τρόπο. Γενικά, εάν ένα σφάλμα παρέχεται ως όρισμα σε μια συνάρτηση ή τελεστή, η λειτουργία δεν θα λάβει χώρα και το σφάλμα εισόδου θα εμφανιστεί ως αποτέλεσμα της πράξης. Για παράδειγμα, το Mid( Text( 1/0 ), 1, 1 ) θα επιστρέψει ένα σφάλμα Διαίρεσης με το μηδέν, καθώς το πιο εσωτερικό σφάλμα περνά μέσα από τη συνάρτηση Text και τη συνάρτηση Mid:

Διαφημιστικό πλαίσιο σφάλματος που δείχνει τη μη έγκυρη λειτουργία: διαίρεση με το μηδέν

Γενικά, τα σφάλματα δεν περνούν μέσα από τις ιδιότητες του στοιχείου ελέγχου του Power Apps. Ας επεκτείνουμε το προηγούμενο παράδειγμα με ένα πρόσθετο στοιχείο ελέγχου που εμφανίζεται εάν η ιδιότητα της πρώτης ετικέτας Text είναι κατάσταση σφάλματος:

Δεν εμφανίζεται σφάλμα στο στοιχείο ελέγχου δεύτερης ετικέτας

Είναι καλό τα σφάλματα να μην μεταδίδονται μέσω ενός στοιχείου ελέγχου, επειδή το σύστημα θα παρατηρεί σφάλματα κατά την εισαγωγή σε όλες τις ιδιότητες του στοιχείου ελέγχου. Το σφάλμα δεν θα χαθεί.

Οι περισσότερες συναρτήσεις και τελεστές ακολουθούν τον κανόνα "error in, error out", αλλά υπάρχουν ορισμένες εξαιρέσεις. Οι συναρτήσεις IsError, IsErrorOrBlank και IfError έχουν σχεδιαστεί να λειτουργούν με σφάλματα, ώστε να μην επιστρέφουν κάποιο σφάλμα ακόμα και αν περάσει μέσα τους.

Παρατήρηση σφαλμάτων

Τα σφάλματα δεν παρατηρούνται έως ότου χρησιμοποιηθεί η τιμή τους.

Το αποτέλεσμα είναι ότι οι συναρτήσεις If και Select ενδέχεται επίσης να μην επιστρέψουν ένα σφάλμα, εάν περάσει. Λάβετε υπόψη τον τύπο If( false, 1/0, 3 ). Υπάρχει σφάλμα διαίρεσης με το μηδέν σε αυτόν τον τύπο, αλλά αφού το If δεν λαμβάνει αυτόν τον κλάδο λόγω του false, τα Power Fx και Power Apps δεν θα αναφέρουν σφάλμα:

Δεν εμφανίζεται διαφημιστικό πλαίσιο σφάλματος με τη συνάρτηση If στην ιδιότητα Κειμένου ετικέτας

Η χρήση της συνάρτησης Set με σφάλμα δεν θα αναφέρει σφάλμα στο σημείο που το σφάλμα τοποθετείται στη μεταβλητή. Για παράδειγμα στο Power Apps, ακολουθεί ένας τύπος στο App.OnStart που τοποθετεί ένα σφάλμα διαίρεσης με το μηδέν στη μεταβλητή x:

Δεν εμφανίζεται διαφημιστικό πλαίσιο σφάλματος με την κλήση Ορισμός συνάρτησης στο App.OnStart

Δεν γίνεται αναφορά σφάλματος, επειδή το x δεν αναφέρεται. Ωστόσο, μόλις προσθέσουμε ένα στοιχείο ελέγχου ετικέτας και ορίσομυε την ιδιότητα Text στο x, εμφανίζεται το σφάλμα:

Διαφημιστικό πλαίσιο σφάλματος με στοιχείο ελέγχου ετικέτας που αναφέρεται στη μεταβλητή x

Μπορείτε να παρατηρείτε σφάλματα εντός του τύπου με τις συναρτήσεις IfError, IsError, και IsErrorOrBlank. Με αυτές τις συναρτήσεις, μπορείτε να επιστρέψετε μια εναλλακτική τιμή, να κάνετε εναλλακτική ενέργεια ή να τροποποιήσετε το σφάλμα πριν την εφαρμογή και την αναφορά της.

Αναφορά σφαλμάτων

Μετά την παρατήρηση ενός σφάλματος, το επόμενο βήμα είναι η αναφορά του σφάλματος στον τελικό χρήστη.

Σε αντίθεση με το Excel, δεν υπάρχει πάντα ένα κατάλληλο μέρος για να εμφανίζεται το αποτέλεσμα ενός σφάλματος, καθώς το αποτέλεσμα του τύπου μπορεί να οδηγήσει μια ιδιότητα, όπως οι συντεταγμένες X και Y ενός στοιχείου ελέγχου για το οποίο δεν υπάρχει κατάλληλο μέρος για εμφάνιση κάποιου κειμένου. Κάθε κεντρικός υπολογιστής Power Fx ελέγχει τον τρόπο με τον οποίο εμφανίζονται εντέλει τα σφάλματα στον τελικό χρήστη και το πλήθος των στοιχείων ελέγχου που διαθέτει ο δημιουργός σε αυτήν τη διεργασία. Στο Power Apps, εμφανίζεται ένα διαφημιστικό πλαίσιο σφάλματος και το App.OnError χρησιμοποιείται για τον έλεγχο του πώς αναφέρεται το σφάλμα.

Είναι σημαντικό να σημειωθεί ότι το App.OnError δεν μπορεί να αντικαταστήσει το σφάλμα με τον ίδιο τρόπο που μπορεί να το αντικαταστήσει το IfError . Στο σημείο που εκτελείται το App.OnError, το σφάλμα έχει ήδη συμβεί και το αποτέλεσμα έχει αναπαραχθεί μέσω άλλων τύπων. Το App.OnError ελέγχει μόνο τον τρόπο με τον οποίο γίνεται η αναφορά του σφάλματος στον τελικό χρήστη και παρέχει στον δημιουργό τη δυνατότητα καταγραφής του σφάλματος, εάν θέλει.

Οι μεταβλητές πεδίου FirstError και AllErrors παρέχουν πληροφορίες περιβάλλοντος σχετικά με το σφάλμα ή τα σφάλματα. Αυτό παρέχει πληροφορίες σχετικά με το είδος του σφάλματος και το σημείο προέλευσης του σφάλματος καθώς και το σημείο όπου παρατηρήθηκε.

Διακοπή μετά από ένα σφάλμα

Οι τύποι συμπεριφοράς υποστηρίζουν την ανάληψη ενεργειών, την τροποποίηση βάσεων δεδομένων και την αλλαγή κατάστασης. Αυτοί οι τύποι επιτρέπουν την εκτέλεση περισσότερων από μία ενεργειών σε μια ακολουθία με τη χρήση του ;τελεστή σύνδεσης σε αλυσίδα (ή ;; ανάλογα με τις τοπικές ρυθμίσεις).

Σε αυτήν την περίπτωση, για παράδειγμα, το στοιχείο ελέγχου πλέγματος δείχνει τι βρίσκεται στον πίνακα T. Κάθε κουμπί που επιλέγετε αλλάζει την κατάσταση σε αυτόν τον πίνακα με δύο κλήσεις Patch:

Κινούμενο σχέδιο που δείχνει τις δύο καρτέλες στον πίνακα T που ενημερώνονται με τυχαίους αριθμούς μετά από κάθε κλικ στο κουμπί

Σε έναν τύπο αλυσιδωτής συμπεριφοράς, οι ενέργειες δεν σταματούν μετά το πρώτο σφάλμα. Ας τροποποιήσουμε το δικό μας παράδειγμα για να μεταβιβάσουμε έναν μη έγκυρο αριθμό ευρετηρίου στην πρώτη κλήση Patch. Το δεύτερο Patch συνεχίζεται παρά το προηγούμενο σφάλμα. Το πρώτο σφάλμα αναφέρεται στον τελικό χρήστη και εμφανίζεται ως σφάλμα στο Studio στο στοιχείο ελέγχου:

Κινούμενο σχέδιο που δείχνει μόνο τη δεύτερη καρτέλα του πίνακα T που ενημερώνεται με τυχαίους αριθμούς μετά από κάθε κλικ στο κουμπί, η πρώτη καρτέλα με αποτέλεσμα ένα σφάλμα

Το IfError μπορεί να χρησιμοποιηθεί για τη διακοπή της εκτέλεσης μετά από ένα σφάλμα. Όπως και με τη συνάρτηση If , το τρίτο όρισμα σε αυτήν τη συνάρτηση παρέχει ένα σημείο για την τοποθέτηση ενεργειών οι οποίες θα πρέπει να εκτελεστούν μόνο εάν δεν υπάρχει σφάλμα:

Κινούμενο σχέδιο που δεν εμφανίζει αλλαγές σε καμία από τις δύο καρτέλες στον πίνακα T, επειδή το IfError αποτρέπει την ολοκλήρωση της δεύτερης λειτουργίας μετά από ένα σφάλμα

Εάν παρουσιαστεί σφάλμα κατά τη διάρκεια μίας από τις επαναλήψεις του ForAll, οι υπόλοιπες επαναλήψεις δεν θα σταματήσουν. Το ForAll έχει σχεδιαστεί για να εκτελεί κάθε επανάληψη ανεξάρτητα, επιτρέποντας την παράλληλη εκτέλεση. Όταν ολοκληρωθεί το ForAll , θα επιστραφεί ένα σφάλμα, το οποίο περιέχει όλα τα σφάλματα που παρουσιάστηκαν (εξετάζοντας το AllErrors στο IfError ή App.OnError).

Για παράδειγμα, ο παρακάτω τύπος θα έχει ως αποτέλεσμα το ForAll να επιστρέφει δύο σφάλματα (για τη διαίρεση με μηδέν για την Value του 0, δύο φορές) και το Collection θα έχει τρεις καρτέλες (για όταν το Value δεν είναι 0): [1, 2, 3].

Clear( Collection ); 
ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) );

Εργασία με πολλά σφάλματα

Καθώς ένας τύπος συμπεριφοράς μπορεί να εκτελέσει περισσότερες από μία ενέργειες, μπορεί επίσης να αντιμετωπίσει περισσότερα από ένα σφάλματα.

Από προεπιλογή, το πρώτο σφάλμα αναφέρεται στον τελικό χρήστη. Σε αυτό το παράδειγμα, και οι δύο κλήσεις Patch θα αποτύχουν, η δεύτερη με σφάλμα διαίρεσης με το μηδέν. Μόνο το πρώτο σφάλμα (σχετικά με το ευρετήριο) εμφανίζεται στο χρήστη:

Το πρώτο σφάλμα ευρετηρίου που εμφανίζεται σε ένα διαφημιστικό πλαίσιο σφάλματος, το δεύτερο σφάλμα δεν αναφέρθηκε

Οι συναρτήσεις IfError και App.OnError μπορούν να έχουν πρόσβαση σε όλα τα σφάλματα που παρουσιάστηκαν με τη μεταβλητή πεδίου AllErrors. Σε αυτή την περίπτωση, μπορούμε να το ορίσουμε σε μια καθολική μεταβλητή και να δούμε και τα δύο σφάλματα που παρουσιάστηκαν. Εμφανίζονται στον πίνακα με την ίδια σειρά με την οποία απαντούν:

Καταγραφή των σφαλμάτων στην παγκόσμια μεταβλητή PatchErrors όπου μπορούμε να δούμε ότι και τα δύο σφάλματα υπάρχουν

Είναι επίσης δυνατό να επιστραφούν πολλαπλά σφάλματα σε τύπους μη συμπεριφοράς. Για παράδειγμα, η χρήση της συνάρτησης Patchμε μια δέσμη καρτελών για ενημέρωση μπορεί να επιστρέψει πολλά σφάλματα, ένα για κάθε καρτέλα που αποτυγχάνει.

Σφάλματα σε πίνακες

Όπως είχαμε δει προηγουμένως, τα σφάλματα είναι δυνατό να αποθηκευτούν σε μεταβλητές. Είναι δυνατό επίσης να συμπεριληφθούν σφάλματα σε δομές δεδομένων, όπως πίνακες. Αυτό είναι σημαντικό, ώστε ένα σφάλμα σε οποιαδήποτε καρτέλα να μην μπορεί να ακυρώσει ολόκληρο τον πίνακα.

Για παράδειγμα, εξετάστε αυτό το στοιχείο ελέγχου πίνακα δεδομένων στο Power Apps:

Πίνακας δεδομένων που δείχνει ένα σφάλμα για το πεδίο

Ο υπολογισμός στο AddColumns έχει συναντήσει σφάλμα διαίρεσης με το μηδέν για μία από τις τιμές. Για αυτήν την καρτέλα, η στήλη Reciprocal έχει μια τιμή σφάλματος (διαίρεση με το μηδέν), αλλά οι άλλες καρτέλες δεν έχουν και είναι μια χαρά. Το IsError( Index( output, 2 ) ) επιστρέφει false και το IsError( Index( output, 2 ).Value ) επιστρέφει true.

Εάν παρουσιαστεί σφάλμα κατά το φιλτράρισμα ενός πίνακα, ολόκληρη η καρτέλα είναι ένα σφάλμα, αλλά εξακολουθεί να επιστρέφεται στο αποτέλεσμα, ώστε ο τελικός χρήστης να γνωρίζει ότι υπήρχε κάτι εκεί και ότι υπάρχει κάποιο πρόβλημα.

Δείτε αυτό το παράδειγμα. Εδώ, ο αρχικός πίνακας δεν έχει σφάλματα, αλλά η ενέργεια του φιλτραρίσματος δημιουργεί σφάλμα όταν το Value ισούται με 0:

Πίνακας δεδομένων που δείχνει σφάλματα για δύο καρτέλες των οποίων δεν ήταν δυνατή η επεξεργασία από τα κριτήρια φιλτραρίσματος

Οι τιμές -5 και -3 φιλτράρονται σωστά. Οι τιμές 0 οδηγούν σε σφάλμα στην επεξεργασία του φίλτρου και έτσι δεν είναι σαφές εάν η καρτέλα πρέπει να συμπεριληφθεί ή όχι στο αποτέλεσμα. Για να μεγιστοποιηθεί η διαφάνεια για τους τελικούς χρήστες και να βοηθηθούν οι δημιουργοί στον εντοπισμό σφαλμάτων, συμπεριλαμβάνουμε μια καρτέλα σφάλματος στη θέση του αρχικού. Σε αυτήν την περίπτωση, το IsError( Index( output, 2 ) ) επιστρέφει true.

Σφάλματα προέλευσης δεδομένων

Οι συναρτήσεις που τροποποιούν δεδομένα σε προελεύσεις δεδομένων, όπως Patch, Collect, Remove, RemoveIf, Update, UpdateIf, και SubmitForm αναφέρουν σφάλματα με δύο τρόπους:

  • Καθεμία από αυτές τις συναρτήσεις θα επιστρέψει μια τιμή σφάλματος ως αποτέλεσμα της λειτουργίας. Τα σφάλματα μπορούν να ανιχνευθούν με το IsError και να αντικατασταθούν ή να ματαιωθούν με το IfError και το App.OnError ως συνήθως.
  • Μετά τη λειτουργία, η συνάρτηση Errors θα επιστρέψει επίσης τα σφάλματα για προηγούμενες λειτουργίες. Αυτό μπορεί να είναι χρήσιμο για την εμφάνιση του μηνύματος σφάλματος σε μια οθόνη φόρμας χωρίς να χρειάζεται να καταγράψετε το σφάλμα σε μια μεταβλητή κατάστασης.

Για παράδειγμα, αυτός ο τύπος θα ελέγξει για ένα σφάλμα στο Collect και θα εμφανίσει ένα προσαρμοσμένο μήνυμα σφάλματος:

IfError( Collect( Names, { Name: "duplicate" } ),
         Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) )

Η συνάρτηση Errors επιστρέφει επίσης πληροφορίες σχετικά με σφάλματα του παρελθόντος κατά τις πράξεις χρόνου εκτέλεσης. Μπορεί να είναι χρήσιμο για την εμφάνιση ενός σφάλματος σε μια οθόνη φόρμας χωρίς να χρειάζεται να καταγράψετε το σφάλμα σε μια μεταβλητή κατάστασης.

Αλλαγή σφαλμάτων

Ορισμένες φορές ορισμένα πιθανά σφάλματα είναι αναμενόμενα και μπορείτε να τα αγνοήσετε με ασφάλεια. Εντός του IfError και του App.OnError, εάν εντοπιστεί κάποιο σφάλμα το οποίο θα πρέπει να διαβιβασθεί στο επόμενο υψηλότερο πρόγραμμα χειρισμού, μπορεί να αλλαχθεί με Error( AllErrors ).

Δημιουργία των δικών σας σφαλμάτων

Επίσης, μπορείτε να δημιουργήσετε τα δικά σας σφάλματα με τη συνάρτηση Error.

Εάν δημιουργείτε τα δικά σας σφάλματα, συνιστάται να χρησιμοποιήσετε τιμές πάνω από το 1000 για να αποφύγετε πιθανές διενέξεις με μελλοντικές τιμές σφαλμάτων συστήματος.

Τιμές απαρίθμησης ErrorKind

Απαρίθμηση ErrorKind Τιμή Description
Ανάλυσης 18 Σφάλμα συστήματος. Παρουσιάστηκε πρόβλημα με την ανάλυση προγράμματος μεταγλώττισης.
BadLanguageCode 14 Χρησιμοποιήθηκε μη έγκυρος ή μη αναγνωρισμένος κωδικός γλώσσας.
BadRegex 15 Μη έγκυρη κανονική παράσταση. Ελέγξτε τη σύνταξη που χρησιμοποιείται με τις συναρτήσεις IsMatch, Match ή MatchAll.
Διένεξη 6 Η καρτέλα που ενημερώνεται έχει ήδη αλλάξει στην προέλευση και η διένεξη πρέπει να επιλυθεί. Μια συνήθης λύση είναι η αποθήκευση τυχόν τοπικών αλλαγών, η ανανέωση της καρτέλας και η εκ νέου εφαρμογή των αλλαγών.
Περιορισμός που έχει παραβιαστεί 8 Η καρτέλα δεν περνάει από έλεγχο περιορισμού στο διακομιστή.
Δημιουργία δυνατότητας 3 Ο χρήστης δεν έχει δικαίωμα να δημιουργεί καρτέλες για την προέλευση δεδομένων. Για παράδειγμα, η συνάρτηση Collect καλείται.
DeletePermissions 5 Ο χρήστης δεν έχει δικαίωμα να διαγράφει καρτέλες για την προέλευση δεδομένων. Για παράδειγμα, η συνάρτηση Remove καλείται.
Div0 13 Διαίρεση με το μηδέν.
EditPermissions 4 Ο χρήστης δεν έχει δικαίωμα να δημιουργεί καρτέλες για την προέλευση δεδομένων. Για παράδειγμα, η συνάρτηση Patch καλείται.
GeneratedValue 9 Μια τιμή διαβιβάσθηκε εσφαλμένα στο διακομιστή για ένα πεδίο που υπολογίζεται αυτόματα από το διακομιστή.
InvalidCtionUsage 16 Μη έγκυρη χρήση μιας συνάρτησης. Συχνά ένα ή περισσότερα ορίσματα της συνάρτησης είναι εσφαλμένα ή χρησιμοποιούνται με μη έγκυρο τρόπο.
FileNotFound 17 Ο χώρος αποθήκευσης SaveData δεν μπορούσε να βρεθεί.
Μη επαρκής ποσότητα 21 Δεν υπάρχει αρκετή μνήμη ή χώρος αποθήκευσης στη συσκευή για την πράξη.
Μη έγκυρο αναγνωριστικό 25 Ένα μη έγκυρο όρισμα μεταβιβάστηκε σε μια συνάρτηση.
Εσωτερικός 26 Σφάλμα συστήματος. Παρουσιάστηκε εσωτερικό πρόβλημα με μία από τις συναρτήσεις.
Λείπει το "Δεν υπάρχει" 2 Ένα απαιτούμενο πεδίο μιας καρτέλας λείπει.
Δίκτυο 23 Υπήρχε κάποιο πρόβλημα με τις επικοινωνίες δικτύου.
Κανένα 0 Σφάλμα συστήματος. Δεν υπάρχει σφάλμα.
Δεν ισχύει 27 Δεν υπάρχει διαθέσιμη τιμή. Χρήσιμο για τη διαφοροποίηση μιας κενής τιμής που μπορεί να αντιμετωπιστεί ως μηδέν σε αριθμητικούς υπολογισμούς από κενές τιμές που θα πρέπει να επισημανθούν ως πιθανό πρόβλημα εάν η τιμή χρησιμοποιείται.
Δεν είναιfound 7 Δεν ήταν δυνατή η εύρεση της καρτέλας. Για παράδειγμα, η καρτέλα που θα τροποποιηθεί στη συνάρτηση Patch.
NotSupported 20 Η πράξη δεν υποστηρίζεται από αυτόν τον παίκτη ή τη συσκευή.
Αριθμός 24 Μια αριθμητική συνάρτηση χρησιμοποιήθηκε με ακατάλληλο τρόπο. Για παράδειγμα, Sqrt με -1.
QuoteExceeded 22 Υπέρβαση στόχων πωλήσεων χώρου αποθήκευσης.
ReadOnlyValue 10 Η στήλη είναι μόνο για ανάγνωση και δεν είναι δυνατό να τροποποιηθεί.
Δικαιώματα ανάγνωσης 19 Ο χρήστης δεν έχει δικαίωμα να διαβάζει καρτέλες για την προέλευση δεδομένων.
Συγχρονισμός 1 Αναφέρθηκε ένα σφάλμα από την προέλευση δεδομένων. Ελέγξτε τη στήλη "Μήνυμα" για περισσότερες πληροφορίες.
Άγνωστο 12 Υπήρξε ένα σφάλμα, αλλά ήταν αγνώστου είδους.
Επικύρωση 11 Η καρτέλα δεν περνάει από έλεγχο επικύρωσης.