Συναρτήσεις Error, IfError, IsError, IsBlankOrError

Ισχύει σε: Εφαρμογές καμβά Στήλες τύπων Dataverse Ροές επιφάνειας εργασίας Εφαρμογές βάσει μοντέλου Power Platform CLI

Εντοπίζει σφάλματα και παρέχει μια εναλλακτική τιμή ή εκτελεί μια ενέργεια. Δημιουργήστε ένα προσαρμοσμένο σφάλμα ή διαβιβάστε ένα σφάλμα.

Σημείωμα

IfError

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

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

IfError( 1/x, 0 )

Αυτός ο τύπος επιστρέφει 0 εάν η τιμή του x είναι μηδέν, καθώς το 1/x θα προκαλέσει σφάλμα. Εάν το x δεν είναι μηδέν, τότε επιστρέφεται το 1/x.

Διακοπή περαιτέρω επεξεργασίας

Κατά την αλληλουχία τύπων μαζί σε τύπους συμπεριφοράς, όπως:

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

Η δεύτερη συνάρτηση Patch σε DS2 θα επιχειρηθεί, ακόμα και εάν η Patch σε DS1 αποτύχει. Το πεδίο ενός σφάλματος περιορίζεται σε κάθε τύπο που είναι αλυσωτός.

Χρησιμοποιήστε το IfError για να κάνετε μια ενέργεια και να συνεχίσετε την επεξεργασία του μόνο εάν η ενέργεια ήταν επιτυχής. Εφαρμογή του IfError σε αυτό το παράδειγμα:

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

Εάν το Patch του DS1 έχει κάποιο πρόβλημα, εκτελείται η πρώτη Ειδοποίηση. Δεν γίνεται καμία περαιτέρω επεξεργασία συμπεριλαμβανομένου του δεύτερου Patch του DS2. Εάν η πρώτη Patch επιτύχει, η δεύτερη Patch θα εκτελεστεί.

Εάν παρέχεται, επιστρέφεται το προαιρετικό όρισμα DefaultResult εάν δεν εντοπιστούν σφάλματα. Χωρίς αυτό το όρισμα, επιστρέφεται το τελευταίο όρισμα Value.

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

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

Συμβατότητα τύπου

Το IfErrorθα επιστρέψει την τιμή ενός από τα ορίσματά της. Οι τύποι όλων των τιμών που μπορεί να επιστραφούν από το IfError πρέπει να είναι συμβατοί.

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

Σημείωμα

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

Στο απλό παράδειγμα που περιγράφεται παραπάνω:

IfError( 1/x, 0 )

Οι τύποι 1/x και 0 ήταν συμβατοί ωσάν και οι δύο να ήταν αριθμοί. Εάν δεν είναι, το δεύτερο όρισμα θα αναγκαστεί να αντιστοιχίσει τον τύπο του πρώτου ορίσματος.

Το Excel θα εμφανίσει #DIV/0! όταν προκύπτει διαίρεση με το μηδέν.

Εξετάστε αντίθετα το IfError με τα εξής:

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

Ο τύπος που προαναφέρεται δεν θα λειτουργεί. Η συμβολοσειρά κειμένου "#DIV/0!" θα εξαναγκαστεί στον τύπο του πρώτου ορίσματος σε IfError, δηλαδή σε έναν αριθμό. Το αποτέλεσμα του IfError θα είναι ακόμα ένα σφάλμα, εφόσον δεν είναι δυνατός ο εξαναγκασμός της συμβολοσειράς κειμένου. Ως επιδιόρθωση, μετατρέψτε το πρώτο όρισμα σε μια συμβολοσειρά κειμένου, έτσι ώστε το IfError να επιστρέφει πάντα μια συμβολοσειρά κειμένου:

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

Όπως προαναφέρθηκε, το IfError μπορεί να επιστρέψει ένα σφάλμα εάν το Αντικατάσταση ή DefaultResult είναι σφάλμα.

FirstError / AllErrors

Μέσα στους τύπους αντικατάστασης, οι πληροφορίες σχετικά με τα σφάλματα που εντοπίστηκαν είναι διαθέσιμες μέσω της καρτέλας FirstError και του πίνακα AllErrors. Το AllErrors είναι ένας πίνακας καρτελών πληροφοριών σφάλματος με το FirstError να είναι μια συντόμευση για την πρώτη καρτέλα αυτού του πίνακα. Το FirstError θα επιστρέφει πάντα την ίδια τιμή ως First(AllErrors).

Οι καρτέλες σφαλμάτων περιλαμβάνουν:

Πεδίο Τύπος Description
Είδος Απαρίθμηση ErrorKind (αριθμός) Κατηγορία του σφάλματος.
Μήνυμα Συμβολοσειρά κειμένου Μήνυμα σχετικά με το σφάλμα, κατάλληλο για εμφάνιση στον τελικό χρήστη.
Προέλευση Συμβολοσειρά κειμένου Θέση από την οποία προήλθε το σφάλμα, που χρησιμοποιείται για αναφορά. Για παράδειγμα, για έναν τύπο που είναι συνδεδεμένος σε μια ιδιότητα στοιχείου ελέγχου, θα βρίσκεται στη φόρμα ControlName.PropertyName.
Παρατηρήθηκε Συμβολοσειρά κειμένου Θέση στην οποία εμφανίζεται το σφάλμα στο χρήστη, που χρησιμοποιείται για τη σύνταξη αναφορών. Για παράδειγμα, για έναν τύπο που είναι συνδεδεμένος σε μια ιδιότητα στοιχείου ελέγχου, θα βρίσκεται στη φόρμα ControlName.PropertyName.
Λεπτομέρειες Καρτέλα Λεπτομέρειες σχετικά με το σφάλμα. Προς το παρόν, παρέχονται λεπτομέρειες μόνο για σφάλματα δικτύου. Αυτή η καρτέλα περιλαμβάνει HttpStatusCode, που περιέχει τον κωδικό κατάστασης HTTP και το HttpResponse, που περιέχει το σώμα της απόκρισης από τη σύνδεση ή την υπηρεσία.

Για παράδειγμα, εξετάστε τον ακόλουθο τύπο ως ιδιότητα OnSelect ενός στοιχείου ελέγχου Button:

Set( a, 1/0 )

Και αυτόν τον τύπο στην ιδιότητα OnSelect ενός δεύτερου στοιχείου ελέγχου Button:

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

Ο παραπάνω τύπος παραδείγματος θα εμφανίσει το παρακάτω πλαίσιο μηνύματος όταν τα δύο κουμπιά ενεργοποιηθούν με τη σειρά:

Ενεργοποιημένο στοιχείο ελέγχου Button το οποίο εμφανίζει μια ειδοποίηση από τη συνάρτηση Notify.

Συνήθως, θα υπάρχει μόνο ένα σφάλμα με το οποίο το FirstError μπορεί να λειτουργεί αρκετά. Ωστόσο, υπάρχουν σενάρια όπου είναι δυνατό να επιστραφούν πολλαπλά σφάλματα. Για παράδειγμα, όταν χρησιμοποιείτε έναν τελεστή σύνδεσης σε αλυσίδα τύπων ή τη συνάτηση Concurrent. Ακόμη και σε αυτές τις περιπτώσεις, η αναφορά του FirstError μπορεί να είναι αρκετή για να αποκαλυφθεί ένα πρόβλημα, αντί να υπερφορτωθεί ένας χρήστης με πολλά σφάλματα. Εάν εξακολουθείτε να έχετε μια απαίτηση να εργάζεστε με κάθε σφάλμα ξεχωριστά, μπορείτε να χρησιμοποιήσετε τον πίνακα AllErrors.

IsError

Η συνάρτηση IsError ελέγχει για μια τιμή σφάλματος.

Η τιμή επιστροφής είναι μια δυαδική τιμή true ή false.

Η χρήση της IsError θα αποτρέψει την περαιτέρω επεξεργασία του σφάλματος.

IsBlankOrError

Η συνάρτηση IsBlankOrError ελέγχει είτε για κενή τιμή είτε για τιμή σφάλματος και είναι ισοδύναμη με το Or( IsBlank( X ), IsError( X ) ).

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

Η τιμή επιστροφής είναι μια δυαδική τιμή true ή false.

Η χρήση του IsBlankOrError θα αποτρέψει οποιαδήποτε περαιτέρω επεξεργασία του σφάλματος.

Χρησιμοποιήστε τη συνάρτηση Error για να δημιουργήσετε και να αναφέρετε ένα προσαρμοσμένο σφάλμα. Για παράδειγμα, μπορεί να έχετε λογική να καθορίσετε αν μια δεδομένη τιμή είναι έγκυρη για το περιβάλλον σας ή όχι - κάτι που δεν ελέγχεται αυτόματα για κάποιο πρόβλημα. Μπορείτε να δημιουργήσετε και να επιστρέψετε το δικό σας σφάλμα, με τα στοιχεία Kind και Message, χρησιμοποιώντας την ίδια καρτέλα που περιγράφηκε παραπάνω για τη συνάρτηση IfError.

