معالجة الأخطاء وتصميم إعادة المحاولة في Power Automate ── منع «توقّف تدفّق كان يعمل دون أن يلاحظ أحد»
· آخر تحديث: · غو كومورا · Power Automate, معالجة الأخطاء, التدفقات السحابية, إعادة المحاولة, Idempotency, مراقبة التشغيل, أتمتة الأعمال, الاستشارات التقنية
«التدفّق التجميعيّ الذي كان يعمل كلّ صباح، توقّف فعليّاً منذ الأسبوع الماضي»، «تدفّق تسجيل الطلبات يعالج نفس البيانات مرّتين، فحدث تكرار في السجلّ». نتلقّى كثيراً هذا النوع من الاستشارات من شركات بدأت بناء تدفّقات Power Automate وتشغيلها. البناء كان سهلاً، لكن لم يلاحظ أحد التوقّف - هذا هو النمط.
تعمل تدفّقات Power Automate في غضون ساعات قليلة إذا اقتصرنا على المسار الطبيعيّ فقط. لكن الخدمات المتّصلة تتوقّف مؤقّتاً، وتنتهي صلاحيّة المصادقة، وتصل حتماً بيانات غير متوقّعة. التدفّق الذي لم يُصمَّم لـ«ماذا يحدث عند الفشل» يراكم الفشل بصمت، وفي أسوأ الحالات يُعطَّل تلقائيّاً خلال 14 يوماً1. في هذا المقال، نرتّب أنماط تصميم معالجة الأخطاء التي تتحمّل التشغيل الفعليّ، بدءاً من تصنيف فشل التدفّق، مروراً بالمواصفات الدقيقة لإعادة المحاولة القياسيّة، ونمط Try-Catch-Finally باستخدام النطاقات (Scope)، وآليّة الانتباه إلى الفشل، ووصولاً إلى إعادة التنفيذ والـIdempotency. أمّا التمييز بين استخدامات Power Automate ككلّ، ومعالجة الأخطاء في جانب أتمتة الواجهة (تدفّق سطح المكتب)، فمشروحة في «أتمتة الأعمال بواسطة Power Automate ── التمييز بين التدفّق السحابيّ وتدفّق سطح المكتب وتصميم معالجة الأخطاء»، لذا يقتصر هذا المقال على التعمّق في التدفّق السحابيّ.
1. الخلاصة أوّلاً
- نفكِّر في الفشل بتقسيمه إلى أربعة أنواع: «عطل مؤقّت»، و«فشل ناتج عن البيانات»، و«انتهاء صلاحيّة الصلاحيّة/المصادقة»، و«تغيير المواصفات». إعادة المحاولة القياسيّة تحلّ الأوّل فقط، أمّا الثلاثة الباقية فتحتاج آليّة كشف وإصلاح2.
- تعمل سياسة إعادة المحاولة القياسيّة فقط عندما ينتهي الطلب بالمهلة الزمنيّة أو يفشل باستجابة 408 أو 429 أو 5xx. الافتراضيّ هو تراجع أُسّيّ (exponential backoff)، والعدد أقصى مرّتين أو 12 مرّة حسب طبقة الترخيص (ملف الأداء)31.
- الشكل الأساسيّ لمعالجة الأخطاء هو Try-Catch-Finally عبر النطاق (Scope) و«تكوين شرط التنفيذ» (run after). يُختار شرط التنفيذ من أربع حالات: «نجح، فشل، تُخُطِّي، انتهت مهلته»34.
- بعد معالجة الفشل في Catch، سجِّل التنفيذ في النهاية كـ«فشل» عبر إجراء Terminate. إن أُغفِل ذلك، يبدو التنفيذ في السجلّ ناجحاً، ويُطمَس الفشل43.
- رسالة إشعار الفشل الافتراضيّة محدودة بـ«فشل له طريقة إصلاح معروفة» فقط، ومصحوبة بفترة تهدئة 28 يوماً، وهي آليّة بها ثغرات كثيرة إن اعتُمِد عليها كليّاً. اعتبر الإشعار الذاتيّ من كتلة Catch أمراً إلزاميّاً5.
- لا يُعرَض سجلّ التنفيذ إلا لمدّة 28 يوماً افتراضيّاً. تُعطَّل التدفّقات المستمرّة الفشل تلقائيّاً خلال 14 يوماً. «الانتباه إلى التوقّف بعد شهر» ممكن حسب المواصفات61.
- استعداداً لإعادة التنفيذ (إعادة الإرسال) والتشغيل المزدوج، أدرِج منذ البداية تصميماً متكافئاً (idempotent) آمناً حتّى مع التنفيذ المزدوج (علامة معالَج، upsert بدل الإنشاء، شروط المشغِّل)78.
2. كيف يفشل التدفّق ── أربعة تصنيفات للفشل
يسهل ترتيب تصميم معالجة الأخطاء إذا بدأتَ من تصنيف «كيف يفشل». حتّى إرشادات Microsoft تطالب بافتراض أنّ الأتمتة قد تفشل حتماً، مع توقّع صيانة الجهة المتّصلة وتغييرات الواجهة البرمجيّة وتغيير كلمة المرور والأعطال الشبكيّة اللحظيّة.2 عمليّاً، التفكير بهذه التصنيفات الأربعة يحدِّد التعامل مباشرةً.
| التصنيف | مثال نموذجيّ | هل تصلحه إعادة المحاولة؟ | اتّجاه المعالجة |
|---|---|---|---|
| عطل مؤقّت | انقطاع لحظيّ للجهة المتّصلة، صيانة، تقييد (429)، خطأ خادم (5xx) | غالباً يُصلَح | اترك الأمر لإعادة المحاولة القياسيّة (الفصل 3) |
| فشل ناتج عن البيانات | قيمة فارغة أو صيغة غير متوقّعة، معرِّف غير موجود في الجهة المرجعيّة (400/404) | لا يُصلَح | الالتقاط عبر Try-Catch والإشعار (الفصل 4)، التحقّق من جهة الإدخال |
| انتهاء صلاحيّة الصلاحيّة/المصادقة | انتهاء صلاحيّة الاتّصال (Connection)، تغيير كلمة المرور، استقالة الموظّف/تعطيل الحساب | لا يُصلَح | تلزم إعادة المصادقة. الكشف والإشعار (الفصل 5)، تصميم طريقة الاحتفاظ بالاتّصال |
| تغيير المواصفات | تغيير اسم عمود SharePoint، تغيير إصدار الواجهة البرمجيّة للجهة المتّصلة، تغيير عنصر النموذج | لا يُصلَح | يلزم إصلاح التدفّق. إدارة التغيير والإشعار |
من بين هذه، الأكثر إزعاجاً في العمل الفعليّ هو انتهاء صلاحيّة الصلاحيّة/المصادقة. لأنّه لا يفشل فيه إجراء التدفّق فقط، بل يفشل المشغِّل نفسه. من الأمثلة النموذجيّة لفشل المشغِّل بخطأ من النوع 4xx، تُذكَر في استكشاف الأخطاء الرسميّ حالة تغيير كلمة المرور المستخدَمة في الاتّصال (انتهاء الصلاحيّة). عند فشل المشغِّل، لا يبدأ التدفّق أصلاً، فلا يبقى حتّى سطر «فشل» في سجلّ التنفيذ، ما يؤخِّر الانتباه أكثر.9 بما أنّ الاتّصال يرتبط بالمستخدم الفرديّ الذي أنشأه، تحدث حوادث انقطاع جماعيّ عند استقالة الموظّف أو انتقاله. رتّبنا التدابير التنظيميّة لهذا الجانب بالتفصيل في «تدابير مواجهة الارتباط الشخصيّ في Power Automate ── تصميم الملّاك والاتّصالات والتسليم».
نقطة أخرى يجب معرفتها هي أنّ إهمال الفشل يقود إلى إيقاف التدفّق نفسه. تُعطَّل تلقائيّاً خلال 14 يوماً التدفّقات التي يستمرّ فشل المشغِّل أو الإجراء فيها، وكذلك التدفّقات المستمرّ تقييدها تُعطَّل خلال 14 يوماً. كما قد يُعطَّل التدفّق الذي لم يُشغَّل خلال 90 يوماً (إن لم يكن صاحبه مالكاً لترخيص Premium أو ترخيص سعة).1 كما قد يكون التدفّق في حالة «معلَّق (suspended)» بسبب مخالفة سياسة DLP أو الفشل المتكرِّر.10 بعض حالات «التدفّق الذي كان يعمل توقّف» ليست عطلاً، بل ناتجة عن هذه المواصفات نفسها.
3. فهم إعادة المحاولة القياسيّة
تحمل إجراءات Power Automate (المبنيّ على Azure Logic Apps) سياسة إعادة محاولة مدمَجة منذ البداية. معرفة هذه المواصفات بدقّة أوّلاً تتيح لك الحكم على «هل يجب إضافة إعداد إعادة محاولة؟» أو «هل لا تحلّها إعادة المحاولة؟».
ما الذي يُعاد محاولته ومتى؟
تعمل سياسة إعادة المحاولة عندما ينتهي طلب الإجراء (أو المشغِّل) بالمهلة الزمنيّة، أو يفشل باستجابة 408 (انتهاء مهلة الطلب) أو 429 (طلبات زائدة = تقييد) أو 5xx (خطأ خادم).3 السياسة الافتراضيّة هي تراجع أُسّيّ (إعادة المحاولة مع إطالة الفاصل أُسّيّاً)، ويختلف العدد والفاصل الافتراضيّان في Power Automate باختلاف ملف أداء التدفّق (وهو عمليّاً طبقة الترخيص).1
| ملف أداء التدفّق | الترخيص المقابل الرئيسيّ | إعادة المحاولة الافتراضيّة |
|---|---|---|
| منخفض (Low) | خطط Microsoft 365، الخطّة المجّانيّة، إلخ | أقصى مرّتين. يطول الفاصل بمقدار نحو 5 دقائق، وآخر إعادة محاولة بفاصل نحو 10 دقائق |
| متوسّط/عالٍ (Medium / High) | Power Automate Premium، ترخيص Process، إلخ | أقصى 12 مرّة. يبدأ من 7 ثوانٍ ويطول أُسّيّاً، وآخر إعادة محاولة بفاصل نحو ساعة |
بمعنى آخر، حتّى مع تعريف التدفّق نفسه، تختلف «صلابة التحمّل أمام العطل المؤقّت» باختلاف ترخيص صاحبه. لا يؤثِّر ملف الأداء في عدد إعادة المحاولة فقط، بل يؤثِّر أيضاً في الحدّ الأقصى لعدد الطلبات يوميّاً، لذا يمكن الرجوع إلى فكرة طبقة الترخيص في «الحدّ الفاصل بين ترخيص Power Automate والموصِّلات القياسيّة/Premium».
يمكن تغيير سياسة إعادة المحاولة من إعداد الإجراء. الأنواع أربعة: القياسيّ، بلا، فاصل ثابت، فاصل أُسّيّ، ويمكن تحديد العدد والفاصل صراحةً. حدّ الإعداد هو 90 مرّة كأقصى عدد، وأقلّ فاصل 5 ثوانٍ، وأقصى تأخير يوم واحد.31 توصي إرشادات Microsoft للترميز بالفاصل الأُسّيّ بدل الفاصل الثابت للتعافي من العطل المؤقّت، لتجنّب إعاقة تعافي الطرف الآخر بالضغط المتكرّر خلال فترات قصيرة.4
ما تحلّه إعادة المحاولة وما لا تحلّه
| الحالة | هل تحلّها إعادة المحاولة؟ |
|---|---|
| انقطاع لحظيّ/انتهاء مهلة الجهة المتّصلة (408/5xx) | غالباً تُحلّ. يكفي البقاء على الوضع الافتراضيّ |
| تقييد (429) | قد تُحلّ إن طال الفاصل. لكن 429 المستمرّ باستمرار مشكلة تصميميّة (يلزم تقليل عدد الطلبات) |
| بيانات غير صالحة (400)/مورد غير موجود (404) | لا تُحلّ. الخطأ نفسه مهما كرَّرتَ المحاولة |
| خطأ مصادقة (401/403)/انقطاع الاتّصال | لا تُحلّ. تلزم إعادة مصادقة، وهي عمليّة خارج التدفّق |
| فشل تجاريّ (رفض موافقة، نقص مخزون، إلخ) | ليس خطأ HTTP أصلاً، فهو خارج نطاق إعادة المحاولة. يُعالَج عبر تفريع التدفّق |
نقطة يجب الانتباه إليها هي أنّ إعادة المحاولة أيضاً تستهلك عدد الطلبات (طلبات Power Platform). يُحتسَب تنفيذ الإجراء ضمن عدد الطلبات سواء نجح أم فشل، وكذلك طلبات إعادة المحاولة وتقسيم الصفحات (pagination).1 تعديل زيادة العدد استجابةً لـ429 قد يزيد التقييد سوءاً، لذا فكِّر أوّلاً في «هل يمكن تقليل عدد مرّات الاستدعاء نفسها» قبل تكثيف إعادة المحاولة.
4. نمط Try-Catch-Finally ── النطاق (Scope) وتكوين شرط التنفيذ
الفشل الذي لا تحلّه إعادة المحاولة يُلتقَط ويُعالَج داخل التدفّق. لا يملك Power Automate صياغة try-catch، لكن يمكن بناء البنية نفسها بدمج النطاق (Scope) مع «تكوين شرط التنفيذ» (run after). هذا أسلوب موصى به أيضاً في إرشادات Microsoft للترميز.4
الأساس الذي يقوم عليه هذا التكوين هو تكوين شرط التنفيذ. تحمل كلّ إجراء عند اكتمالها إحدى الحالات نجح (Succeeded)، فشل (Failed)، تُخُطِّي (Skipped)، انتهت مهلته (TimedOut)، وتُنفَّذ الإجراءات التالية افتراضيّاً فقط «إن نجح الإجراء السابق». يمكن تغيير هذا الشرط لكلّ إجراء، ما يتيح بناء فرع يُنفَّذ عند «الفشل» أو «انتهاء المهلة».3
عند تطبيق ذلك على النطاق، ينتج Try-Catch-Finally. يحمل النطاق نتيجة كلّ الإجراءات التي يحويها مجمَّعةً كحالة واحدة، لذا فإنّ بنية «إن فشل أيّ مكان داخل نطاق Try، نفِّذ نطاق Catch» أسهل صيانة بشكل ملحوظ من ضبط الشرط على مستوى كلّ إجراء منفرد.34
flowchart TD
Trigger[المشغِّل] --> Try[[نطاق Try<br/>تجميع المعالجة الأساسية هنا]]
Try -- نجاح --> Fin
Try -- فشل / انتهاء المهلة --> Catch[[نطاق Catch<br/>شرط التنفيذ: عند الفشل أو انتهاء المهلة]]
Catch --> Extract[استخراج الإجراء الفاشل وسببه<br/>عبر دالّة result ومعالجة تصفية المصفوفة]
Extract --> Notify[إشعار المسؤول عبر Teams أو البريد الإلكترونيّ<br/>اسم التدفّق، الخطوة الفاشلة، تفاصيل الخطأ، رابط التنفيذ]
Notify --> Fin[[نطاق Finally<br/>شرط التنفيذ: عند النجاح أو الفشل أو التخطّي أو انتهاء المهلة جميعاً]]
Fin --> Cleanup[التنظيف وتحديث عمود الحالة في السجلّ]
Cleanup --> Judge{هل مرّ التنفيذ عبر Catch؟}
Judge -- نعم --> Term[Terminate<br/>الحالة: Failed لإنهاء التنفيذ]
Judge -- لا --> Done([انتهاء طبيعيّ])
نقاط البناء أربع:
- اختر لشرط تنفيذ نطاق Catch كلاً من «عند الفشل» و«عند انتهاء المهلة». أزِل «عند النجاح» الافتراضيّ. فإن اخترتَ الفشل فقط، يفلت انتهاء مهلة إجراءات الانتظار أو التأخير مثل انتظار الموافقة3.
- استخرج داخل Catch محتوى الفشل. تُرجِع دالّة
result('اسم نطاق Try')مصفوفة بنتائج (الحالة والمُدخَلات والمُخرَجات ونصّ الخطأ) الإجراءات مباشرةً تحت النطاق، فإذا ضيَّقتَ عبر «معالجة تصفية المصفوفة» إلى ما تكون حالته Failed أو TimedOut، يمكنك وضع اسم الإجراء الفاشل ونصّ رسالة الخطأ في الإشعار.34 إن ضيّقتَ بـFailed فقط، يصبح ناتج الاستخراج فارغاً عند الدخول إلى Catch عبر انتهاء المهلة، وتسقط من الإشعار الخطوة الفاشلة الأهمّ. مع ذلك، استخرِج معرِّف التنفيذ من دالّةworkflow()وابنِ عنوان URL مباشراً إلى سجلّ التنفيذ، فهذا يجعل التحقيق أسهل بكثير.4 - اختر لشرط تنفيذ نطاق Finally الحالات الأربع جميعها. ضَع هنا التنظيف الذي تريد تنفيذه دائماً سواء نجح أم فشل (حذف الملفّات المؤقّتة، تحديث عمود حالة السجلّ، إلخ).
- أنهِ التنفيذ الفاشل في النهاية عبر إجراء Terminate كـ«فشل». هذه أسهل نقطة يُنسى ضبطها. عندما يكتمل Catch بنجاح، يُعَدّ آخر إجراء في التنفيذ ككلّ ناجحاً، فيُسجَّل في سجلّ التنفيذ كـ«ناجح». بمعنى آخر، إن اكتفيت بالإشعار فقط ثمّ انتهيت، يختفي الفشل من سجلّ التنفيذ، ويفلت من المراقبة والتجميع اللاحق. أنهِ التنفيذ عبر Terminate بضبط الحالة Failed ورسالة الخطأ، ليُسجَّل التنفيذ في السجلّ كفاشل أيضاً.43 لكن لا تضع Terminate مباشرةً في نهاية نطاق Catch. لأنّ Terminate ينهي التنفيذ بأكمله فوراً عند تلك النقطة، فلا يُنفَّذ نطاق Finally التالي، ويُتخطّى التنظيف اللازم بالذات في وقت الخطأ. كما في الرسم، ارفع علامة فشل (متغيِّر) في Catch واكتفِ بالإشعار حتّى ذلك الحدّ، ثمّ بعد اجتياز تنظيف Finally احكم على العلامة، وأنهِ عبر Terminate عند الفشل فقط، بهذا الترتيب.
كذلك، يُعدّ تكوين شرط التنفيذ مكوّناً محوريّاً أيضاً في تفريع انتهاء مهلة تدفّق الموافقة (التذكير والتصعيد). شرحنا طريقة البناء التفصيليّة في «إنشاء تدفّق موافقة في Power Automate ── رقمنة طلبات الموافقة والاستمارات الورقيّة والبريديّة».
5. آليّة الانتباه إلى الفشل ── الإشعار والإظهار المرئيّ
حتّى مع بناء معالجة الأخطاء، لا معنى لها إن لم ينتبه أحد إلى الفشل. صمِّم «آليّة الانتباه» بطبقات متعدّدة، دون الاعتماد على الإشعار الافتراضيّ.
فهم رسالة إشعار الفشل الافتراضيّة بشكل صحيح
يملك Power Automate آليّة لإرسال إشعار بالبريد الإلكترونيّ عند الفشل، لكنّها مليئة بالثغرات إن اعتُمِد عليها دون معرفة مواصفاتها. الإشعار نوعان.5
- تنبيه فشل على مستوى التنفيذ: يُرسَل فور فشل التنفيذ، لكنّه يُرسَل فقط عند تصنيف الفشل كـ«فشل له طريقة إصلاح معروفة» مثل انقطاع الاتّصال أو التقييد أو أخطاء الموصِّل المعروفة. لا يُرسَل عند فشل الإجراءات العامّة. الوجهة هي المالك والملّاك المشاركون (لا يشمل مستخدم التشغيل فقط، ولا يصل إلى المسؤول). علاوة على ذلك، بعد إرسالها مرّة، توجد فترة تهدئة 28 يوماً لنفس التدفّق، لا تصل خلالها تنبيهات إضافيّة عن حالات فشل أخرى. تنبيهات مستوى التنفيذ ليست مُفعَّلة افتراضيّاً في كلّ التدفّقات أيضاً، وتحتاج إلى التحقّق في إعداد التدفّق.5
- ملخّص فشل أسبوعيّ: يُرسَل مرّة أسبوعيّاً ملخّص للفشل عبر البيئات. يشمل هذا أيضاً حالات الفشل العامّة التي لا تُرسَل عنها تنبيهات مستوى التنفيذ.5
إضافةً إلى ذلك، تُرسَل بالنسبة لأخطاء معيّنة رسالة «تلميحات الإصلاح» المصحوبة بخطوات الإصلاح إلى المالك (يمكن تعطيلها لكلّ تدفّق).7 خلاصة القول، الإشعار الافتراضيّ آليّة «تنتبه إلى انقطاع الاتّصال الأوّل، لكن الفشل الناتج عن بيانات العمل أو الفشل الثاني فما فوق يسهل إفلاته». في التدفّقات المهمّة، اعتبر الإشعار الذاتيّ من كتلة Catch في الفصل 4 إلزاميّاً.
تصميم الإشعار من Catch ── حالة فشل تدفّق الإشعار نفسه
للإشعار الذاتيّ نقاط تصميم أيضاً.
- لا تجعل الوجهة فرداً. إن كانت الوجهة موظّفاً فرداً، لن تصل إلى أحد عند غيابه أو استقالته. تُوصي الوثائق الرسميّة نفسها بالإرسال إلى صندوق بريد مشترك أو قناة Teams.10
- افصل مسار الإشعار عن المعالجة الأساسيّة. حادثة شائعة هي «انقطع اتّصال Outlook ففشل التدفّق، وبما أنّ إشعار الفشل يستخدم اتّصال Outlook نفسه، تعذّر إرساله أيضاً» - انهيار مزدوج. في الفشل الناتج عن انتهاء صلاحيّة المصادقة، يفشل معه أيضاً إجراء الإشعار الذي يستخدم الاتّصال نفسه. اجعل الإشعار عبر موصِّل واتّصال مختلفَين عن المعالجة الأساسيّة، كمنشور Teams مثلاً، أو افصله إلى تدفّق صغير مخصَّص للإشعار يُستدعى منه، فهذا يقلِّل خطر الانهيار المزدوج. مع ذلك، لا يمكن بناء «إشعار عن الإشعار» بلا نهاية، لذا نضع كخطّ دفاع أخير المراجعة الدوريّة التالية.
- ضَع في الإشعار كلّ المعلومات اللازمة للتحقيق. اسم التدفّق، اسم الإجراء الفاشل، رسالة الخطأ، الرابط المباشر إلى سجلّ التنفيذ. بدون هذا، حتّى مع وصول الإشعار، لا يُعرَف أكثر من «فشل شيء ما»، ويسهل إهماله.4
الإظهار المرئيّ والمراجعة الدوريّة
- مدقِّق التدفّق (Flow checker): يكشف عن أخطاء وتحذيرات تعريف التدفّق قبل الحفظ. اجعل مراجعته مرّة واحدة عادة بعد الانتهاء من البناء.11
- المراجعة الدوريّة لسجلّ التنفيذ: لا يُعرَض سجلّ تنفيذ التدفّق إلا لمدّة 28 يوماً افتراضيّاً.6 يمكن للتدفّقات المضمَّنة في حلّ (Solution) الاحتفاظ ببيانات وصفيّة لسجلّ التنفيذ في Dataverse، لكنّ الاحتفاظ الافتراضيّ هناك أيضاً 28 يوماً، والتمديد إعداد من جهة المسؤول.12 بالنسبة للتدفّقات في الإنتاج الفعليّ، يُنصَح بعمليّة مراجعة أسبوعيّة تقريباً تشمل ليس فقط الفشل، بل أيضاً «التنفيذ في حالة الإلغاء» (قد يكون سببه ضبط التزامن) و«الانخفاض المفاجئ في عدد التنفيذات» (مؤشِّر على عدم عمل المشغِّل).10
- المراقبة المركزيّة للمسؤول: لرؤية كلّ حالات الفشل شاملةً تلك التي لا تُرسَل عنها رسالة تنبيه على مستوى التنفيذ، فإنّ Monitor (المراقبة) في مركز إدارة Power Platform هو الأكثر شمولاً. يمكن التحقّق من عدد حالات الفشل وتفاصيل الخطأ على مستوى التدفّق والبيئة.5
في حالة التدفّقات ذات التنفيذ الدوريّ، تلزم أيضاً مراقبة «هل بدأ التشغيل أصلاً». شرحنا تصميم التنفيذ الدوريّ الذي يشمل تحديد يوم العمل ومعالجة نهاية الشهر في «تدفّقات التنفيذ الدوريّ وتصميم أيّام العمل في Power Automate».
6. إعادة التنفيذ والـIdempotency ── بناء «لا ينهار حتّى مع التنفيذ المزدوج»
المواجهة مع الفشل لا تنتهي بالكشف. تحتاج معاً إلى عمليّة «إعادة تنفيذ الجزء الفاشل»، وتصميم «لا ينهار حتّى مع إعادة التنفيذ».
مواصفات إعادة الإرسال (resubmit)
يمكن إعادة تنفيذ التنفيذ الفاشل من سجلّ التنفيذ عبر إعادة الإرسال (Resubmit). عمليّة تعيد التنفيذ بنفس بيانات المشغِّل، فإن كان السبب عطلاً مؤقّتاً (500/502 مثلاً)، يمكن إعادة الإرسال كما هي، وإن كان السبب خطأً في تعريف التدفّق، يُعاد التنفيذ بالتعريف المُصلَح بعد الإصلاح والحفظ ثمّ إعادة الإرسال.7 من قائمة سجلّ التنفيذ، يمكن إعادة إرسال حتّى 20 تنفيذاً دفعة واحدة، ما يفيد في التعافي عند الفشل الجماعيّ. بالنسبة للتدفّقات ذات المشغِّل اليدويّ (Instant Trigger)، يمكن إعادة إرسال تنفيذاتك الخاصّة في أيّ وقت، لكن إعادة إرسال تنفيذ بدأه مستخدم آخر تتطلّب أن يسمح المسؤول بذلك عبر إعداد المستأجر (tenant).13
المهمّ هنا هو أنّ إعادة الإرسال تعيد تنفيذ التدفّق من البداية. إن أعدتَ إرسال تنفيذ فشل في الخطوة الثامنة من عشر خطوات، تُنفَّذ الخطوات الناجحة من الأولى إلى السابعة مرّة أخرى أيضاً. من هنا تحدث حوادث مثل «كان إرسال البريد قد تمّ، وأُرسِل مرّة أخرى» أو «تكوّن سطران متطابقان في السجلّ».
الـIdempotency ── تصميم آمن حتّى مع التنفيذ المزدوج
لهذا، أدرِج منذ البداية تصميماً متكافئاً (idempotent) تكون نتيجته واحدة مهما نُفِّذ من مرّات بنفس المُدخَل. هذا ليس مفيداً لإعادة الإرسال فقط، بل هو الحصن الرئيسيّ لتصميم الأخطاء أيضاً في مواجهة التشغيل المزدوج للمشغِّل أو التنفيذ المتوازي.
- الاحتفاظ بعلامة معالَج. اجعل للسجلّ مثل قائمة SharePoint عمود «الحالة» (غير معالَج/قيد المعالجة/معالَج)، وتحقّق من الحالة في بداية التدفّق، فإن كانت معالَجة، أنهِ هناك، وحدِّث الحالة عند انتهاء المعالجة. بهذا، لا تصبح معالجة مزدوجة حتّى مع إعادة الإرسال. لكن العلامة لا تعمل إلا إذا حدَّدتَ ترتيب التحديث أيضاً. الآثار الجانبيّة الخارجيّة مثل إرسال البريد أو التسجيل في نظام أساسيّ، حدِّث الحالة إلى «قيد المعالجة» مباشرةً قبل التنفيذ، ثمّ عيِّنها إلى «معالَج» بعد الاكتمال. التنفيذ الذي يفشل بعد الأثر الجانبيّ وقبل تحديث العلامة يبقى في حالة «قيد المعالجة»، وهي حالة لا يُعرَف فيها هل تمّ الأثر الجانبيّ أم لا. إعادة إرسال هذا السطر آليّاً قد تسبِّب إرسالاً مزدوجاً، لذا استبعِد السطور «قيد المعالجة» من الإعادة الآليّة، وأعِد إنسان تعيينها إلى «معالَج» أو «غير معالَج» بعد مطابقة نتيجة الإرسال أو التسجيل الفعليّة. السطور الآمنة لإعادة التنفيذ بثقة هي «غير معالَج» فقط، أي السطور المتوقّفة فيها.
- اجعله «إن وُجد فحدِّث، وإلّا فأنشئ» (upsert) بدل «إنشاء». ابحث عن السطر الموجود عبر مفتاح فريد (رقم الطلب، معرِّف الطلب، إلخ)، وفرِّع بحيث تُحدَّث إن وُجد، وتُنشَأ إن لم توجد. «إنشاء عنصر» غير المشروط يراكم سطوراً مكرَّرة مع كلّ إعادة تنفيذ. بعبارة أخرى، البيانات بلا مفتاح فريد لا يمكن جعلها متكافئة، لذا تحديد عمود المفتاح منذ مرحلة تصميم السجلّ شرط مسبق.
- أوقِف التشغيل غير الضروريّ عبر شروط المشغِّل. التشغيل المتعدِّد، كأن يعيد تدفّق مشغِّل «عند إنشاء عنصر أو تعديله» تشغيل نفسه عبر كتابته الخاصّة، يُوقَف عبر شروط المشغِّل (trigger conditions)، لا عبر التفريع الشرطيّ اللاحق. لا يحدث التنفيذ أصلاً بالنسبة للأحداث التي لا تستوفي شرط المشغِّل، فلا يُستهلَك عدد مرّات التنفيذ ولا عدد الطلبات.8
نقطة حذر واحدة: طريقة «التحقّق ثمّ الكتابة» مثل علامة المعالَج أو upsert فعّالة مع إعادة التنفيذ المتسلسلة كإعادة الإرسال، لكنّها ليست حماية ذرّيّة بمفردها. عند بدء حدثَي مشغِّل مكرَّرَين تقريباً في اللحظة نفسها، قد يقع تعارض يقرأ فيه كلا التنفيذين حالة «غير معالَج»، ثمّ يتقدّم كلاهما في المعالجة. لمنع التكرار بثقة في التدفّقات التي يُحتمَل فيها التشغيل المتوازي، استخدم ضبط التزامن لجعل درجة التوازي 1 وتسلسل المعالجة في البند التالي، أو استخدم إلى جانب ذلك آليّة يمكنها فرض قيد مفتاح فريد على جهة الحفظ (كقيد فريد في قاعدة البيانات)، بحيث يفشل إنشاء التكرار عند لحظة الكتابة نفسها.
ضبط التزامن (concurrency control) والمفاضلة مع الترتيب
إلى جانب التنفيذ المزدوج، تظهر مشكلة «التزامن» و«الترتيب». افتراضيّاً، عندما تحدث أحداث كثيرة مستوفية لشرط المشغِّل في وقت واحد، يعمل التدفّق بالتوازي بأيّ عدد.1 عندما تقرأ وتكتب عدّة تنفيذات السطر نفسه في السجلّ في وقت واحد، قد يحدث تضارب (قراءة قذرة - dirty read) تكتب فوق قيمة قديمة.14
عند تفعيل ضبط التزامن (Concurrency Control) في إعداد المشغِّل، يمكن تحديد عدد التنفيذ المتوازي (درجة التوازي) بين 1 و100. جعل درجة التوازي 1 يجعل التنفيذ واحداً في كلّ مرّة، فيقترب من المعالجة المرتَّبة.114 لكن هذا المفتاح يحمل ملاحظات حذر ثقيلة.
- بمجرّد التفعيل، لا يمكن التراجع. لإعادته إلى التعطيل، لا سبيل سوى حذف المشغِّل وإعادة إنشائه.1 بما أنّ ضبط التزامن لا رجعة فيه، يُوصى بتطبيقه فقط على تدفّقات ذات عدد إجراءات قليل (استخراجها إلى تدفّق فرعيّ عند الحاجة).14
- ينشأ خطر الإفلات. عند تفعيل ضبط التزامن، عدد التنفيذات القادرة على الانتظار محدود بـ«10 + درجة التوازي»، والمشغِّلات التي تصل خلال بلوغ هذا الحدّ تُعاد محاولتها من جهة الموصِّل، لكن إن استمرّ التجاوز طويلاً فقد لا تصل إلى التنفيذ. بالنسبة للتدفّقات التي تريد ضمان وصول كلّ مشغِّل إلى التنفيذ بثقة، تنصّ الوثائق الرسميّة صراحةً على إبقاء ضبط التزامن معطَّلاً.1 إن كان سجلّ التنفيذ مليئاً بحالات الإلغاء، قد يكون هذا الإعداد هو السبب.10
بمعنى آخر، «الحفاظ على الترتيب» و«عدم الإفلات» مفاضلة. تسلسل درجة التوازي 1 فعّال في المعالجة قليلة التدفّق والمهمّة الترتيب (كترقيم السجلّ المتسلسل)، لكن لا يجب استخدامه بلا تروٍّ في المعالجة التي تصلها أحداث كثيرة وقت الذروة. إن لزم الترتيب والشمول الكامل معاً بدقّة، فالأمر يدخل في نطاق ينبغي تصميمه خارج Power Automate كما سيُذكَر في الفصل 8.
7. قائمة تحقّق التصميم قبل الإطلاق الفعليّ
قبل وضع تدفّق جديد في الإنتاج الفعليّ، تحقّق على الأقلّ من النقاط التالية.
| # | بند التحقّق | الفصل ذو الصلة |
|---|---|---|
| 1 | هل تصوَّرتَ ما يحدث في هذا التدفّق لكلّ تصنيف من التصنيفات الأربعة للفشل (عطل مؤقّت/فشل ناتج عن البيانات/انتهاء المصادقة/تغيير المواصفات)؟ | الفصل 2 |
| 2 | هل سياسة إعادة المحاولة الافتراضيّة كافية؟ إن كانت الجهة المتّصلة تُصدِر 429 عادةً، ألا يمكن تقليل عدد الطلبات نفسها؟ | الفصل 3 |
| 3 | هل المعالجة الأساسيّة مجمَّعة داخل نطاق Try؟ هل اخترتَ لشرط تنفيذ Catch كلّاً من «فشل» و«انتهاء المهلة»؟ | الفصل 4 |
| 4 | هل الترتيب هو إنهاء التنفيذ عبر Terminate (الحالة: Failed) وفقاً لعلامة الفشل بعد الانتهاء من تنظيف Finally؟ هل يُطمَس الفشل؟ | الفصل 4 |
| 5 | هل بُني إشعار الفشل ذاتيّاً؟ هل الوجهة صندوق بريد مشترك/قناة Teams؟ هل هو مسار مختلف عن المعالجة الأساسيّة؟ | الفصل 5 |
| 6 | هل يحتوي الإشعار على اسم التدفّق والإجراء الفاشل وتفاصيل الخطأ ورابط التنفيذ؟ | الفصل 5 |
| 7 | هل حُدِّد من سيقوم بالمراجعة الأسبوعيّة لسجلّ التنفيذ (الفشل، الإلغاء، الانخفاض المفاجئ في عدد التنفيذات)؟ | الفصل 5 |
| 8 | هل هو آمن حتّى مع إعادة الإرسال؟ هل هو متكافئ عبر علامة معالَج أو upsert؟ هل يوجد مفتاح فريد؟ | الفصل 6 |
| 9 | هل أُوقِف التشغيل الذاتيّ أو المتعدِّد عبر شروط المشغِّل؟ | الفصل 6 |
| 10 | إن استُخدِم ضبط التزامن، هل فُهِم أنّه لا رجعة فيه، وخطر الإفلات؟ | الفصل 6 |
| 11 | لمن الاتّصال؟ هل حُدِّد ملّاك مشاركون، بحيث يمكن إعادة المصادقة والإصلاح حتّى مع غياب الموظّف المسؤول؟ | الفصل 2 |
| 12 | هل توجد وسيلة للانتباه إذا عُطِّل التدفّق تلقائيّاً (فشل متتالٍ 14 يوماً وغيره)؟ | الفصلان 2 و5 |
قد تظنّ أنّها 12 بنداً كثيرة، لكن أكثر من نصفها بنود يكفي التفكير فيها مرّة واحدة فقط في البداية. بالمقابل، «الإضافة اللاحقة» لتدفّق وُضِع في الإنتاج الفعليّ متجاوزاً هذه البنود، مع خوف لمس شيء يعمل بالفعل، عادةً ما لا تُنفَّذ وتُقابَل بحادثة.
8. إلى أيّ حدّ تُنفَّذ المهمّة عبر Power Automate
عندما تتعمّق في معالجة الأخطاء، تبدأ متطلّبات تتجاوز نطاق تغطية Power Automate بالظهور. نذكر معياراً إرشاديّاً لحدّ الفصل.
| الوضع | القرار |
|---|---|
| عمل يكفيه إشعار عند الفشل، ثمّ يتحقّق إنسان ويعيد الإرسال | يكفي Power Automate. تكفي أنماط هذا المقال |
| تحديث عدّة أنظمة تباعاً، وعند فشل في المنتصف يلزم التراجع عن ما تمّ تحديثه (معاملة تعويضيّة) | البناء ضمن التدفّق يميل إلى التعقيد. يلزم تجهيز جهة الواجهة البرمجيّة التي تستقبل المعالجة مجمَّعة، أو نطاق التطوير المتعاقَد عليه |
| مطلوب معاً ضمان الترتيب والقفل الحصريّ وعدم الإفلات إطلاقاً (الترقيم، حجز المخزون، ربط المحاسبة، إلخ) | مع المفاضلات في ضبط التزامن (الفصل 6)، نطاق التطوير الذي يمكن فيه استخدام قائمة انتظار أو معاملات قاعدة البيانات أكثر أماناً |
| مطلوب اختبار آليّ وسجلّ تغيير ومراجعة يشمل سلوك الفشل | اختبار وحدة تعريف التدفّق صعب. انتقل إلى PowerShell أو .NET القابلَين لإدارتهما عبر Git |
| معالجة عشرات الآلاف من السجلّات في كلّ مرّة، مع رغبة في إعادة معالجة السطور الفاشلة فقط | حلقات التدفّق غير مناسبة للبيانات الضخمة. يلزم تصميم معالجة دفعيّة |
بحسب الإحساس العمليّ: «طالما يمكن شرح إجراء التعافي عند الفشل شفهيّاً، فهو نطاق Power Automate، وعندما يتعذَّر شرحه دون رسم مخطّط، فهو نطاق التطوير». الأعمال التي تحتاج بالذات إلى معاملة تعويضيّة (سُجِّل في نظام الشركة A، وفشل في نظام الشركة B، فهل نُلغي A؟) أكثر تعقيداً ممّا يبدو عليه شكل التدفّق، ولا يكفيها Terminate والإشعار. رتّبنا القرار بما يشمل التمييز عن مجدوِل المهام وPowerShell في «التمييز بين استخدام Power Automate وPowerShell ومجدوِل المهام».
9. الخلاصة
«التدفّق الذي كان يعمل، توقّف» ليس سوء حظّ، بل هو تقريباً مشكلة تصميميّة. التدفّق يفشل حتماً. من بين التصنيفات الأربعة للفشل، إعادة المحاولة تتكفَّل بالعطل المؤقّت فقط، أمّا الفشل الناتج عن البيانات وانتهاء المصادقة وتغيير المواصفات، فلا سبيل لالتقاطها سوى بآليّة متعدّدة الطبقات: الالتقاط عبر Try-Catch، والتسجيل عبر Terminate، والإشعار الذاتيّ، والمراجعة الأسبوعيّة لسجلّ التنفيذ. رسالة إشعار الفشل الافتراضيّة آليّة محدودة، مشروطة، ومصحوبة بفترة تهدئة 28 يوماً، والاعتماد عليها في التشغيل يسبِّب حتماً إفلاتاً.
والحصن الرئيسيّ للاستعداد للفشل هو الـIdempotency أكثر من الإشعار. إذا صمَّمتَ الأمر بحيث «لا ينهار حتّى مع التنفيذ المزدوج» عبر علامة معالَج وupsert، لن تخشى بعد الآن إعادة الإرسال ولا التشغيل المكرَّر للمشغِّل، ويكفي التعافي بـ«اختيار الجزء الفاشل وإعادة إرساله». وبالمقابل، الأعمال التي تحتاج معاملة تعويضيّة أو ضمان ترتيب صارم، من الأرخص على المدى الطويل عدم بنائها بالقوّة داخل Power Automate، بل فصلها إلى نطاق التطوير. في اليوم نفسه الذي يبدأ فيه التشغيل، جرِّب مراجعة هذه القائمة مرّة واحدة.
مقالات ذات صلة
- أتمتة الأعمال بواسطة Power Automate ── التمييز بين التدفّق السحابيّ وتدفّق سطح المكتب وتصميم معالجة الأخطاء
- تدفّقات التنفيذ الدوريّ وتصميم أيّام العمل في Power Automate
- إنشاء تدفّق موافقة في Power Automate ── رقمنة طلبات الموافقة والاستمارات الورقيّة والبريديّة
- تدابير مواجهة الارتباط الشخصيّ في Power Automate ── تصميم الملّاك والاتّصالات والتسليم
- التمييز بين استخدام Power Automate وPowerShell ومجدوِل المهام
مجالات الاستشارة ذات الصلة
تتعامل شركة Komura Soft المحدودة مع مراجعة معالجة الأخطاء وتصميم التشغيل لتدفّقات Power Automate، ووصولاً إلى بناء الأنظمة اللازمة لمتطلّبات ضمان الترتيب والمعاملات التي لا تحتويها التدفّقات.
روابط مرجعيّة
-
Microsoft Learn, Limits of automated, scheduled, and instant flows. حول اختلاف سياسة إعادة المحاولة الافتراضيّة باختلاف ملف أداء التدفّق (Low أقصى مرّتين بمقدار نحو 5 دقائق، Medium/High أقصى 12 مرّة من 7 ثوانٍ حتّى نحو ساعة)، وحدّ إعداد إعادة المحاولة (90 مرّة، أقلّ فاصل 5 ثوانٍ، أقصى تأخير يوم)، ومدّة التنفيذ 30 يوماً، وتعطيل التدفّق المستمرّ الفشل/المستمرّ التقييد خلال 14 يوماً، وإمكانيّة تعطيل التدفّق الذي لم يُشغَّل خلال 90 يوماً، وضبط التزامن المعطَّل افتراضيّاً بدرجة توازي 1 إلى 100 (الافتراضيّ عند التفعيل 25)، وعدم إمكانيّة التراجع إلا بحذف المشغِّل وإعادة إنشائه، واحتساب عدد التنفيذات المنتظرة بـ«10 + درجة التوازي» واحتمال عدم بلوغ التنفيذ عند التجاوز، واحتساب كلّ الإجراءات الناجحة والفاشلة بما فيها إعادة المحاولة وتقسيم الصفحات ضمن عدد الطلبات. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
-
Microsoft Learn, Reducing risk and planning for error handling. حول افتراض أنّ الأتمتة قد تفشل حتماً، وعوامل فشل استخدام الموصِّل (التوقّف بسبب الصيانة، عيوب البرمجيّات، تغيير إصدار الواجهة البرمجيّة)، وعوامل الفشل المشتركة لكلّ أتمتة (تغيير كلمة المرور، العطل الشبكيّ اللحظيّ)، ووجود سياسة إعادة المحاولة. ↩ ↩2
-
Microsoft Learn, Handle workflow errors and exceptions in Azure Logic Apps. حول استهداف سياسة إعادة المحاولة استجابات 408 و429 و5xx وانتهاء المهلة، وكون الافتراضيّ سياسة الفاصل الأُسّيّ، وأنواع إعادة المحاولة (قياسيّ/بلا/ثابت/أُسّيّ)، والحالات الأربع لتكوين شرط التنفيذ (run after) (Succeeded/Failed/Skipped/TimedOut)، وتقييم حالة النطاق والتقاط الاستثناء عبر run after، واستخراج الإجراء الفاشل عبر دالّة result() ومعالجة تصفية المصفوفة، وعدم فشل التنفيذ ككلّ إن لم ينتهِ الفرع بالفشل. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
Microsoft Learn, Employ robust error handling. حول نمط Try-Catch عبر النطاق، وفرع الفشل في تكوين شرط التنفيذ، والتوصية بالفاصل الأُسّيّ، وضبط الحالة Failed عبر إجراء Terminate لإنهاء التنفيذ كفاشل، وبناء عنوان URL للتنفيذ عبر دالّة workflow()، والتوصية بتسجيل الخطأ وإشعاره. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Microsoft Learn, Understand flow failure notifications. حول اقتصار تنبيه الفشل على مستوى التنفيذ على «فشل له طريقة إصلاح معروفة» (انقطاع الاتّصال، التقييد، إلخ)، وكون الوجهة المالك والملّاك المشاركين بلا وصولها إلى مستخدم التشغيل والمسؤول، وفترة التهدئة 28 يوماً لنفس التدفّق، وعدم تفعيل تنبيه مستوى التنفيذ افتراضيّاً في كلّ التدفّقات، والملخّص الأسبوعيّ للفشل، وإمكانيّة رؤية كلّ حالات الفشل عبر Monitor في مركز إدارة Power Platform. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Missing runs or triggers history for a flow. حول عدم الاحتفاظ ببيانات سجلّ تنفيذ التدفّق إلا لمدّة 28 يوماً افتراضيّاً، وعدم عرضها في صفحة سجلّ التنفيذ بعد ذلك. ↩ ↩2
-
Microsoft Learn, Troubleshoot a cloud flow. حول إرسال رسالة «تلميحات الإصلاح» (repair tips) إلى المالك وإمكانيّة تعطيلها لكلّ تدفّق، وخطوات تحديد خطوة الفشل من سجلّ التنفيذ لمدّة 28 يوماً، وإعادة الإرسال في الأخطاء المؤقّتة مثل 500/502، وإعادة التنفيذ بالتكوين المُصلَح بعد إصلاح التدفّق وحفظه ثمّ إعادة الإرسال. ↩ ↩2 ↩3
-
Microsoft Learn, Customize your triggers with conditions. حول عدم حدوث التنفيذ أصلاً بالنسبة للأحداث غير المستوفية لشروط المشغِّل، واستهلاك التنفيذ وطلبات الواجهة البرمجيّة في أسلوب الاستبعاد عبر التفريع الشرطيّ اللاحق. ↩ ↩2
-
Microsoft Learn, “There is a problem with the flow’s trigger” error shown in a flow’s run history. حول عدم تنفيذ التدفّق عند فشل المشغِّل نفسه، وكون فشل المشغِّل بأخطاء من نوع 4xx مشكلة ينبغي على المستخدم إصلاحها كتغيير الاتّصال (انتهاء صلاحيّة كلمة المرور، إلخ)، وكون أخطاء 5xx مشكلة نظاميّة مؤقّتة. ↩
-
Microsoft Learn, Fix connection failures in cloud flows. حول حالة تعليق (suspended) التدفّق، والتفريع الشرطيّ لإشعار الفشل باستخدام تكوين شرط التنفيذ، والتوصية بإرسال إشعارات التدفّقات المهمّة إلى صندوق بريد مشترك أو قناة Teams، والمراجعة الأسبوعيّة لسجلّ التنفيذ (الفشل، الإلغاء، الانخفاض المفاجئ في عدد التنفيذات)، واحتمال كون التنفيذ في حالة الإلغاء ناتجاً عن إعداد التزامن. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Tools to test your automation. حول كشف الأخطاء وقت الإنشاء عبر مدقِّق التدفّق، وتلميحات الإصلاح، وإعداد إشعار خطأ مخصَّص باستخدام تكوين شرط التنفيذ. ↩
-
Microsoft Learn, Manage cloud flow run history in Dataverse. حول حفظ سجلّ تنفيذ التدفّقات المضمَّنة في حلّ في جدول FlowRun في Dataverse، وكون فترة الاحتفاظ الافتراضيّة 28 يوماً وإمكانيّة تغييرها من جهة المسؤول. ↩
-
Microsoft Learn, Cancel or resubmit flow runs in bulk. حول إمكانيّة إعادة الإرسال أو الإلغاء لحتّى 20 تنفيذاً دفعة واحدة من سجلّ التنفيذ، وحاجة إعادة إرسال تنفيذ بدأه مستخدم آخر في المشغِّلات الفوريّة إلى تفعيل إعداد المستأجر (Power Automate flow run resubmission). ↩
-
Microsoft Learn, Optimize Power Automate triggers. حول تشغيل المشغِّل افتراضيّاً للتنفيذات المستوفية للشرط بالتوازي، والتضارب الناتج عن القراءة القذرة، وتعطيل ضبط التزامن افتراضيّاً، وفعاليّة درجة التوازي 1 لجعل التنفيذ واحداً في كلّ مرّة للمعالجة المحتاجة إلى الترتيب، وكون ضبط التزامن لا رجعة فيه ويُوصى بتطبيقه على التدفّقات (الفرعيّة) قليلة الإجراءات. ↩ ↩2 ↩3
مقالات ذات صلة
أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.
تصميم تدفّقات التنفيذ الدوريّ في Power Automate ── الممارسة العمليّة لمعالجة نهاية الشهر وتحديد أيّام العمل والتذكيرات
دليل عمليّ لأتمتة المعالجة الدوريّة باستخدام مشغِّل Recurrence في Power Automate. نستعرض فخّ كون المنطقة الزمنيّة الافتراضيّة هي UTC، وصي...
معالجة ملفّات PDF لطلبات الشراء والفواتير الواردة عبر البريد الإلكترونيّ آليّاً بواسطة Power Automate ── تصميم الحفظ والتصنيف والإشعار والقراءة
نستعرض تصميم أتمتة حفظ وتصنيف وإشعارات ملفّات PDF لطلبات الشراء والفواتير الواردة عبر البريد الإلكترونيّ باستخدام Power Automate. نشرح من...
معالجة الأخطاء وتصميم إعادة التنفيذ في PowerShell ── من فخّ عدم نجاعة try/catch إلى قواعد exit code وإعادة المحاولة
نرتّب من منظور عمليّ الفرق بين الأخطاء المُنهِية وغير المُنهِية في PowerShell، والفخّ الذي يجعل try/catch غير فعّال والقاعدة الثابتة لـ -...
أتمتة الترحيل إلى الأنظمة الأساسيّة باستخدام Power Automate for desktop ── استبدال الإدخال اليدويّ من Excel والورق بأتمتة واجهة المستخدم
دليل عمليّ لاستبدال الترحيل اليدويّ إلى الأنظمة الأساسيّة القديمة التي لا تملك API بأتمتة واجهة المستخدم عبر Power Automate for desktop (...
بناء سير موافقات باستخدام Power Automate ── رقمنة مستندات الاعتماد الداخلي والطلبات الورقيّة والبريديّة
دليل عمليّ لرقمنة مستندات الاعتماد الداخلي الورقيّة وملفّات Excel المرفقة بالبريد الإلكتروني عبر Power Automate. نستعرض أنواع إجراءات الم...
الأسئلة الشائعة
أسئلة شائعة حول موضوع هذه المقالة.
- إذا فشل تدفّق Power Automate، هل تصل رسالة إشعار تلقائيّاً؟
- تصل بشكل محدود فقط. آليّة رسالة تنبيه الفشل على مستوى التنفيذ تُرسَل إلى المالك والملّاك المشاركين عندما يُصنَّف الفشل كـ«فشل له طريقة إصلاح معروفة» مثل انقطاع الاتّصال أو التقييد (throttling)، ولا تُرسَل في حالات فشل الإجراءات العامّة. علاوة على ذلك، بعد إرسالها مرّة، توجد فترة تهدئة مدّتها 28 يوماً لنفس التدفّق، لا تصل خلالها تنبيهات إضافيّة. كما أنّ تنبيهات الفشل على مستوى التنفيذ ليست مُفعَّلة افتراضيّاً في كلّ التدفّقات. للتأكّد من الانتباه إلى الفشل، يُنصَح بدمج تصميم يُرسِل إشعاراً ذاتيّاً إلى Teams أو البريد الإلكترونيّ من كتلة Catch.
- كم مرّة، وبأيّ فاصل زمنيّ، تُجرى إعادة المحاولة القياسيّة في Power Automate؟
- عندما يتجاوز طلب الإجراء المهلة الزمنيّة أو يفشل باستجابة من نوع 408 أو 429 أو 5xx، تُعاد المحاولة آليّاً افتراضيّاً مع إطالة الفاصل الزمنيّ أُسّيّاً. يختلف العدد باختلاف ملف أداء التدفّق (وهو عمليّاً طبقة الترخيص)، فأقصى مرّتين في الملفّات المنخفضة كترخيص Microsoft 365، وأقصى 12 مرّة في الملفّات المتوسّطة والعالية كـPower Automate Premium أو ترخيص Process. يمكن تغيير سياسة إعادة المحاولة في إعداد الإجراء إلى «بلا/فاصل ثابت/فاصل أُسّيّ»، ويمكن ضبط العدد حتّى 90 مرّة كحدّ أقصى. الأخطاء الناتجة عن البيانات أو الإعدادات مثل 400 أو 404 ليست هدفاً لإعادة المحاولة.
- كيف يمكن إعادة تنفيذ (إعادة إرسال) تنفيذ تدفّق فشل؟
- افتح التنفيذ الفاشل من سجلّ التنفيذ، واختر «إعادة الإرسال» لإعادة التنفيذ بنفس بيانات المشغِّل. إذا كان السبب خطأً في تعريف التدفّق، فإصلاح التدفّق وحفظه ثمّ إعادة الإرسال يعيد التنفيذ بالمحتوى المُصلَح. من قائمة سجلّ التنفيذ، يمكن إعادة إرسال حتّى 20 تنفيذاً دفعة واحدة. نقطة الحذر هي أنّ إعادة الإرسال تعيد تنفيذ التدفّق من البداية، لذا في التنفيذ الذي نجح جزئيّاً حتّى منتصف الطريق، تُنفَّذ المعالجة الناجحة مرّة أخرى. يلزم تصميم متكافئ (idempotent) لا ينهار حتّى مع التنفيذ المزدوج (علامة معالَج، والكتابة بالتحديث لا بالإنشاء).
- هل يمكن أن يُعطَّل التدفّق دون علم صاحبه؟
- نعم يمكن ذلك. تُعطَّل تلقائيّاً خلال 14 يوماً التدفّقات التي يستمرّ فشل المشغِّل أو الإجراء فيها. كما تُعطَّل خلال 14 يوماً أيضاً التدفّقات التي يستمرّ فيها التقييد (تجاوز الحدّ). كذلك قد يُعطَّل التدفّق الذي لم يُشغَّل ولو مرّة خلال 90 يوماً، إن لم يكن صاحبه يملك ترخيص Premium أو ترخيص سعة. بما أنّ إهمال الفشل يقود مباشرةً إلى توقّف التدفّق، من المهمّ دمج آليّة للانتباه إلى الفشل والمراجعة الدوريّة لسجلّ التنفيذ (28 يوماً افتراضيّاً) في التشغيل.
الملف الشخصي للمؤلف
صفحة الملف الشخصي لمؤلف المقالة.
غو كومورا
مؤسّس شركة كومورا سوفت ذ.م.م.
يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.
روابط عامة