وصف سير عمل Logic App باستخدام لغة تعريف سير العمل
يمكنك تحديد بنية وسير عمل Logic App باستخدام مستند JSON. يحتوي هذا المستند على وصف JSON للعناصر التي تشكل Logic App ويتم التحقق من صحتها من قبل مخطط لغة تعريف سير العمل. أسهل طريقة لشرح المخطط هي فحص Logic App القائم الذي تم إنشاؤه باستخدام Logic Apps Designer في مدخل Microsoft Azure، ومن ثم عرض وصف JSON من هذا التطبيق.
في نموذج السيناريو، تريد تزويد المستشارين الخاصين بك مع سير العمل المشترك، والذي يمكن أن يتكيف مع الاحتياجات المحددة للجامعات التي يعملون معها. إذا كنت تريد أن تجعل من السهل تخصيص ونشر كل سير عمل، فعليك أن تقرر إلقاء نظرة على التعليمات البرمجية التي تقف خلف سير العمل، أي تعريف سير العمل JSON.
Logic Apps Designer
Logic Apps Designer يمكنك من إنشاء وتتبع أخطاء سير عمل Logic App رسوميًا. كما يتيح Logic Apps Designer للمطورين البحث ضمن سير العمل لمعرفة كيفية تنفيذه. تظهر الصورة التالية مثالاً على Logic App بسيط. يتم تشغيل سير العمل عن طريق إرسال طلب HTTP GET إلى محدِّد موقع معلومات محدَّد. يتم إرجاع النتيجة في استجابة HTTP. في هذا المثال، يقوم سير العمل بإرسال رسالة نموذج تطبيقات Hello Logic بسيطة.

