إنشاء حلقات تكرر إجراءات سير العمل أو صفائف المعالجة في تطبيقات Azure Logic

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

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

تلميح

إذا كان لديك مشغل يتلقى صفيفا وتريد تشغيل سير عمل لكل عنصر صفيف، فيمكنك فصل هذا الصفيف باستخدام خاصية مشغل SplitOn.

المتطلبات الأساسية

حلقة "Foreach"

تكرر حلقة "Foreach" إجراء واحدا أو أكثر على كل عنصر صفيف وتعمل فقط على المصفوفات. فيما يلي بعض الاعتبارات عند استخدام حلقات "Foreach":

  • يمكن لحلقة "Foreach" معالجة عدد محدود من عناصر الصفيف. لمعرفة هذا الحد، راجع حدود التزامن والتكرار والخصم.

  • بشكل افتراضي ، يتم تشغيل التكرارات في حلقة "Foreach" في نفس الوقت ، أو بالتوازي. يختلف هذا السلوك عن تطبيق Power Automate على كل حلقة حيث يتم تشغيل التكرارات واحدة تلو الأخرى أو بالتسلسل. ومع ذلك ، يمكنك إعداد تكرارات حلقة "Foreach" التسلسلية. على سبيل المثال، إذا كنت تريد إيقاف التكرار التالي مؤقتا في حلقة "Foreach" باستخدام الإجراء تأخير، فستحتاج إلى تعيين الحلقة لتعمل بالتتابع.

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

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

  • تستخدم الإجراءات في حلقة "Foreach"@item() التعبير للإشارة إلى كل عنصر في الصفيف ومعالجته. إذا قمت بتحديد بيانات غير موجودة في صفيف، يفشل سير عمل التطبيق المنطقي.

يرسل تطبيق المنطق النموذجي هذا ملخصا يوميا لموجز RSS لموقع ويب. يستخدم التطبيق حلقة "Foreach" التي ترسل بريدا إلكترونيا لكل عنصر جديد.

  1. أنشئ هذا التطبيق المنطقي النموذجي باستخدام حساب Outlook.com أو حساب عمل أو مؤسسة تعليمية.

  2. بين مشغل RSS وإجراء إرسال البريد الإلكتروني ، أضف حلقة "Foreach".

    1. لإضافة حلقة بين الخطوات، حرك المؤشر فوق السهم بين تلك الخطوات. اختر علامة الجمع (+) التي تظهر، ثم حدد إضافة إجراء.

      Select

    2. ضمن مربع البحث، اختر الكل. في مربع البحث، اكتب "لكل" كعامل تصفية. من قائمة الإجراءات، حدد هذا الإجراء: لكل - التحكم

      Add

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

    Select from dynamic content list

    ملاحظة

    يمكنك تحديد مخرجات الصفيف فقط من الخطوة السابقة.

    يظهر الصفيف المحدد الآن هنا:

    Select array

  4. لتشغيل إجراء على كل عنصر صفيف، اسحب الإجراء إرسال بريد إلكتروني إلى الحلقة.

    قد يبدو تطبيقك المنطقي مثل هذا المثال:

    Add steps to

  5. حفظ تطبيق المنطق الخاص بك. لاختبار تطبيقك المنطقي يدويا، على شريط أدوات المصمم، اختر تشغيل.

تعريف حلقة "Foreach" (JSON)

إذا كنت تعمل في طريقة عرض التعليمات البرمجية لتطبيقك المنطقي Foreach ، فيمكنك تعريف الحلقة في تعريف JSON الخاص بتطبيقك المنطقي بدلا من ذلك، على سبيل المثال:

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "api": {
                     "runtimeUrl": "https://logic-apis-westus.azure-apim.net/apim/office365"
                  },
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {}
   }
}

حلقة "Foreach": متسلسلة

بشكل افتراضي ، يتم تشغيل الدورات في حلقة "Foreach" بالتوازي. لتشغيل كل دورة بالتتابع، قم بتعيين الخيار المتسلسل للحلقة. يجب تشغيل حلقات "Foreach" بالتتابع عندما يكون لديك حلقات أو متغيرات متداخلة داخل الحلقات حيث تتوقع نتائج يمكن التنبؤ بها.

  1. في الزاوية العلوية اليسرى من الحلقة، اختر علامات الحذف (...) >الإعدادات.

    On

  2. ضمن التحكم في التزامن ، قم بتشغيل إعداد التحكم في التزامن إلى تشغيل. حرك شريط تمرير درجة التوازي إلى 1، واختر تم.

    Turn on concurrency control

إذا كنت تعمل مع تعريف JSON الخاص بتطبيقك المنطقي، فيمكنك استخدام Sequential الخيار عن طريق إضافة المعلمة operationOptions ، على سبيل المثال:

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "operationOptions": "Sequential"
   }
}

حلقة "حتى"

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

فيما يلي بعض السيناريوهات الشائعة حيث يمكنك استخدام حلقة "حتى":

  • اتصل بنقطة نهاية حتى تحصل على الاستجابة التي تريدها.

  • إنشاء سجل في قاعدة بيانات. انتظر حتى تتم الموافقة على حقل معين في هذا السجل. مواصلة المعالجة.

بدءا من الساعة 8:00 صباحا كل يوم، يقوم هذا المثال لتطبيق المنطق بزيادة متغير حتى تساوي قيمة المتغير 10. ثم يرسل تطبيق المنطق رسالة بريد إلكتروني تؤكد القيمة الحالية.

ملاحظة

تستخدم هذه الخطوات Office 365 Outlook، ولكن يمكنك استخدام أي موفر بريد إلكتروني تدعمه Logic Apps. تحقق من قائمة الموصلات هنا. إذا كنت تستخدم حساب بريد إلكتروني آخر، فستبقى الخطوات العامة كما هي، ولكن قد تبدو واجهة المستخدم مختلفة قليلا.

  1. قم بإنشاء تطبيق Logic فارغ. في مصمم التطبيقات المنطقية، ضمن مربع البحث، اختر الكل. ابحث عن "التكرار". من قائمة المشغلات، حدد هذا المشغل: التكرار - الجدول الزمني

    Add

  2. حدد وقت تشغيل المشغل عن طريق تعيين الفاصل الزمني والتردد والساعة من اليوم. لتعيين الساعة، اختر إظهار الخيارات المتقدمة.

    Set up recurrence schedule

    الخاصية القيمة
    الفاصل 1
    التكرار ‏‏يوم
    في هذه الساعات ⁧⁩8⁧⁩
  3. ضمن المشغل، اختر خطوة جديدة. ابحث عن "المتغيرات" ، وحدد هذا الإجراء: تهيئة المتغير - المتغيرات

    Add

  4. قم بإعداد المتغير باستخدام هذه القيم:

    Set variable properties

    الخاصية القيمة الوصف
    الاسم الحد اسم المتغير
    النوع عدد صحيح نوع بيانات المتغير
    القيمة 0 القيمة المبدئية للمتغير
  5. ضمن الإجراء تهيئة المتغير ، اختر خطوة جديدة.

  6. ضمن مربع البحث، اختر الكل. ابحث عن "حتى" ، وحدد هذا الإجراء: حتى - التحكم

    Add

  7. قم ببناء حالة خروج الحلقة عن طريق تحديد متغير الحد وعامل التشغيل متساو . أدخل 10 كقيمة المقارنة.

    Build exit condition for stopping loop

  8. داخل الحلقة، اختر إضافة إجراء.

  9. ضمن مربع البحث، اختر الكل. ابحث عن "المتغيرات" ، وحدد هذا الإجراء: متغير الزيادة - المتغيرات

    Add action for incrementing variable

  10. بالنسبة إلى الاسم، حدد متغير الحد . بالنسبة إلى القيمة، أدخل "1".

    Increment

  11. خارج الحلقة وتحتها، اختر خطوة جديدة.

  12. ضمن مربع البحث، اختر الكل. ابحث عن إجراء يرسل بريدا إلكترونيا وأضفه، على سبيل المثال:

    Add action that sends email

  13. سجل الدخول إلى حساب بريدك الإلكتروني إذا طلب منك ذلك.

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

    Set up email properties

    الخاصية القيمة الوصف
    لكي تتمكن من <address@domain البريد الإلكتروني> عنوان البريد الإلكتروني للمستلم. للاختبار، استخدم عنوان البريد الإلكتروني الخاص بك.
    Subject القيمة الحالية ل "الحد" هي الحد حدد موضوع البريد الإلكتروني. على سبيل المثال، تأكد من تضمين متغير الحد .
    النص الأساسي <محتوى البريد الإلكتروني> حدد محتوى رسالة البريد الإلكتروني التي تريد إرسالها. في هذا المثال، أدخل أي نص تريده.
  15. حفظ تطبيق المنطق الخاص بك. لاختبار تطبيقك المنطقي يدويا، على شريط أدوات المصمم، اختر تشغيل.

    بعد بدء تشغيل المنطق، ستتلقى رسالة بريد إلكتروني تحتوي على المحتوى الذي حددته:

    Received email

