الدالة Errors

ينطبق على: تطبيقات اللوحة التطبيقات المستندة إلى النموذج

توفير معلومات عن الخطأ للتغييرات السابقة إلى مصدر البيانات.

النظرة العامة

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

الدوال التي تعمل على تعديل البيانات في مصادر البيانات، مثل Patch وCollect وRemove وRemoveIf وUpdate وUpdateIf وSubmitForm تبلغ عن الأخطاء بطريقتين:

  • تُرجع كل واحدة من هذه الدوال قيمة خطأ كنتيجة للعملية. يمكن اكتشاف الأخطاء باستخدام الدالة IsError ويتم استبدالها أو إيقافها باستخدام الدالة IfError وApp.OnError كالمعتاد. راجع التعامل مع الأخطاء لمزيد من المعلومات.
  • بعد العملية، ستقوم الدالة Errors أيضًا بإرجاع الأخطاء الخاصة بالعمليات السابقة. ويمكن أن يفيد هذا الأمر في عرض رسالة الخطأ على شاشة نموذج بدون الحاجة إلى التقاط الخطأ في متغير حالة.

يمكنك تجنب بعض الأخطاء قبل حدوثها باستخدام الدالتين Validate وDataSourceInfo. راجع التعامل مع مصادر البيانات للحصول على مزيد من الاقتراحات حول كيفية التعامل مع الأخطاء وتجنبها.

‏‏الوصف

تقوم وظيفة Errors بإرجاع جدول أخطاء يحتوي على الأعمدة التالية:

  • السجل. السجل في مصدر البيانات الذي به الخطأ. إذا حدث الخطأ أثناء إنشاء سجل، فسيكون هذا العمود فارغًا.
  • عمود. العمود الذي تسبب في الخطأ، إذا كان يمكن إرجاع الخطأ إلى عمود واحد. إذا لم يكن الأمر كذلك، فسيكون هذا فارغًا.
  • الرسالة. وصف الخطأ. يمكن عرض سلسلة الخطأ هذه للمستخدم النهائي. كن على علم أن هذه الرسالة قد يتم إنشاؤها بواسطة مصدر البيانات ويمكن أن تكون طويلة وتحتوي على أسماء الأعمدة الأولية التي قد لا يكون لها أي معنى للمستخدم.
  • خطأ. رمز خطأ يمكن استخدامه في الصيغ للمساعدة في حل الخطأ:
ErrorKind ‏‏الوصف
ErrorKind.Conflict تم إجراء تغيير آخر على نفس السجل، مما أدى إلى تعارض في التغيير. استخدم وظيفة Refresh لإعادة تحميل السجل، وحاول إجراء التغيير مرة أخرى.
ErrorKind.ConstraintViolation تم انتهاك قيد واحد أو أكثر.
ErrorKind.CreatePermission جرت محاولة لإنشاء سجل، وليس لدى المستخدم الحالي إذن لإنشاء السجلات.
ErrorKind.DeletePermission جرت محاولة لحذف سجل، وليس لدى المستخدم الحالي إذن لحذف السجلات.
ErrorKind.EditPermission جرت محاولة لتحرير سجل، وليس لدى المستخدم الحالي إذن لتحرير السجلات.
ErrorKind.GeneratedValue جرت محاولة لتغيير عمود ينشئه مصدر البيانات تلقائيًا.
ErrorKind.MissingRequired قيمة العمود المطلوب مفقودة من السجل.
ErrorKind.None لا يوجد خطأ.
ErrorKind.NotFound جرت محاولة لتحرير سجل أو حذفه، ولكن تعذر العثور على السجل. ربما قام مستخدم آخر بتغيير السجل.
ErrorKind.ReadOnlyValue جرت محاولة لتغيير عمود للقراءة فقط.
ErrorKind.Sync تم الإبلاغ عن خطأ من قِبل مصدر البيانات. تحقق من عمود الرسالة لمزيد من المعلومات.
ErrorKind.Unknown حدث خطأ، ولكن من نوع غير معروف.
ErrorKind.Validation تم اكتشاف مشكلة عامة في التحقق من الصحة، والتي لا تتناسب مع أحد الأنواع الأخرى.

يمكن إرجاع الأخطاء لمصدر البيانات بالكامل، أو لصف محدد فقط عن طريق توفير وسيطة السجل إلى الوظيفة.

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

في حالة عدم وجود أي أخطاء، سيكون الجدول الذي تقوم Errors بإرجاعه فارغًا ويمكن اختبارها باستخدام وظيفة IsEmpty.

بناء الجملة

Errors( DataSource [, Record ] )

  • DataSource – مطلوب. مصدر البيانات الذي تريد إرجاع الأخطاء له.
  • Record – اختياري. سجل محدد تريد إرجاع أخطاء له. إذا لم تحدد هذه الوسيطة، فستُرجع الوظيفة أخطاء لمصدر البيانات بالكامل.

الأمثلة

خطوة بخطوة

بالنسبة إلى هذا المثال، سنتعامل مع مصدر بيانات IceCream:

آيس كريم.

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

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

ولإجراء هذا التغيير في مصدر البيانات، يتم استخدام الدالة Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

حيث يتم تقييم Gallery.Updates إلى { Quantity: 90 }، نظرًا لأنه تم تعديل خاصية Quantity فقط.

لسوء الحظ، قبل إلغاء وظيفة Patch، يقوم شخص آخر بتعديل الكمية لشوكولاتة 80. سيكتشف Power Apps هذا ولن يسمح بحدوث التغيير المتعارض. يمكنك البحث عن هذا الموقف باستخدام الصيغة:

  • IsEmpty( Errors( IceCream, EditRecord ) )

حيث يتم إرجاع خطأ، لأن وظيفة Errors أرجعت الجدول التالي:

السجل العمود رسالة خطأ
{ Flavor: "Chocolate", Quantity: 100 } blank "قام مستخدم آخر بتعديل السجل الذي تحاول تعديله. الرجاء إعادة تحميل السجل والمحاولة مرة أخرى." ErrorKind.Conflict

يمكنك وضع تسمية على النموذج لإظهار هذا الخطأ للمستخدم.

  • لإظهار الخطأ، قم بتعيين خاصية Text الخاصة بالتسمية إلى هذه الصيغة:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

يمكنك أيضًا إضافة الزر إعادة تحميل في النموذج، بحيث يستطيع المستخدم حل التعارض بكفاءة.

  • لإظهار الزر فقط عند حدوث تعارض، قم بتعيين خاصية Visible الخاصة بالزر إلى هذه الصيغة:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • لعكس التغيير الذي حدده المستخدم للزر، قم بتعيين خاصية OnSelect الخاصة به إلى هذه الصيغة:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )