שתף באמצעות


הפונקציות IfError,‏ IsError ו- IsBlankOrError

חל על: יישומי בד ציור Dataverse עמודות נוסחה זרימות שולחן עבודה יישומים מונחי-דגמים Power Pages Power Platform CLI

מזהה שגיאות ומספקת ערך חלופי או נוקטת פעולה. צור שגיאה מותאמת אישית או העבר שגיאה.

הערה

IfError

הפונקציה IfError בודקת ערכים עד שהיא מוצאת שגיאה. אם הפונקציה מגלה שגיאה, הפונקציה מעריכה ומחזירה ערך חלופי מתאים ומפסיקה הערכה נוספת. ניתן לספק ערך ברירת מחדל גם כאשר לא נמצאו שגיאות. המבנה של IfError דומה לזה של הפונקציה If: IfError בודקת אם קיימות שגיאות, בעוד ש- If בודקת אם קיים הערך true.

השתמש ב- 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 יכולה להחזיר שגיאה אם חלופי או תוצאת ברירת מחדל הם שגיאה.

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 ) )

הנוסחה לדוגמה לעיל תציג את הכרזה הבאה כאשר שני הלחצנים יופעלו ברצף:

פקד לחצן מופעל, ומציג הודעה מהפונקציה Notify.

בדרך כלל, תהיה רק שגיאה אחת ו- FirstError יספיק. עם זאת, ישנם תרחישים שעלולים להחזיר שגיאות מרובות. לדוגמה, בעת שימוש באופרטור שרשור הנוסחאות או בפונקציה Concurrent. גם במצבים אלה, הדיווח על FirstError יכול להיות מספיק כדי לחשוף בעיה במקום להעמיס על המשתמש שגיאות מרובו. אם אתה עדיין נדרש לעבוד עם כל שגיאה בנפרד, תוכל להשתמש בטבלה AllErrors.

IsError

הפונקציה IsError בודקת אם קיים ערך שגיאה.

ערך ההחזרה הוא ערך true או false בוליאני.

השימוש ב- IsError ימנע עיבוד נוסף של השגיאה.

IsBlankOrError

הפונקציה IsBlankOrError בודקת ערך ריק או ערך שגיאה והיא שוות ערך ל- Or( IsBlank( X ), IsError( X ) ).

בעת הפיכת טיפול בשגיאות לזמין ביישומים קיימים, שקול להחליף את IsBlank ב- IsBlankOrError כדי לשמור על אופן פעולת היישום הקיים. לפני הוספת הטיפול בשגיאות, נעשה שימוש בערך ריק כדי לייצג ערכי Null ממסדי נתונים וערכי שגיאות. טיפול בשגיאות מפריד בין שני הפירושים האלו של ריק וזה יכול לשנות את אופן הפעולה של יישומים קיימים שממשיכים להשתמש ב- IsBlank.

ערך ההחזרה הוא ערך true או false בוליאני.

השימוש ב- IsBlankOrError ימנע עיבוד עתידי של השגיאה.

השתמש בפונקציה Error כדי ליצור ולדווח על שגיאה מותאמת אישית. לדוגמה, ייתכן שיהיה לך ביטוי לוגי כדי לקבוע אם ערך מסוים תקף עבור ההקשר שלך או לא – בדיקה שלא מתבצעת עבור בעיה באופן אוטומטי. תוכל יכול ליצור ולהחזיר שגיאה משלך, יחד עם סוג והודעה, תוך שימוש ברשומה המתוארת למעלה עבור הפונקציה IfError.

בהקשר של IfError, השתמש בפונקציה Error כדי להציג מחדש או להעביר שגיאה. לדוגמה, הביטוי הלוגי ב- IfError עשוי לקבוע שבמקרים מסוימים ניתן להתעלם בבטחה משגיאה, אך במקרים אחרים חשוב לשלוח את השגיאה. בתוך IfError או App.OnError, השתמש ב- Error( FirstError ) כדי להעביר שגיאה.

ניתן להעביר לפונקציה Error גם טבלת שגיאות, כפי שניתן למצוא בטבלה AllErrors. השתמש ב- Error( AllErrors ) כדי להציג מחדש את כל השגיאות ולא רק את הראשונה.

רשומה ריקה או טבלה ריקה שהועברה אל Error לא גורמת לשגיאה.

תחביר

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – נדרש. רשומת פרטי שגיאה, כולל סוג, הודעה ושדות אחרים. השדה סוג נדרש. ניתן להעביר את ‎FirstError ישירות.
  • ErrorTable – נדרש. טבלה של רשומות פרטי שגיאות. ניתן להעביר את ‎AllErrors ישירות.

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

  • Value(s) – נדרש. נוסחאות לבדיקת ערך שגיאה.
  • Replacement(s) – נדרש. הנוסחאות להערכה וערכים להחזרה אם ארגומנטים תואמים מסוג Value החזירו שגיאה.
  • DefaultResult – אופציונלי. הנוסחאות להערכה אם הנוסחה אינה מוצאת שגיאות.

IsError( Value )
IsBlankOrError( Value )

  • Value – נדרש. נוסחה לבדיקה.

דוגמאות

IfError פשוטה

נוסחה תיאור תוצאה
IfError( 1, 2 ) הארגומנט הראשון אינו שגיאה. לפונקציה אין שגיאות אחרות לבדוק ואין ערך החזרה של ברירת מחדל. הפונקציה מחזירה את ארגומנט Value האחרון שהוערך. 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( "There was an internal problem" ) ) הארגומנט הראשון מחזיר ערך שגיאה (בשל חלוקה באפס). הפונקציה מעריכה את הארגומנט השני ומציגה הודעה למשתמש. ערך ההחזרה של IfError הוא ערך ההחזרה של Notify, שאולץ לאותו סוג כשל הארגומנט הראשון ל- IfError (מספר). 1

IsError פשוטה

נוסחה תיאור תוצאה
IsError( 1 ) הארגומנט אינו שגיאה. שקר
IsError( Blank() )‎ הארגומנט ריק, אך אינו שגיאה. שקר
IsError( 1/0 ) הארגומנט הוא שגיאה. true
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) הארגומנט ל- IsError מחזיר ערך שגיאה (בגלל חלוקה באפס). הפונקציה חוזרת בתור true, שגורם ל- If להציג הודעה למשתמש עם הפונקציה Notify. ערך ההחזרה של If הוא ערך ההחזרה של Notify, שאולץ לאותו סוג כשל הארגומנט הראשון ל- If (בוליאני). true

Simple IsBlankOrError

נוסחה תיאור תוצאה
IsBlankOrError( 1 )‎ הארגומנט אינו שגיאה או ריק. שקר
IsBlankOrError( Blank() )‎ הארגומנט ריק. true
IsBlankOrError( 1/0 )‎ הארגומנט הוא שגיאה. true

שגיאה פשוטה

בדוגמה זו, התאריכים מאומתים יחסית זה לזה, ויוצרים שגיאה אם יש בעיה.

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