الانتقال إلى المحتوى الرئيسي
يتيح لك المكرّر التكرار عبر مصفوفة من السجلات وتنفيذ إجراءات على كلٍ منها. وهو ضروري لتدفّقات العمل التي تحتاج إلى معالجة سجلات متعددة أُرجعت بواسطة Search Records أو استُلِمت عبر ربط الويب.

متى تستخدم المكرّر

السيناريومثال
معالجة نتائج البحثإرسال بريد إلكتروني إلى كل شخص تم العثور عليه
التعامل مع مصفوفات ربط الويبإنشاء سجلات لكل عنصر بالتسلسل
التحديثات الدفعيّةتحديث عدة سجلات بقيم محسوبة
إشعاراتتنبيه عدة أشخاص بخصوص حدثٍ ما

فهم المكرّر

يتوقع المكرّر إدخالاً عبارة عن مصفوفة. ثم يقوم بما يلي:
  1. يأخذ أول عنصر من المصفوفة
  2. يشغّل جميع الإجراءات داخل المكرّر باستخدام ذلك العنصر
  3. ينتقل إلى العنصر التالي
  4. يكرّر حتى تتم معالجة جميع العناصر

الإعداد الأساسي

مثال: إرسال بريد إلكتروني للجميع ضمن نتائج البحث

الهدف: العثور على جميع جهات الاتصال في شركة محددة وإرسال بريد إلكتروني مخصص لكلٍ منهم.

الخطوة 1: البحث عن سجلات

  1. أضف إجراء Search Records
  2. الكائن: People
  3. عامل التصفية: Company يساوي “Acme Inc”
  4. يُرجِع هذا مصفوفة من الأشخاص

الخطوة 2: التحقق من وجود نتائج

  1. أضف إجراء Filter
  2. الشرط: {{searchRecords.length}} أكبر من 0
  3. يمنع هذا أخطاء المكرّر عند كون النتائج فارغة

الخطوة 3: إضافة Iterator

  1. أضف إجراء Iterator
  2. مدخل المصفوفة: اختر {{searchRecords}}
  3. هذا ينشئ حلقة تكرار

الخطوة 4: إضافة إجراءات داخل المكرّر

الإجراءات الموضوعة بعد Iterator تُشغَّل لكل عنصر:
  1. أضف إجراء Send Email (داخل المكرّر)
  2. إلى: {{iterator.currentItem.email}}
  3. الموضوع: مرحباً {{iterator.currentItem.firstName}}!
  4. المتن: رسالة مخصّصة باستخدام حقول العنصر الحالي

النتيجة

إذا أعاد Search Records 5 أشخاص، فسيقوم المكرّر بما يلي:
  • يرسل بريداً إلكترونياً إلى الشخص 1
  • يرسل بريداً إلكترونياً إلى الشخص 2
  • … يستمر لكل الأشخاص الخمسة

الوصول إلى بيانات العنصر الحالي

داخل المكرّر، استخدم {{iterator.currentItem}} للوصول إلى السجل الحالي:
المتغيّرالوصف
{{iterator.currentItem}}كائن السجل الحالي بالكامل
{{iterator.currentItem.id}}معرّف السجل
{{iterator.currentItem.email}}حقل البريد الإلكتروني
{{iterator.currentItem.company.name}}اسم الشركة المرتبطة
{{iterator.index}}الموضع الحالي في المصفوفة (بدءاً من 0)

أنماط شائعة

تحديث عدة سجلات

الهدف: وضع علامة “متأخر” على جميع المهام المتأخرة عن موعدها
1. Search Records (المهام، تاريخ الاستحقاق < اليوم، الحالة ≠ مكتمل)
2. عامل تصفية (length > 0)
3. Iterator (searchRecords)
   └── تحديث سجل
       - الكائن: المهام
       - السجل: {{iterator.currentItem.id}}
       - الحالة: متأخر

إنشاء سجلات من مصفوفة

الهدف: يتلقى الويبهوك طلباً يتضمن عدة عناصر، وإنشاء سجل لكل عنصر
1. مشغّل الويبهوك (يتلقى مصفوفة العناصر)
2. عامل تصفية (items.length > 0)
3. Iterator (trigger.body.items)
   └── إنشاء سجل
       - الكائن: عناصر الطلب
       - الاسم: {{iterator.currentItem.name}}
       - الكمية: {{iterator.currentItem.qty}}
       - الطلب المرتبط: {{trigger.body.orderId}}

معالجة مشروطة داخل الحلقة

الهدف: إرسال بريد إلكتروني فقط لجهات الاتصال ذات العناوين الصالحة
1. Search Records (الأشخاص)
2. Iterator (searchRecords)
   └── عامل تصفية (currentItem.email غير فارغ)
       └── إرسال بريد إلكتروني
           - إلى: {{iterator.currentItem.email}}

استكشاف الأخطاء وإصلاحها

”المكرّر يتوقع مصفوفة”

السبب: مرّرت سجلاً مفرداً بدلاً من مصفوفة. الإصلاح: تأكّد من أنك تمرّر ناتج Search Records أو حقلاً من نوع مصفوفة، وليس سجلاً مفرداً.
✅ Correct: {{searchRecords}}
❌ Wrong: {{searchRecords[0]}}

المكرّر لا يعمل

السبب: المصفوفة فارغة. الإصلاح: أضف عامل تصفية قبل Iterator للتحقق من طول المصفوفة:
Filter: {{searchRecords.length}} > 0

الإجراءات تُشغَّل مرات كثيرة جداً

السبب: أعاد Search Records سجلات أكثر مما هو متوقّع. الإصلاح:
  • أضف عوامل تصفية أكثر تحديداً إلى Search Records
  • عيّن حداً في Search Records (بحد أقصى 200)
  • أضف عامل تصفية داخل المكرّر لشروط إضافية

اعتبارات الأداء

  • استخدام الأرصدة: كل دورة تستهلك أرصدة لإجراءاتها
  • الوقت: تستغرق المصفوفات الكبيرة وقتاً أطول للمعالجة
  • القيود: فكّر في تنفيذ العمليات الكبيرة جداً على دفعات
  • قيود المعدّل: قد تصل استدعاءات واجهات برمجة التطبيقات الخارجية إلى حدود المعدّل مع كثرة التكرارات

أفضل الممارسات

  1. تحقق دائماً من طول المصفوفة قبل Iterator لتجنّب الأخطاء
  2. أضف عوامل تصفية داخل الحلقات عندما لا تحتاج جميع العناصر إلى معالجة
  3. أعد تسمية خطوة Iterator لوصف ما تقوم بالتكرار عليه
  4. اختبر باستخدام مصفوفات صغيرة قبل معالجة مجموعات بيانات كبيرة
  5. راقب تشغيلات سير العمل لضمان اكتمال التكرارات كما هو متوقّع

ذات صلة