وصف سير عمل Azure Logic Apps باستخدام Workflow Definition Language

مكتمل

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

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

مصمم سير العمل

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

Diagram showing workflow designer overview.

الآن، دعونا ننظر إلى لغة تعريف سير العمل كما هو مستخدم من قبل قالب JSON.

طريقة عرض التعليمات البرمجية

توضِّح نافذة Code View مستند JSON الذي يصف سير العمل. في نموذج التطبيق، يبدو JSON كما يلي:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Response": {
                "inputs": {
                    "body": "Hello Azure Logic Apps Template!",
                    "statusCode": 200
                },
                "kind": "Http",
                "runAfter": {},
                "type": "Response"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "method": "GET",
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

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

قسم المشغلات

يحتوي القسم المشغلات على وصف نوع المشغّل، وكيف يمكن استدعاؤه. في هذا المثال، يكون المشغل HTTP بسيطًا يتم تشغيله استجابة لطلب HTTP GET.

"triggers": {
    "manual": {
        "inputs": {
            "method": "GET",
            "schema": {}
        },
        "kind": "Http",
        "type": "Request"
    }
}

يجب أن يتضمن المشغل العناصر التالية:

  • اسمًا فريدًا داخل سير العمل. الاسم الافتراضي للمشغّل في المثال السابق هو manual، ولكن يمكن أن يحل محل الاسم الافتراضي معرّف ذو معنى.

  • نوع المشغّل. يشير النوع إلى الحدث الذي يتسبب في تشغيل المشغّل. يتم تشغيل مشغل الطلب استجابة لطلب HTTP. تتضمن أنواع المشغلات الأخرى المتوفرة ما يلي:

    • تكرار لإنشاء مشغل يعمل وفقا لجدول زمني متكرر.

    • HttpWebhook للاستماع إلى الأحداث على نقطة نهاية.

    • ApiConnectionللاستجابة إلى الأحداث المشغّلة بواسطة خدمات Azure الأخرى (على سبيل المثال، رسالة تصل إلى قائمة انتظار الرسائل أو رسالة بريد إلكتروني وهكذا). يتم تعميم نوع مشغل Api الاتصال ion، وتحدد تفاصيل إضافية تشير إلى نوع الخدمة وأي معلومات اتصال مطلوبة.

  • قسم الإدخالات. يحدد هذا القسم البيانات التي تحدد سلوك المشغل. بالنسبة إلى مشغل الطلب، يشير الأسلوب إلى نوع طلب HTTP الذي يتسبب في تشغيل المشغل. بالنسبة إلى مشغل Api الاتصال ion، يحتوي قسم الإدخالات على معلومات حول كيفية الاتصال بالمورد الذي يقوم بتشغيل الحدث (قائمة انتظار الرسائل سلسلة الاتصال، على سبيل المثال). إذا كان المشغل هو مشغل طلب ، يحدد قسم المخطط في تعريف الإدخال المخطط الذي يجب أن تتوافق مع حمولة نص الطلب. لا تحتوي طلبات HTTP GET على نص طلب، لذلك المخطط فارغ في المثال السابق.

يوضِّح المثال التالي تعريف مشغّل Request آخر يبدأ تشغيل سير عمل ويتلقى طلبات HTTP POST. عادةً ما يوفر طلب POST نص الطلب، الذي يحتوي على البيانات التي سيتم ترحيلها. يحتوي نص الطلب في هذا المثال على اسم العميل وعنوانه، الذي يضم الشارع والمدينة.

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "POST",
      "schema": {
         "type": "object",
         "properties": {
            "customerName": {
               "type": "String"
            },
            "customerAddress": { 
               "type": "Object",
               "properties": {
                  "streetAddress": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}

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

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      ...
   }
   "conditions": [
      {
        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], 'New York')"
      }
   ]
}

قسم الإجراءات

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

عنصر الإجراء ‏‏الوصف
ApiConnection إرسال طلب HTTP إلى خدمة معينة. يمكّنك نوع الإجراء هذا من دمج سير عمل تطبيق منطقي مع ميزات Azure مثل ناقل خدمة Azure وAzure Event Grid وغيرهما. يتطلب الإجراء إدخالات تتضمن سلسلة اتصال للوصول إلى الخدمة، وأي معلومات إضافية والمعلمات المطلوبة لاستدعاء الخدمة.
انشاء يجمع بين مدخلات وتعبيرات متعددة في إخراج واحد.
دالة تمكنك من استدعاء وظيفة Azure.
HTTP إرسال طلب HTTP إلى نقطة نهاية HTTP بدلاً من خدمة Azure.
الانضمام يأخذ صفيفًا من عناصر البيانات كإدخال، وينشئ سلسلة تحتوي على هذه العناصر المفصولة بمحدِّد محدَّد.
تحليل يوزع مستند JSON في مجموعة من الرموز المميزة، باستخدام مخطط محدد.
الاستعلام تصفية العناصر في صفيف إدخال، باستخدام شرط محدد.
Response إنشاء استجابة لطلب HTTP.
جدول إنشاء جدول HTML من صفيف كائنات JSON.
انهاء إلغاء سير عمل على الفور.
انتظري إيقاف سير العمل مؤقتًا لفاصل زمني محدد، أو حتى يتم حدوث مهلة.
سير العمل تشغيل سير عمل تطبيق منطقي آخر.
الشرط مجموعة من أنواع الإجراءات (Foreach و If و Switch و Until) التي تمكنك من تنفيذ تدفق برمجي لعنصر التحكم في سير العمل. يمكنك التكرار خلال العناصر الموجودة في مجموعة، واتخاذ القرارات استنادًا إلى قيم معلمات الإدخال وحلقة حتى يتم استيفاء بعض الشروط.
InitializeVariable،
غير قابل للتزايد،
DecrementVariable،
و SetVariable
تعريف المتغيرات وتهيئتها وتعيينها وتعديلها التي يمكنك تمريرها بين عناصر الإجراء في سير العمل.

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

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

"actions": {
    "Response": {
        "inputs": {
            "body": "Hello Azure Logic Apps Template!",
            "statusCode": 200
        },
        "kind": "Http",
        "runAfter": {},
        "type": "Response"
    }
}

يشير قسم runAfter إلى مكان تشغيل الإجراء في تسلسل سير العمل. في المثال السابق، هناك إجراء واحد فقط، لذلك يتم تشغيله دائمًا عند تشغيل المشغل. إذا كان سير العمل يتضمن إجراءات متعددة، يمكنك تحديد اسم وحالة لهذا الإجراء في هذا المقطع. يتم تشغيل الإجراء إذا اكتمل الإجراء runAfter بالحالة المحددة. يبين الرمز التالي مثالاً. يتم تشغيل الإجراء mySecondAction بعد myFirstAction، ولكن فقط إذا انتهى myFirstAction بحالة "Succeeded":

"actions": {
    "mySecondAction": {
        "inputs": {
            ...
        },
        "runAfter": {
            "myFirstAction": [
                "Succeeded"
            ]
        },
        "type": ...
    },
    "myFirstAction": {
        "inputs": {
            ...
        },
        "runAfter": {},
        "type": ...
    }
}

قسم المخرجات

استخدم القسم المخرجات لتحديد البيانات التي يمكن أن يقوم سير العمل بإرجاعها عند اكتمال تشغيله. يمكنك تعقب حالة معينة أو بيانات لكل تشغيل لسير العمل. يمكنك فحص الإخراج من كل عملية تشغيل لسير عمل باستخدام محفوظات تشغيل Azure Logic Apps، المتوفرة في مدخل Azure أو واجهة برمجة تطبيقات REST لـ Workflow.

يبدو تنسيق قسم المخرجات كما يلي:

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}

تعبيرات سير العمل

يمكنك استخدام تعبير سير عمل بدلاً من أي قيمة ثابتة أو متغير أو ثابت. يمكنك أيضًا وضع تعبير في أي مكان في قيمة سلسلة JSON بواسطة بادئة التعبير مع علامة عند (@). على سبيل المثال، يمكنك استخدام دالة @parameters في تعبير لاسترداد قيمة معلمة مسمّاة (يتم وصف المعلمات في القسم التالي).

