تشغيل الإجراءات المستندة إلى حالة المجموعة باستخدام النطاقات في Azure Logic Apps

التطبيق على:Azure Logic Apps (Consumption)

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

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

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

Diagram shows the logic app scope flow with examples of

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

تحتاج للبنود التالية لتتمكن من متابعة تلك الأمثلة:

  • اشتراك Azure. إذا لم يكن لديك اشتراك، فيجب التسجيل للحصول على حساب Azure مجاني.

  • حساب بريد إلكتروني من أي موفر بريد إلكتروني مدعوم منLogic Apps. يستعمل هذا المثال Outlook.com. إذا كنت تستخدم موفرا مختلفا، يبقى التدفق العام كما هو، ولكن تختلف واجهة المستخدم الخاصة بك.

  • مفتاح Bing Maps. للحصول على هذا المفتاح، انظر Get a Bing Maps key.

  • المعرفة الأساسية حول تطبيقات المنطق

تصميم نموذج التطبيق المنطق

أولا، قم بإنشاء عينة تطبيق المنطق هذا بحيث يمكنك إضافة نطاق لاحقا:

Create sample logic app

  • مشغل جدول - مشغل التكرار الذي يتحقق من خدمة Bing Maps في فاصل زمني تحدده
  • إجراء Bing Maps - الحصول على المسار الذي يتحقق من الفاصل الزمني بين موقعين
  • إجراء شرط يتحقق ما إن كان والفاصل الزمني يتجاوز وقت السفر المحدد
  • إجراء يرسل إليك عنوان بريدا إلكترونيا بأن بتجاوز وقت السفر الحالي للوقت المحدد

يمكنك حفظ تطبيق المنطق الخاص بك في أي وقت، لذا احفظ عملك في أغلب الأحيان.

  1. سجّل الدخول إلى مدخل Microsoft Azure إن لم تكن قد قمت بذلك بالفعل. إنشاء تطبيق منطق فارغ.

  2. أضف مشغل Schedule - Recurrence مع هذه الإعدادات: الفاصل الزمني = "1" و التكرار = "Minute"

    Set up

    تلميح

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

  3. أضف إجراءBing Maps - Get route.

    1. إن لم يتوفر لديك اتصال Bing Maps، يطلب منك إنشاء اتصال.

      الإعداد قيمة ‏‏الوصف
      اسم الاتصال BingMapsConnection ضع اسمًا لاتصالك.
      مفتاح API <Bing-Maps-key الخاص بك> أدخل مفتاح Bing-Maps الذي تلقيته مسبقا.
    2. قم بإعداد إجراء Get route كما هو موضح في الجدول الموجود أسفل هذه الصورة:

      Set up

      للمزيد من المعلومات حول هذه المعلمات والقيم، اتظر مسار الحساب.

      الإعداد قيمة ‏‏الوصف
      Waypoint 1 <بدء> ادخل أصل مسارك.
      Waypoint 2 <النهاية> ادخل وجهة مسارك.
      تجنب بلا أدخل العناصر التي يجب تجنبها على مسارك الخاص، مثل الطرق السريعة، والحصيلة، وما إلى ذلك. للحصول على القيم المحتملة، انظر حساب مسار.
      تحسين timeWithTraffic حدد معلمة لتحسين مسارك، مثل المسافة، ووقت السفر مع حركة المرور الحالية، وما إلى ذلك. هذا المثال يستخدم هذه القيمة: "timeWithTraffic"
      وحدة المسافة <your-preference> قم بإدخال وحدة المسافة لحساب مسارك. يقوم هذا المثال باستخدام هذه القيمة: «Mile»
      وضع السفر القيادة قم بإدخال وضع السفر لمسارك. يستخدم المثال باستخدام هذه القيمة: «Driving»
      تاريخ النقل والوقت بلا يطبق على وضع النقل فقط.
      النوع لنوع وتاريخ النقل بلا يطبق على وضع النقل فقط.
  4. أضف شرطا يفحص ما إذا كان وقت السفر الحالي مع حركة المرور يتجاوز وقتا محددا. على سبيل المثال، تتبع الخطوات التالية:

    1. إعادة التسمية للشرط بهذا الوصف: في حال كان وقت نسبة استخدام الشبكة أكثر من الوقت المحدد

    2. في العمود الموجود في أقصى اليسار، قم بالنقر داخل المربع Choose a value بحيث تظهر قائمة المحتوى الديناميكي. حدد من هذه القائمة حقل Travel Duration Traffic وهو بالثواني.

      Build condition

    3. في المربع الأوسط، قم بتحديد هذا العامل: is greater than

    4. في العمود الموجود في أقصى اليمين، قم بإدخال قيمة المقارنة هذه وهي بالثواني ومكافئة لـ10 دقائق: 600

      عند الانتهاء ستبدو حالتك مثل هذا المثال:

      Finished condition

  5. في الفرع If true، قم بإضافة إجراء «send email» لموفر البريد الإلكتروني الخاص بك. قم بإعداد هذا الإجراء عن طريق اتباع الخطوات الموجودة ضمن هذه الصورة:

    Add

    1. في الحقل إلى قم بإدخال عنوان بريدك الإلكتروني لأغراض الاختبار.

    2. في حقل الموضوع، أدخل هذا النص:

    Time to leave: Traffic more than 10 minutes

    1. في حقل النص قم بإدخال هذا النص بمسافة لاحقة:

    Travel time:

    بينما يظهر المؤشر في حقل النص تظل قائمة المحتوى الديناميكي مفتوحة بحيث يمكنك تحديد أي معلمات متوفرة في هذه المرحلة.

    1. من قائمة المحتوى المتحركة حدد "Expression".

    2. ابحث عن الدالة div() وقم بتحديدها. ضع مؤشرك داخل أقواس الدالة.

    3. أثناء تواجد مؤشرك داخل أقواس الدالة، اختر Dynamic content بحيث تظهر قائمة المحتوى الديناميكي.

    4. من قسم Get route قم بتحديد حقل Traffic Duration Traffic.

      Select

    5. بعد أن يتحول الحقل إلى تنسيق JSON، أضف فاصلة (,) متبوعة بالرقم 60 بحيث تقوم بتحويل القيمة في Traffic Duration Traffic من ثوان إلى دقائق.

      div(body('Get_route')?['travelDurationTraffic'],60)
      

      يبدو تعبيرك الآن مثل هذا المثال:

      Finish expression

    6. عند الانتهاء، اختر OK.

    1. بعد حل التعبير، قم بإضافة هذا النص بمسافة بادئة: minutes

      الآن يبدو حقل النص مثل هذا المثال:

      Finished

  6. حفظ تطبيق المنطق الخاص بك.

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

إضافة نطاق

  1. في حال لم تكن قد قمت بذلك بالفعل، فافتح تطبيق المنطق الخاص بك في Logic App Designer.

  2. قم بإضافة نطاق في موقع سير العمل الذي تريده. على سبيل المثال، لإضافة نطاق بين الخطوات الموجودة في سير عمل التطبيق المنطقي، تتبع الخطوات التالية:

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

      Add a scope

    2. في مربع البحث، أدخل «scope» كعامل تصفية. قم بتحديد إجراء Scope.

أضف خطوات إلى النطاق

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

    • احصل على مسار
    • في حال كان وقت نسبة استخدام الشبكة أكثر من الوقت المحدد، والذي يتضمن كلا من الفروع الصحيحةوالخاطئة

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

    Scope added

  2. ضمن النطاق، أضف شرطا يفحص حالة النطاق. أعد تسمية الشرط بهذا الوصف: في حال فشل النطاق

    Add condition to check scope status

  3. في الشرط قم بإضافة هذه التعبيرات التي تفحص ما إذا كانت حالة النطاق مساوية لـ «Failed» أو «Aborted».

    1. لإضافة صف آخر، قم باختيار Add.

    2. في كل صف، قم بالنقر داخل المربع الأيسر بحيث تظهر قائمة المحتوى الديناميكي. من قائمة المحتوى المتحركة قم بتحديد Expression. في مربع التحرير قم بإدخال هذا التعبير، ثم اختر OK:

      result('Scope')[0]['status']

      Screenshot that shows the

    3. لكلا الصفين، حدد is equal to كعامل التشغيل.

    4. بالنسبة لقيم المقارنة، بالصف الأول، أدخل Failed. في الصف الثاني، قم بإدخال Aborted.

      عند الانتهاء ستبدو حالتك مثل هذا المثال:

      Add expression that checks the scope's status

      الآن، قم بتعيين runAfterخاصية الشرط بحيث يفحص الشرط حالة النطاق ويشغل الإجراء المطابق الذي تحدده في الخطوات اللاحقة.

    5. في شرط If scope failed اختر زر ellipsis (...)، ثم اختر Configure run after.

      Configure runAfter property

    6. حدد كل حالات النطاق هذه: is successful وhas failed وis skipped وhas timed out

      Select scope statuses

    7. عند الانتهاء، حدد Done. الآن يعرض الشرط أيقونة «معلومات».

  4. في الفرعين If true وIf false أضف الإجراءات التي تريد تنفيذها استنادا إلى كل حالة نطاق، على سبيل المثال، أرسل بريد إلكتروني أو رسالة.

    Add actions to take based on scope status

  5. حفظ تطبيق المنطق الخاص بك.

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