منع الحلقات التي لا نهاية لها

توقف حلقة "حتى" التنفيذ استنادا إلى هذه الخصائص، لذا تأكد من تعيين قيمها وفقا لذلك:

  • العدد: هذه القيمة هي أكبر عدد من الحلقات التي يتم تشغيلها قبل خروج الحلقة. للاطلاع على الحدود الافتراضية والقصوى لعدد حلقات "حتى" التي يمكن أن يمتلكها تشغيل تطبيق منطقي، راجع حدود التزامن والتكرار والخصم.

  • المهلة: هذه القيمة هي أكبر قدر من الوقت الذي يتم فيه تشغيل الحلقة قبل الخروج ويتم تحديدها بتنسيق ISO 8601. للاطلاع على الحدود الافتراضية والقصوى لقيمة المهلة ، راجع حدود التزامن والتكرار والخصم.

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

لتغيير هذه الحدود، في الإجراء المتكرر، حدد تغيير الحدود.

تعريف "حتى" (JSON)

إذا كنت تعمل في طريقة عرض التعليمات البرمجية لتطبيقك المنطقي، فيمكنك تعريف حلقة في تعريف Until JSON لتطبيق المنطق بدلا من ذلك، على سبيل المثال:

"actions": {
   "Initialize_variable": {
      // Definition for initialize variable action
   },
   "Send_an_email": {
      // Definition for send email action
   },
   "Until": {
      "type": "Until",
      "actions": {
         "Increment_variable": {
            "type": "IncrementVariable",
            "inputs": {
               "name": "Limit",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "expression": "@equals(variables('Limit'), 10)",
      // To prevent endless loops, an "Until" loop 
      // includes these default limits that stop the loop. 
      "limit": { 
         "count": 60,
         "timeout": "PT1H"
      },
      "runAfter": {
         "Initialize_variable": [
            "Succeeded"
         ]
      }
   }
}

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

  • تم تشغيل الحلقة 10 مرات كما هو محدد بواسطة السمة count . الافتراضي هو 60 مرة.

  • تم تشغيل الحلقة لمدة ساعتين كما هو محدد بواسطة السمة timeout بتنسيق ISO 8601. الوقت الافتراضي هو عبارة عن ساعة واحدة.

"actions": {
   "myUntilLoopName": {
      "type": "Until",
      "actions": {
         "Create_new_resource": {
            "type": "Http",
            "inputs": {
               "body": {
                  "resourceId": "@triggerBody()"
               },
               "url": "https://domain.com/provisionResource/create-resource",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

الحصول على الدعم

الخطوات التالية