Στο περιβάλλον του IfError, χρησιμοποιήστε τη συνάρτηση Error για να κάνετε ρίξετε ξανά ή να περάσετε από ένα σφάλμα. Για παράδειγμα, η λογική σας στο IfError μπορεί να αποφασίσει ότι σε ορισμένες περιπτώσεις ένα σφάλμα μπορεί να παραβλεφθεί με ασφάλεια, αλλά σε άλλες περιπτώσεις το σφάλμα είναι σημαντικό για την αποστολή του. Εντός του IfError ή App.OnError, χρησιμοποιήστε το Error(FirstError) για να περάσετε ένα σφάλμα.

Η συνάρτηση Error μπορεί επίσης να περάσει έναν πίνακας σφαλμάτων, όπως θα βρείτε στον πίνακα AllErrors. Χρησιμοποιήστε το Error(AllErrors) για να ρίξετε ξανά όλα τα σφάλματα και όχι μόνο τα πρώτα.

Μια κενή καρτέλα ή ένας κενός πίνακας που μεταβιβάζετε σε Error δεν οδηγεί σε σφάλμα.

Σύνταξη

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – υποχρεωτικό. Καρτέλα πληροφοριών σφάλματος, συμπεριλαμβανομένων των πεδίων Kind, Message και άλλων πεδίων. Το Kind απαιτείται. Το FirstError μπορεί να περάσει απευθείας.
  • ErrorTable – Απαιτείται. Πίνακας καρτελών πληροφοριών σφάλματος. Το AllErrors μπορεί να περάσει απευθείας.

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

  • Value(s) – Υποχρεωτικό. Οι τύποι που θα ελεγχθούν για μια τιμή σφάλματος.
  • Αντικαταστάσεις – απαιτείται. Οι τύποι που θα αξιολογηθούν και οι τιμές που θα επιστραφούν εάν τα ταιριαστά ορίσματα Τιμή επέστρεψαν σφάλμα.
  • DefaultResult - Προαιρετικό. Οι τύποι που πρέπει να αξιολογηθούν εάν ο τύπος δεν εντοπίσει σφάλματα.

IsError( Value )
IsBlankOrError( Τιμή )

  • Value - Υποχρεωτικό. Τύπος για δοκιμή.

Παραδείγματα

Απλή IfError

Τύπος Περιγραφή Αποτέλεσμα
IfError( 1, 2 ) Το πρώτο όρισμα δεν είναι σφάλμα. Η συνάρτηση δεν έχει άλλα σφάλματα για έλεγχο και καμία προεπιλεγμένη τιμή επιστροφής. Η συνάρτηση αποδίδει το όρισμα τελευταία τιμή που έχει αξιολογηθεί. 1
IfError( 1/0, 2 ) Το πρώτο όρισμα επιστρέφει μια τιμή σφάλματος (λόγω της διαίρεσης με το μηδέν). Η συνάρτηση αξιολογεί το δεύτερο όρισμα και το επιστρέφει ως αποτέλεσμα. 2
IfError( 10, 20, 30 ) Το πρώτο όρισμα δεν είναι σφάλμα. Η συνάρτηση δεν έχει άλλα σφάλματα για έλεγχο αλλά έχει προεπιλεγμένη τιμή επιστροφής. Η συνάρτηση επιστρέφει το όρισμα DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Το πρώτο όρισμα 10 δεν αποτελεί σφάλμα, επομένως η συνάρτηση δεν αξιολογεί την αντίστοιχη αντικατάσταση 11 του ορίσματος. Το τρίτο όρισμα 20 επίσης δεν αποτελεί σφάλμα, επομένως η συνάρτηση δεν αξιολογεί την αντίστοιχη αντικατάσταση 21 του ορίσματος. Το πέμπτο όρισμα 300 δεν έχει αντίστοιχη αντικατάσταση και είναι το προεπιλεγμένο αποτέλεσμα. Η συνάρτηση επιστρέφει αυτό το αποτέλεσμα, επειδή ο τύπος δεν περιέχει σφάλματα. 300
IfError( 1/0, Notify( "Παρουσιάστηκε ένα εσωτερικό πρόβλημα" ) ) Το πρώτο όρισμα επιστρέφει μια τιμή σφάλματος (λόγω της διαίρεσης με το μηδέν). Η συνάρτηση αξιολογεί το δεύτερο όρισμα και εμφανίζει ένα μήνυμα στον χρήστη. Η τιμή επιστροφής της συνάρτησης IfError είναι η τιμή επιστροφής της συνάρτησης Notify, με αναγκαστική μετατροπή στον ίδιο τύπο με το πρώτο όρισμα της IfError (αριθμός). 1

