مشاركة عبر


Error، IfError، IsError، IsBlankOrError الدوال

Functions ينطبق على
Error
IfError
IsError
تطبيقات Canvas Copilot Studio Desktop تتدفق أعمدة صيغة Dataverse التطبيقات المستندة إلى النموذج وظائف Power Platform CLI Dataverse Power Pages
IsBlankOrError تعمل تطبيقات Canvas Copilot Studio Desktop على تدفقات التطبيقات المستندة إلى نموذج Power Platform CLI Dataverse لوظائف Power Pages

يمكن استخدام هذه الدوال في اكتشاف الأخطاء وتوفير قيمة بديلة أو اتخاذ اجراء. كما يمكن استخدامها لإنشاء خطأ مخصص أو تمرير خطأ.

إشعار

إذا قام أحد التطبيقات بتعطيل ميزة إدارة الأخطاء على مستوى الصيغة ضمن إعدادات>التحديثات>المستبعدة، فلن تعمل هذه الوظائف بشكل صحيح.

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 حتى في حالة فشل التصحيح لـ 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 الاختيارية هذه في حالة عدم اكتشاف أي أخطاء. من دون هذه الوسيطة، يتم إرجاع وسيطة القيمة الأخيرة.

بناء على المثال الأخير، يمكن التحقق من 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. وهو أمر جيد، نظرا لعدم وجود حالة يتم فيها إرجاع القيمة المرجعة من استدعاءات التصحيح هذه بواسطة 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).

Error تتضمن السجلات ما يلي:

الحقل نوع الوصف
نوع تعددا ErrorKind (رقم) فئة الخطأ.
رسالة السلسلة النصية رسالة حول الخطأ، تناسب العرض إلى المستخدم النهائي.
مصدر السلسلة النصية الموقع الذي تم فيه إنشاء الخطأ، المستخدم لإعداد التقارير. على سبيل المثال، بالنسبة لصيغة مرتبطة بخاصية عنصر تحكم، تكون هذه القيمة في النموذج ControlName.PropertyName.
لاحظ السلسلة النصية الموقع الذي ظهر به الخطأ للمستخدم، يتم استخدامه لإعداد التقارير. على سبيل المثال، بالنسبة لصيغة مرتبطة بخاصية عنصر تحكم، تكون هذه القيمة في النموذج ControlName.PropertyName.
التفاصيل سجل تفاصيل حول الخطأ. حاليا ، يتم توفير التفاصيل فقط لأخطاء الشبكة. يتضمن هذا السجل HttpStatusCode الذي يحتوي على رمز حالة HTTP وHttpResponse، الذي يحتوي على نص الاستجابة من الموصل أو الخدمة.

على سبيل المثال، فكر في استخدام الصيغة التالية كعنصر تحكم Button به خاصية OnSelect:

Set( a, 1/0 )

وهذه الصيغة على الخاصية OnSelect لعنصر تحكم ثانٍ Button:

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

قد يعرض مثال الصيغة أعلاه الشعار التالي عند تنشيط الزرين بالتسلسل:

تم تنشيط عنصر تحكم الزر، حيث يعرض إشعارًا من الدالة Notify.

عادة ، سيكون هناك خطأ واحد فقط يمكن ل FirstError العمل معه بشكل كاف. ومع ذلك، هناك سيناريوهات يمكن فيها إرجاع أخطاء متعددة. على سبيل المثال، عند استخدام عامل تسلسل الصيغة أو الدالة المتزامنة. حتى في هذه المواقف، قد يكون إعداد تقارير في FirstError كافيًا للكشف عن وجود مشكلة بدلاً من تحميل مستخدم بأخطاء متعددة بشكل زائد. إذا كان لا يزال لديك متطلب للعمل مع كل خطأ على حدة، يمكنك استخدام الجدول AllErrors.

IsError

تختبر IsError الدالة قيمة خطأ.

وتكون قيمة الإرجاع هي القيمة المنطقية صواب أو خطأ.

يمنع استخدام IsError أي معالجة إضافية للخطأ.

IsBlankOrError

تختبر IsBlankOrError الدالة قيمة فارغة أو قيمة خطأ وهي مكافئة ل Or( IsBlank( X ), IsError( X ) ).

عند تمكين معالجة الأخطاء للتطبيقات الموجودة، ضع في اعتبارك استبدال IsBlank ب IsBlankOrError للحفاظ على سلوك التطبيق الحالي. قبل إضافة معالجة الأخطاء ، تم استخدام قيمة فارغة لتمثيل كل من القيم الفارغة من قواعد البيانات وقيم الخطأ. Error تفصل المعالجة بين هذين التفسيرين الفارغين مما قد يغير سلوك التطبيقات الموجودة التي تستمر في استخدام IsBlank.

وتكون قيمة الإرجاع هي القيمة المنطقية صواب أو خطأ.

يمنع استخدام IsBlankOrError أي معالجة إضافية للخطأ.

استخدم الدالة Error لإنشاء خطأ مخصص والإبلاغ عن ذلك. على سبيل المثال، قد يكون لديك منطق لتحديد ما إذا كانت هناك قيمة محددة صالحة للسياق أم لا، ل يتم التحقق من شيء ما للتأكد من عدم وجود مشكلة تلقائيًا. يمكنك إنشاء الخطأ الخاص بك وإرجاعه، مع إكمال النوعوالرسالة، باستخدام نفس السجل الموضح أعلاه للدالة IfError .