دعونا ننظر الآن إلى لغة تعريف سير العمل كما يستخدمها قالب JSON.
طريقة عرض التعليمات البرمجية
نافذة عرض التعليمات البرمجية في Logic Apps Designer يعرض مستند JSON الذي يصف سير العمل. في التطبيق نموذج، رمز يبدو مثل هذا:
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Response": {
"inputs": {
"body": "Hello 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 التي تتعلق بالإجراءات والمشغلات الموضحة فيLogic Apps Designer. يمكنك تحرير التعليمة البرمجية JSON في هذا المستند لتعكس أي تغييرات مطلوبة في وظيفة Logic App. يمكنك أيضًا إضافة إجراءات أخرى، وتحديد كيفية تشغيل المنطق في سير العمل من إجراء إلى آخر.
قسم المشغلات
يحتوي القسم المشغلات على وصف نوع المشغّل، وكيف يمكن استدعاؤه. في هذا المثال، يكون المشغل HTTP بسيطًا يتم تشغيله استجابة لطلب HTTP GET.
"triggers": {
"manual": {
"inputs": {
"method": "GET",
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
يجب أن يتضمن المشغل العناصر التالية:
- اسمًا فريدًا داخل سير العمل. في المثال السابق، يتم تسمية المشغل يدويًا، ولكن يمكنك استبدال هذا الأمر بمعرّف ذي معنى أكبر.
- نوع المشغّل. يشير النوع إلى الحدث الذي يتسبب في تشغيل المشغّل. يتم تشغيل مشغل طلب استجابة لطلب HTTP. تتضمن أنواع المشغلات الأخرى المتوفرة ما يلي:
- تكرارًا لإنشاء مشغل يتم تشغيله وفقًا لجدول متكرر.
- HttpWebhook للاستماع إلى الأحداث على نقطة نهاية.
- ApiConnection للاستجابة إلى الأحداث التي تم تشغيلها بواسطة خدمات Azure أخرى (على سبيل المثال، رسالة تصل إلى قائمة انتظار رسائل ورسالة بريد إلكتروني وهكذا). يتم تعميم نوع مشغل ApiConnection، وتحديد تفاصيل إضافية تشير إلى نوع الخدمة، وأي معلومات اتصال مطلوبة.
- قسم المدخلات. يحدد هذا القسم البيانات التي تحدد سلوك المشغل. بالنسبة إلى مشغل طلب، يشير الأسلوب إلى نوع طلب HTTP الذي يتسبب في تشغيل المشغّل. بالنسبة إلى مشغل ApiConnection، يحتوي القسم الإدخالات على معلومات حول كيفية الاتصال بالمورد الذي يشغّل الحدث (سلسلة اتصال قائمة انتظار رسائل، على سبيل المثال). إذا كان المشغل مشغل طلب، يحدد قسم المخطط لتعريف الإدخال المخطط الذي يجب أن يتوافق مع حمولة نص الطلب. لا تحتوي طلبات HTTP GET على نص طلب، لذا يكون المخطط فارغًا في المثال السابق.
يظهر المثال التالي تعريف مشغل طلب آخر من أجل Logic App الذي يتلقى طلبات 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 إلى خدمة Microsoft. يمكّنك نوع الإجراء هذا من دمج Logic App مع ميزات Azure مثل ناقل خدمة Azure وشبكة أحداث Azure وغيرها. يتطلب الإجراء إدخالات تتضمن سلسلة اتصال للوصول إلى الخدمة، وأي معلومات إضافية والمعلمات المطلوبة لاستدعاء الخدمة. |
| إنشاء | يجمع بين مدخلات وتعبيرات متعددة في إخراج واحد. |
| الوظيفة | تمكنك من استدعاء وظيفة Azure. |
| HTTP | إرسال طلب HTTP إلى نقطة نهاية HTTP (مقابل خدمة Azure). |
| انضمام | يأخذ صفيفًا من عناصر البيانات كإدخال، وينشئ سلسلة تحتوي على هذه العناصر المفصولة بمحدِّد محدَّد. |
| تحليل | يوزع مستند JSON في مجموعة من الرموز المميزة، باستخدام مخطط محدد. |
| الاستعلام | تصفية العناصر في صفيف إدخال، باستخدام شرط محدد. |
| استجابة | إنشاء استجابة لطلب HTTP. |
| جدول | إنشاء جدول HTML من صفيف كائنات JSON. |
| إنهاء | إلغاء سير عمل على الفور. |
| انتظار | إيقاف سير العمل مؤقتًا لفاصل زمني محدد، أو حتى يتم حدوث مهلة. |
| سير العمل | يشغّل Logic App آخر. |
| الشرط | مجموعة من أنواع الإجراءات(Foreachو Ifو Switchو Until) التي تمكنك من تنفيذ تدفق عنصر تحكم برمجي في سير عمل. يمكنك التكرار خلال العناصر الموجودة في مجموعة، واتخاذ القرارات استنادًا إلى قيم معلمات الإدخال وحلقة حتى يتم استيفاء بعض الشروط. |
| InitializeVariable، IncrementVariable، DecrementVariable، |
تعريف المتغيرات وتهيئتها وتعيينها وتعديلها التي يمكنك تمريرها بين عناصر الإجراء في سير العمل. |
مثل المشغل، يجب أن يكون لكل إجراء اسم فريد في سير العمل. المثال التالي يسمي عنصر الاستجابة، ولكن يمكنك استخدام أي معرّف صالح. يجب أن يحتوي الإجراء على قسم إدخال يحدد البيانات التي يعمل عليها الإجراء. بالنسبة إلى إجراء استجابة HTTP، يمكنك تحديد البيانات للتعبير الذي سيتم إرجاعه في رسالة الاستجابة، مع رمز حالة HTTP.
في تعريف التطبيق البسيط لدينا، يولد الإجراء استجابة HTTP حيث يكون الجسم رسالة بسيطة.
"actions": {
"Response": {
"inputs": {
"body": "Hello Logic Apps Template!",
"statusCode": 200
},
"kind": "Http",
"runAfter": {},
"type": "Response"
}
}
يشير القسم runAfter إلى مكان تشغيل الإجراء في تسلسل سير العمل. في المثال السابق، هناك إجراء واحد فقط، لذلك يتم تشغيله دائمًا عند تشغيل المشغل. إذا كان Logic App قد قام بإجراءات متعددة، يمكنك تحديد اسم الإجراء وحالة هذا الإجراء في هذا القسم. سيتم تشغيل الإجراء إذا تم إكمال الإجراء runAfter مع الحالة المحددة. تعرض التعليمات البرمجية التالية مثالاً. يتم تشغيل mySecondAction بعد myFirstAction، ولكن فقط إذا انتهى myFirstAction مع حالة «نجاح»:
"actions": {
"mySecondAction": {
"inputs": {
...
},
"runAfter": {
"myFirstAction": [
"Succeeded"
]
},
"type": ...
},
"myFirstAction": {
"inputs": {
...
},
"runAfter": {},
"type": ...
}
}
قسم المخرجات
استخدم القسم المخرجات لتحديد البيانات التي يمكن أن يقوم سير العمل بإرجاعها عند اكتمال تشغيله. يمكنك تعقب حالة معينة أو بيانات لكل تشغيل لسير العمل. يمكنك فحص الإخراج من كل تشغيل لسير العمل باستخدام محفوظات Logic App، المتوفرة عبر مدخل Microsoft Azure لـ REST API سير العمل.
تنسيق القسم المخرجات يبدو كما يلي:
"outputs": {
"<key-name>": {
"type": "<key-type>",
"value": "<key-value>"
}
}
تعبيرات Logic App
يمكنك استخدام تعبير Logic App بدلاً من أي قيمة ثابتة أو متغير أو ثابت. يمكنك أيضًا وضع تعبير في أي مكان في قيمة سلسلة JSON بواسطة بادئة التعبير مع علامة عند (@). على سبيل المثال، يمكنك استخدام دالة @parameters في تعبير لاسترداد قيمة معلمة مسمّاة (يتم وصف المعلمات في القسم التالي).
"customerFullName": "Bill Frost",
"accountName": "@parameters('customerName')"
يوفر Logic App مجموعة من الوظائف المضمنة التي يمكنك استخدامها لإنشاء تعبيرات معقدة. وتشمل هذه القيود ما يلي:
- وظائف سلسلة، لسَلسَلة أو تقسيم السلاسل، تحويل الأحرف بين الأحرف العليا والسفلى، والبحث عن سلاسل فرعية.
- وظائف المجموعة، لاكتشاف ما إذا كانت مجموعة تحتوي على عناصر تتطابق مع نمط معين، واسترجاع العناصر من مجموعة، ودمج المجموعات.
- وظائف المقارنة المنطقية، للكشف عما إذا كانت المعاملات هي نفسها أو مختلفة أو أكبر عدديًا أو أقل عدديًا من بعضها.
- وظائف التحويل، لتغيير نوع البيانات أو تنسيقها.
- وظائف الرياضيات، مثل الجمع، والطرح، والقسمة، والضرب، بالإضافة إلى العديد من الوظائف الأخرى.
- وظائف التاريخ والوقت، لتحليل التواريخ والأوقات ومعالجتها.
- وظائف سير العمل، لاسترداد معلومات حول البيانات التي تم تمريرها إلى إجراء سير عمل. على سبيل المثال، تقوم الوظيفة المعلمة (المعروضة سابقًا) بجلب قيمة معلمة مسمّاة، وتقوم وظيفة النص (الذي تم إظهاره سابقًا) بإرجاع البيانات التي يتم إنشاؤها بواسطة إجراء.
- JSON وXML وظائف التلاعب، لتحليل ومعالجة وثائق JSON وXML.
يمكنك تعريف المتغيرات في القسم الإدخالات من إجراء InitializeVariable، ويمكنك معالجة هذه المتغيرات باستخدام التعبيرات. تقرأ قيمة متغير باستخدام وظيفة المتغيرات. يستخدم المثال التالي إجراء InitializeVariable لإنشاء متغير عدد صحيح يسمى myIntegerVariable، وتهيئته إلى 99. يعرض هذا المثال أيضًا إجراء شرط مع النوع 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. يتم استخدام المعلمة داخل الشرط لإجراء mypostrequequest. فإنه ينفذ الإجراء فقط إذا كان مستند الطلب يحتوي على مدينة تطابق قيمة المعلمة. القيمة الافتراضية للمعلمة هي نيويورك:
"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"
}
}
}
}
اختبر معلوماتك
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.