"customerFullName": "Bill Frost",
"accountName": "@parameters('customerName')"

يوفر Azure Logic Apps دوال مضمَّنة يمكنك استخدامها لإنشاء تعبيرات معقدة:

  • دالات السلسلة: لتسلسل السلاسل أو تقسيمها، وتحويل الأحرف بين الأحرف العلوية والسفلية، والبحث عن سلاسل فرعية.
  • دالات المجموعة: للكشف عما إذا كانت المجموعة تحتوي على عناصر تطابق نمطا معينا، واسترداد العناصر من مجموعة، ودمج المجموعات.
  • دالات المقارنة المنطقية L: للكشف عما إذا كانت المعاملات هي نفسها أو مختلفة أو أكبر عدديا أو أقل رقميا من بعضها البعض.
  • دالات التحويل: لتغيير نوع البيانات أو تنسيقها.
  • دالات الرياضيات: مثل الإضافة والفرع وال div وmul، بالإضافة إلى العديد من الوظائف الأخرى.
  • دالات التاريخ والوقت: لتحليل التواريخ والأوقات ومعالجتها.
  • دالات سير العمل: لاسترداد معلومات حول البيانات التي تم تمريرها إلى إجراء سير عمل. على سبيل المثال، تقوم دالة المعلمة (المعروضة سابقا) بإحضار قيمة معلمة مسماة، وترجع دالة النص الأساسي (المعروضة سابقا) البيانات التي يتم إنشاؤها بواسطة إجراء.
  • وظائف معالجة JSON وXML: لتحليل مستندات JSON وXML ومعالجتها.

يمكنك تعريف المتغيرات في قسم الإدخالات لإجراء InitializeVariable ، ويمكنك معالجة هذه المتغيرات باستخدام التعبيرات. اقرأ قيمة متغير باستخدام دالة المتغيرات . يستخدم المثال التالي إجراء InitializeVariable لإنشاء متغير عدد صحيح يسمى myIntegerVariable وتهيئته إلى 99. يعرض هذا المثال أيضا إجراء Condition مع نوع If . يستخدم الشرط تعبيرا لاختبارقيمة المتغير myIntegerVariable ، وإذا كان يطابق القيمة 100، يستخدم الشرط إجراء HTTP لتنفيذ طلب GET.

"actions": {
    "Condition": {
        "actions": {
            "HTTP": {
                "inputs": {
                    "method": "GET",
                    "uri": "http://dummyurl.com"
                },
                "runAfter": {},
                "type": "Http"
            }
        },
        "expression": {
            "equals": [
                "@variables('myIntegerVariable')",
                100
            ]
        }        ,
        "runAfter": {
            "Initialize": [
                "Succeeded"
            ]
        },
        "type": "If"
    },
    "Initialize": {
        "inputs": {
            "variables": [
                {
                    "name": "myIntegerVariable",
                    "type": "Integer",
                    "value": 99
                }
            ]
        },
        "runAfter": {},
        "type": "InitializeVariable"
    }
}

قسم المعلمات

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

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


    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            ...
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "cityParam": {
                "defaultValue": "New York",
                "type": "String"
            }
        },
        "triggers": {
            "mypostrequest": {
                "conditions": [
                    {
                        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], parameters('cityParam'))"
                    }
                ],
                "inputs": {
                    ...
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

‏‫اختبر معلوماتك

1.

تريد تشغيل سير عمل Azure Logic Apps كل ثلاث دقائق. في أي من الأقسام التالية من تعريف سير العمل يمكنك تعريف هذا السلوك المتكرر؟

2.

في أي قسم من تعريف سير العمل يمكنك إرسال استجابة لطلب HTTP الذي سيقوم بإرجاع نص الرسالة ورمز الحالة وعناوين الرسائل؟

3.

في أي قسم من تعريف سير العمل تحدد قيمة لإرجاعها عند اكتمال سير العمل؟