Finished logic app with scope

اختبار عملك

على شريط أدوات المصمم، اختر Run. في حال نجحت كل الإجراءات المحددة في النطاق، فستتلقى رسالة «Scope succeeded». في حال لم تنجح أي إجراءات محددة في النطاق، فستتلقى رسالة «Scope failed».

تعريف JSON

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

"triggers": {
  "Recurrence": {
    "type": "Recurrence",
    "recurrence": {
       "frequency": "Minute",
       "interval": 1
    }
  }
}
"actions": {
  "If_scope_failed": {
    "type": "If",
    "actions": {
      "Scope_failed": {
        "type": "ApiConnection",
        "inputs": {
          "body": {
            "Body": "Scope failed. Scope status: @{result('Scope')[0]['status']}",
            "Subject": "Scope failed",
            "To": "<your-email@domain.com>"
          },
          "host": {
            "connection": {
              "name": "@parameters('$connections')['outlook']['connectionId']"
            }
          },
          "method": "post",
          "path": "/Mail"
        },
        "runAfter": {}
      }
    },
    "else": {
      "actions": {
        "Scope_succeded": {
          "type": "ApiConnection",
          "inputs": {
            "body": {
              "Body": "Scope succeeded. Scope status: @{result('Scope')[0]['status']}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@result('Scope')[0]['status']", 
              "Failed"
            ]
         },
         {
            "equals": [
               "@result('Scope')[0]['status']", 
               "Aborted"
            ]
         } 
      ]
    },
    "runAfter": {
      "Scope": [
        "Failed",
        "Skipped",
        "Succeeded",
        "TimedOut"
      ]
    }
  },
  "Scope": {
    "type": "Scope",
    "actions": {
      "Get_route": {
        "type": "ApiConnection",
        "inputs": {
          "host": {
            "connection": {
              "name": "@parameters('$connections')['bingmaps']['connectionId']"
            }
          },
          "method": "get",
          "path": "/REST/V1/Routes/Driving",
          "queries": {
            "distanceUnit": "Mile",
            "optimize": "timeWithTraffic",
            "travelMode": "Driving",
            "wp.0": "<start>",
            "wp.1": "<end>"
          }
        },
        "runAfter": {}
      },
      "If_traffic_time_is_more_than_specified_time": {
        "type": "If",
        "actions": {
          "Send_mail_when_traffic_exceeds_10_minutes": {
            "type": "ApiConnection",
            "inputs": {
              "body": {
                 "Body": "Travel time:@{div(body('Get_route')?['travelDurationTraffic'],60)} minutes",
                 "Subject": "Time to leave: Traffic more than 10 minutes",
                 "To": "<your-email@domain.com>"
              },
              "host": {
                "connection": {
                   "name": "@parameters('$connections')['outlook']['connectionId']"
                }
              },
              "method": "post",
              "path": "/Mail"
            },
            "runAfter": {}
          }
        },
        "expression": {
          "and" : [
            {
               "greater": [ 
                  "@body('Get_route')?['travelDurationTraffic']", 
                  600
               ]
            }
          ]
        },
        "runAfter": {
          "Get_route": [
            "Succeeded"
          ]
        }
      }
    },
    "runAfter": {}
  }
},

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

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