Απλή IsError

Τύπος Περιγραφή Αποτέλεσμα
IsError( 1 ) Το όρισμα δεν είναι σφάλμα. ψευδής
IsError( Blank() ) Το όρισμα είναι κενό, αλλά όχι σφάλμα. ψευδής
IsError( 1/0 ) Το όρισμα είναι σφάλμα. αληθές
If( IsError( 1/0 ), Notify( "Παρουσιάστηκε ένα εσωτερικό πρόβλημα" ) ) Το όρισμα σε IsError επιστρέφει μια τιμή σφάλματος (λόγω της διαίρεσης με το μηδέν). Αυτή η συνάρτηση επιστρέφει true, γεγονός που προκαλεί την εμφάνιση ενός μηνύματος If στο χρήστη με τη συνάρτηση Notify. Η τιμή επιστροφής της συνάρτησης If είναι η τιμή επιστροφής της συνάρτησης Notify, με αναγκαστική μετατροπή στον ίδιο τύπο με το πρώτο όρισμα της If (δυαδική τιμή). αληθές

Απλό IsBlankOrError

Τύπος Περιγραφή Αποτέλεσμα
IsBlankOrError( 1 ) Το όρισμα δεν είναι σφάλμα ή κενό. ψευδής
IsBlankOrError( Κενό() ) Το όρισμα είναι κενό. αληθές
IsBlankOrError( 1/0 ) Το όρισμα είναι σφάλμα. αληθές

Απλό σφάλμα

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

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

Στο παράδειγμα αυτό, ορισμένα σφάλματα επιτρέπεται να περνούν ενώ άλλα αποκρύπτοτναι και αντικαθίστανται με μια τιμή. Στην πρώτη περίπτωση, το b θα βρίσκεται σε κατάσταση σφάλματος επειδή η συνάρτηση Value διαθέτει μη έγκυρο όρισμα. Επειδή αυτό είναι απροσδόκητο από τον συντάκτη του τύπου, διαβιβάζεται έτσι ώστε να το δει ο χρήστης. Στη δεύτερη περίπτωση, με τον ίδιο τύπο, το b θα έχει την τιμή 0, με αποτέλεσμα μια διαίρεση με το μηδέν. Σε αυτή την περίπτωση, ο συντάκτης τύπων μπορεί να γνωρίζει ότι αυτό είναι αποδεκτό για αυτήν τη λογική, να αποκρύψει το σφάλμα (δεν εμφανίζεται διαφημιστικό πλαίσιο) και να επιστρέψει -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

Ο πίνακας AllErrors μπορεί να φιλτραριστεί όπως κάθε άλλος πίνακας. Χρησιμοποιείται με τη συνάρτηση Error, τα αναμενόμενα σφάλματα μπορούν να καταργηθούν και τα υπόλοιπα σφάλματα να διατηρηθούν και να αναφερθούν. Για παράδειγμα, εάν γνωρίζαμε ότι αυτή η διαίρεση με το μηδέν δεν επρόκειτο να αποτελέσει πρόβλημα σε ένα συγκεκριμένο περιβάλλον, τα σφάλματα αυτά θα μπορούσαν να φιλτραριστούν, αφήνοντας όλα τα άλλα σφάλματα ανέπαφα με τον παρακάτω τύπο:

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

Βήμα προς βήμα

  1. Προσθέστε ένα στοιχείο ελέγχου Text input και ονομάστε το TextInput1, εάν δεν έχει αυτό το όνομα από προεπιλογή.

  2. Προσθέστε ένα στοιχείο ελέγχου Label και ονομάστε το Label1, εάν δεν έχει αυτό το όνομα από προεπιλογή.

  3. Ορίστε τον τύπο της ιδιότητας Text του στοιχείου ελέγχου Label1 σε:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Στο TextInput1, εισαγάγετε 1234.

    Το Label1 θα εμφανίσει την τιμή 1234 καθώς αυτή είναι μια έγκυρη τιμή εισόδου για τη συνάρτηση Value.

  5. Στο TextInput1, εισαγάγετε ToInfinity.

    Το Label1 θα εμφανίσει την τιμή -1 καθώς αυτή δεν είναι μια έγκυρη τιμή εισόδου για τη συνάρτηση Value. Εάν δεν συνδυαστεί η συνάρτηση Value με τη συνάρτηση IfError, η ετικέτα δεν θα εμφανίσει καμία τιμή, καθώς η τιμή σφάλματος αντιμετωπίζεται ως κενό.

Δείτε επίσης

Αναφορά τύπου για Power Apps