في سياق IfError، استخدم الدالة Error لإعادة التكرار أو المرور عبر خطأ. على سبيل المثال، قد يقرر المنطق في IfError أنه في بعض الحالات يمكن تجاهل الخطأ بأمان، ولكن في حالات أخرى يكون الخطأ مهما لإرساله. ضمن IfError أو App.OnError، استخدم Error( FirstError ) لتمرير خطأ.

Error يمكن أيضا تمرير الدالة جدول أخطاء، كما يمكن العثور عليه في جدول AllErrors. استخدم Error( AllErrors ) لإعادة تسجيل جميع الأخطاء وليس فقط الأولى.

سجل فارغ أو جدول فارغ تم تمريره إلى Error نتائج دون حدوث خطأ.

بناء الجملة

Error( ErrorRecord )
Error( ErrorTable )

  • سجل الخطأ - مطلوب. Error سجل المعلومات، بما في ذلك النوعوالرسالة والحقول الأخرى. النوع مطلوب. يمكن تمرير الخطأ الأول مباشرة.
  • جدول الخطأ- مطلوب. جدول سجلات معلومات الأخطاء. يمكن تمرير AllErrors مباشرة.

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

  • القيم - مطلوب. الصيغة (الصيغ) المراد اختبارها لقيمة خطأ.
  • البدائل - مطلوب. الصيغ المراد تقييمها والقيم المراد إرجاعها إذا أرجعت وسيطات القيمة خطأ.
  • النتيجة الافتراضية- اختياري. الصيغ المراد تقييمها إذا لم تعثر الصيغة على أي أخطاء.

IsError( قيمة )
IsBlankOrError( قيمة )

  • القيمة - مطلوبة. الصيغة المراد اختبارها.

الأمثلة

بسيط 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، إعلام( "حدثت مشكلة داخلية" ) ) تُرجع الوسيطة الأولى قيمة خطأ (بسبب القسمة على صفر). وتقيم الوظيفة الوسيطة الثانية وتعرض رسالة للمستخدم. القيمة المرجعة ل IfError هي القيمة المرجعة ل Notify، مكرا على نفس نوع الوسيطة الأولى إلى IfError (رقم). 1

بسيط IsError

الصيغة الوصف النتيجة
IsError( 1 ) الوسيطة ليست خطأ. خطأ
IsError( Blank() ) الوسيطة فارغة، لكنها ليست خطأ. خطأ
IsError( 1/0 ) الوسيطة عبارة عن خطأ. صحيح
If( IsError( 1/0 ), Notify( "كانت هناك مشكلة داخلية" ) ) ترجع الوسيطة لإرجاع IsError قيمة خطأ (بسبب القسمة على صفر). تقوم هذه الوظيفة بإرجاع صواب، التي تتسبب في أن تعرض If رسالة للمستخدم باستخدام وظيفة Notify. قيمه إرجاع وظيفة If هي قيمة إرجاع الإشعار المفروضة على نفس نوع الوسيطة الأولى إلى If (قيمة منطقية). صحيح

بسيط IsBlankOrError

الصيغة الوصف النتيجة
IsBlankOrError( 1 ) الوسيطة ليست خطأ أو فارغة. خطأ
IsBlankOrError( Blank() ) الوسيطة فارغة. صحيح
IsBlankOrError( 1/0 ) الوسيطة عبارة عن خطأ. صحيح

بسيط Error

في هذا المثال، يتم التحقق من صحة التواريخ بالنسبة إلى بعضها البعض، مما يؤدي إلى حدوث خطأ في حالة وجود مشكلة.

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

في هذا المثال، يُسمح بتمرير بعض الأخطاء بينما يتم منع أخرى واستخدام قيمة لتحل محلها. في الحالة الأولى ، يكون b في حالة خطأ لأن الدالة Value تحتوي على وسيطة غير صالحة. نظرا لأن هذا غير متوقع من قبل كاتب الصيغة ، يتم تمريره حتى يراه المستخدم. في الحالة الثانية ، بنفس الصيغة ، b له القيمة 0 ، مما يؤدي إلى القسمة على الصفر. في هذه الحالة، قد يعرف كاتب الصيغة أن هذا أمر مقبول لهذا المنطق، ويمنع الخطأ (لا يتم عرض أية شعارات) ثم يرجع -1 بدلاً من 0.

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. قم بتعيين الصيغة لـ Label1 الذي به خاصية Text إلى:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. في TextInput1، أدخل 1234.

    يظهر Label1 القيمة 1234 لأن هذا إدخال صالح لدالة القيمة.

  5. في TextInput1، أدخل ToInfinity.

    يعرض Label1 القيمة -1 لأن هذا ليس إدخالا صالحا لدالة القيمة. بدون التفاف الدالة Value مع IfError، لن تظهر التسمية أي قيمة حيث يتم التعامل مع قيمة الخطأ على أنها فارغة.

راجع أيضًا

مرجع الصيغة ل Power Apps