الدليل المرجعي للمخطط لأنواع المشغلات والإجراءات في تطبيقات Azure Logic

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

نظرة عامة على المشغلات

يتضمن كل سير عمل مشغل يحدد المكالمات التي تنشئ سير العمل وتبدأه. فيما يلي فئات الزناد العامة:

  • مشغل اقتراع ، يتحقق من نقطة نهاية الخدمة على فترات منتظمة

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

تحتوي المشغلات على عناصر المستوى الأعلى هذه ، على الرغم من أن بعضها اختياري:

"<trigger-name>": {
   "type": "<trigger-type>",
   "inputs": { "<trigger-inputs>" },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "conditions": [ "<array-with-conditions>" ],
   "runtimeConfiguration": { "<runtime-config-options>" },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
},

مطلوب

القيمة النوع الوصف
<اسم الزناد> سلسلة اسم المشغل
<نوع الزناد> سلسلة نوع المشغل مثل "Http" أو "ApiConnection"
<مدخلات الزناد> كائن JSON المدخلات التي تحدد سلوك المشغل
<وحدة الوقت> سلسلة وحدة الوقت التي تصف عدد المرات التي يطلق فيها الزناد: "الثانية" ، "الدقيقة" ، "الساعة" ، "اليوم" ، "الأسبوع" ، "الشهر"
<عدد الوحدات الزمنية> عدد صحيح قيمة تحدد عدد المرات التي يطلق فيها الزناد النار بناء على التردد، وهو عدد الوحدات الزمنية للانتظار حتى يطلق الزناد النار مرة أخرى

فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية:

- الشهر: 1-16 شهرا
- اليوم: 1-500 يوم
- الساعات: 1-12000 ساعة
- الدقائق: 1-72000 دقيقة
- الثانية: 1-999,999 ثانية

على سبيل المثال ، إذا كان الفاصل الزمني هو 6 ، وكان التردد هو "شهر" ، فإن التكرار يكون كل 6 أشهر.

‏‏اختياري

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

قائمة أنواع المشغلات

يحتوي كل نوع مشغل على واجهة ومدخلات مختلفة تحدد سلوك المشغل.

مشغلات مدمجة

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

مشغلات واجهة برمجة التطبيقات المدارة

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

المشغلات - مرجع مفصل

APICمحفز البكالونيك

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

"<APIConnection_trigger_name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": { "<retry-behavior>" },
      "queries": { "<query-parameters>" }
   },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

مطلوب

القيمة النوع الوصف
<APIConnection_trigger_name> سلسلة اسم المشغل
<اسم الاتصال> سلسلة اسم الاتصال بواجهة برمجة التطبيقات المدارة التي يستخدمها سير العمل
<نوع الطريقة> سلسلة طريقة HTTP للتواصل مع واجهة برمجة التطبيقات المدارة: "GET" و "PUT" و "post" و "patch" و "delete"
<API-operation> سلسلة عملية واجهة برمجة التطبيقات للاتصال
<وحدة الوقت> سلسلة وحدة الوقت التي تصف عدد المرات التي يطلق فيها الزناد: "الثانية" ، "الدقيقة" ، "الساعة" ، "اليوم" ، "الأسبوع" ، "الشهر"
<عدد الوحدات الزمنية> عدد صحيح قيمة تحدد عدد المرات التي يطلق فيها الزناد النار بناء على التردد، وهو عدد الوحدات الزمنية للانتظار حتى يطلق الزناد النار مرة أخرى

فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية:

- الشهر: 1-16 شهرا
- اليوم: 1-500 يوم
- الساعات: 1-12000 ساعة
- الدقائق: 1-72000 دقيقة
- الثانية: 1-999,999 ثانية

على سبيل المثال ، إذا كان الفاصل الزمني هو 6 ، وكان التردد هو "شهر" ، فإن التكرار يكون كل 6 أشهر.

‏‏اختياري

القيمة النوع الوصف
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<معلمات الاستعلام> كائن JSON أي معلمات استعلام لتضمينها في استدعاء واجهة برمجة التطبيقات. على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.
<الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
<الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
<سبليت أون التعبير> سلسلة بالنسبة للمشغلات التي ترجع الصفيفات، يشير هذا التعبير إلى الصفيف المراد استخدامه بحيث يمكنك إنشاء مثيل سير عمل وتشغيله لكل عنصر صفيف، بدلا من استخدام حلقة "لكل صفيف".

على سبيل المثال، يمثل هذا التعبير عنصرا في الصفيف تم إرجاعه ضمن محتوى نص المشغل: @triggerbody()?['value']

<خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

المخرجات

العنصر النوع الوصف
الرؤوس كائن JSON الرؤوس من الاستجابة
هيئة كائن JSON الجسم من الاستجابة
تعليمة برمجية الحالة عدد صحيح رمز الحالة من الاستجابة

مثال

يتحقق تعريف المشغل هذا من البريد الإلكتروني كل يوم داخل البريد الوارد لحساب العمل أو المؤسسة التعليمية:

"When_a_new_email_arrives": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "get",
      "path": "/Mail/OnNewEmail",
      "queries": {
          "fetchOnlyWithAttachment": false,
          "folderPath": "Inbox",
          "importance": "Any",
          "includeAttachments": false
      }
   },
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

مشغل ApiConnectionWebhook

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

"<ApiConnectionWebhook_trigger_name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
          "NotificationUrl": "@{listCallbackUrl()}"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "retryPolicy": { "<retry-behavior>" },
      "queries": "<query-parameters>"
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

مطلوب

القيمة النوع الوصف
<اسم الاتصال> سلسلة اسم الاتصال بواجهة برمجة التطبيقات المدارة التي يستخدمها سير العمل
<محتوى الجسم> كائن JSON أي محتوى رسالة لإرساله كحمولة إلى واجهة برمجة التطبيقات المدارة

‏‏اختياري

القيمة النوع الوصف
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<معلمات الاستعلام> كائن JSON أي معلمات استعلام لتضمينها في استدعاء واجهة برمجة التطبيقات

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.

<الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
<الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
<سبليت أون التعبير> سلسلة بالنسبة للمشغلات التي ترجع الصفيفات، يشير هذا التعبير إلى الصفيف المراد استخدامه بحيث يمكنك إنشاء مثيل سير عمل وتشغيله لكل عنصر صفيف، بدلا من استخدام حلقة "لكل صفيف".

على سبيل المثال، يمثل هذا التعبير عنصرا في الصفيف تم إرجاعه ضمن محتوى نص المشغل: @triggerbody()?['value']

<خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

مثال

يشترك تعريف المشغل هذا في واجهة برمجة التطبيقات Office 365 Outlook، ويوفر عنوان URL لمعاودة الاتصال بنقطة نهاية واجهة برمجة التطبيقات، وينتظر رد نقطة النهاية عند وصول بريد إلكتروني جديد.

"When_a_new_email_arrives_(webhook)": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
         "NotificationUrl": "@{listCallbackUrl()}" 
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "path": "/MailSubscription/$subscriptions",
      "queries": {
          "folderPath": "Inbox",
          "hasAttachment": "Any",
          "importance": "Any"
      }
   },
   "splitOn": "@triggerBody()?['value']"
}

مشغل HTTP

يرسل هذا المشغل طلبا إلى نقطة نهاية HTTP أو HTTPS المحددة استنادا إلى جدول التكرار المحدد. ثم يتحقق المشغل من الاستجابة لتحديد ما إذا كان سير العمل قيد التشغيل أم لا. لمزيد من المعلومات، راجع نقاط نهاية خدمة المكالمات عبر HTTP أو HTTPS من تطبيقات Azure Logic Apps.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": "<query-parameters>",
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      }
   },
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

مطلوب

الخاصية القيمة النوع الوصف
method <نوع الطريقة> سلسلة الطريقة التي يجب استخدامها لإرسال الطلب الصادر: "GET" أو "PUT" أو "POST" أو "patch" أو "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> سلسلة عنوان URL لنقطة نهاية HTTP أو HTTPS حيث تريد إرسال الطلب الصادر. الحد الأقصى لحجم السلسلة: 2 كيلوبايت

بالنسبة لخدمة Azure أو موردها، يتضمن بناء جملة URI هذا معرف المورد والمسار إلى المورد الذي تريد الوصول إليه.

frequency <وحدة الوقت> سلسلة وحدة الوقت التي تصف عدد المرات التي يطلق فيها الزناد: "الثانية" ، "الدقيقة" ، "الساعة" ، "اليوم" ، "الأسبوع" ، "الشهر"
interval <عدد الوحدات الزمنية> عدد صحيح قيمة تحدد عدد المرات التي يطلق فيها الزناد النار بناء على التردد، وهو عدد الوحدات الزمنية للانتظار حتى يطلق الزناد النار مرة أخرى

فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية:

- الشهر: 1-16 شهرا
- اليوم: 1-500 يوم
- الساعات: 1-12000 ساعة
- الدقائق: 1-72000 دقيقة
- الثانية: 1-999,999 ثانية

على سبيل المثال ، إذا كان الفاصل الزمني هو 6 ، وكان التردد هو "شهر" ، فإن التكرار يكون كل 6 أشهر.

‏‏اختياري

الخاصية القيمة النوع الوصف
headers <محتوى الرأس> كائن JSON أي رؤوس تحتاج إلى تضمينها مع الطلب

على سبيل المثال، لتعيين اللغة والكتابة:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

queries <معلمات الاستعلام> كائن JSON أي معلمات استعلام تحتاج إلى استخدامها في الطلب

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى الطلب.

body <محتوى الجسم> كائن JSON محتوى الرسالة المراد إرسالها كحمولة مع الطلب
authentication <المصادقة - النوع - و - الخصائص - القيم> كائن JSON نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة إلى المكالمات الصادرة. بالإضافة إلى Scheduler ، authority يتم دعم مكان الإقامة. عندما لا يتم تحديدها، تكون القيمة الافتراضية هي https://management.azure.com/، ولكن يمكنك استخدام قيمة مختلفة.
retryPolicy > type <إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
runs <الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
maximumWaitingRuns <الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
operationOptions <خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

المخرجات

العنصر النوع الوصف
headers كائن JSON الرؤوس من الاستجابة
body كائن JSON الجسم من الاستجابة
status code عدد صحيح رمز الحالة من الاستجابة

متطلبات الطلبات الواردة

للعمل بشكل جيد مع تطبيق المنطق، يجب أن تتوافق نقطة النهاية مع نمط أو عقد مشغل معين، وأن تتعرف على خصائص الاستجابة التالية:

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

مثال على السلوكيات للطلبات المختلفة

كود الحالة إعادة المحاولة بعد السلوك
200 {لا شيء} قم بتشغيل سير العمل، ثم تحقق مرة أخرى من وجود المزيد من البيانات بعد التكرار المحدد.
200 10 ثوان قم بتشغيل سير العمل، ثم تحقق مرة أخرى من وجود المزيد من البيانات بعد 10 ثوان.
202 60 ثانية لا تقم بتشغيل سير العمل. تحدث المحاولة التالية في دقيقة واحدة ، رهنا بالتكرار المحدد. إذا كان التكرار المحدد أقل من دقيقة واحدة، فإن رأس إعادة المحاولة بعد المحاولة له الأسبقية. خلاف ذلك ، يتم استخدام التكرار المحدد.
400 {لا شيء} طلب غير صحيح، لا تقم بتشغيل سير العمل. إذا تم تعريف لا retryPolicy ، استخدام السياسة الافتراضية. بعد الوصول إلى عدد عمليات إعادة المحاولة، يتحقق المشغل مرة أخرى من البيانات بعد التكرار المحدد.
500 {لا شيء} خطأ في الخادم، لا تقم بتشغيل سير العمل. إذا تم تعريف لا retryPolicy ، استخدام السياسة الافتراضية. بعد الوصول إلى عدد عمليات إعادة المحاولة، يتحقق المشغل مرة أخرى من البيانات بعد التكرار المحدد.

مشغل HTTPWebhook

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

يمكنك أيضا تحديد حدود غير متزامنة على مشغل HTTPWebhook . يعتمد سلوك المشغل على الأقسام التي تستخدمها أو تحذفها.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<endpoint-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": { "<retry-behavior>" }
         },
      },
      "unsubscribe": {
         "method": "<method-type>",
         "url": "<endpoint-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" }
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

تتوفر بعض القيم، مثل < نوع >الأسلوب، لكل من "subscribe" الكائنات والكائنات"unsubscribe".

مطلوب

القيمة النوع الوصف
<نوع الطريقة> سلسلة طريقة HTTP لاستخدامها في طلب الاشتراك: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE"
<نقطة النهاية-الاشتراك-عنوان URL> سلسلة عنوان URL لنقطة النهاية لمكان إرسال طلب الاشتراك

‏‏اختياري

القيمة النوع الوصف
<نوع الطريقة> سلسلة طريقة HTTP لاستخدامها في طلب الإلغاء: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE"
<endpoint-إلغاء الاشتراك-URL> سلسلة عنوان URL لنقطة النهاية لإرسال طلب الإلغاء
<محتوى الجسم> سلسلة أي محتوى رسالة لإرساله في طلب الاشتراك أو الإلغاء
<نوع المصادقة> كائن JSON نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة إلى المكالمات الصادرة.
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو متواز) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
<الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
<خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

المخرجات

العنصر النوع الوصف
الرؤوس كائن JSON الرؤوس من الاستجابة
هيئة كائن JSON الجسم من الاستجابة
تعليمة برمجية الحالة عدد صحيح رمز الحالة من الاستجابة

مثال

ينشئ هذا المشغل اشتراكا في نقطة النهاية المحددة، ويوفر عنوان URL فريدا لمعاودة الاتصال، وينتظر مقالات التقنية المنشورة حديثا.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "POST",
         "uri": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{listCallbackUrl()}",
            "hub.mode": "subscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         },
      },
      "unsubscribe": {
         "method": "POST",
         "url": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{workflow().endpoint}@{listCallbackUrl()}",
            "hub.mode": "unsubscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         }
      }
   }
}

محفز التكرار

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

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
      "startTime": "<start-date-time-with-format-YYYY-MM-DDThh:mm:ss>",
      "timeZone": "<time-zone>",
      "schedule": {
         // Applies only when frequency is Day or Week. Separate values with commas.
         "hours": [ <one-or-more-hour-marks> ], 
         // Applies only when frequency is Day or Week. Separate values with commas.
         "minutes": [ <one-or-more-minute-marks> ], 
         // Applies only when frequency is Week. Separate values with commas.
         "weekDays": [ "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday" ] 
      }
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

مطلوب

القيمة النوع الوصف
<وحدة الوقت> سلسلة وحدة الوقت التي تصف عدد المرات التي يطلق فيها الزناد: "الثانية" ، "الدقيقة" ، "الساعة" ، "اليوم" ، "الأسبوع" ، "الشهر"
<عدد الوحدات الزمنية> عدد صحيح قيمة تحدد عدد المرات التي يطلق فيها الزناد النار بناء على التردد، وهو عدد الوحدات الزمنية للانتظار حتى يطلق الزناد النار مرة أخرى

فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية:

- الشهر: 1-16 شهرا
- اليوم: 1-500 يوم
- الساعات: 1-12000 ساعة
- الدقائق: 1-72000 دقيقة
- الثانية: 1-999,999 ثانية

على سبيل المثال ، إذا كان الفاصل الزمني هو 6 ، وكان التردد هو "شهر" ، فإن التكرار يكون كل 6 أشهر.

‏‏اختياري

القيمة النوع الوصف
<تاريخ البدء-الوقت-مع-تنسيق-YYYY-MM-DDThh:mm:ss> سلسلة تاريخ ووقت البدء بهذا التنسيق:

YYYY-MM-DDThh:mm:ss إذا قمت بتحديد منطقة زمنية

-أو-

YYYY-MM-DDThh:mm:ssZ إذا لم تحدد منطقة زمنية

لذلك ، على سبيل المثال ، إذا كنت تريد 18 سبتمبر 2017 في الساعة 2:00 مساء ، فحدد "2017-09-18T14:00:00" وحدد منطقة زمنية مثل "توقيت المحيط الهادئ الرسمي" ، أو حدد "2017-09-18T14:00:00Z" بدون منطقة زمنية.

ملاحظه: يبلغ وقت البدء هذا 49 عاما كحد أقصى في المستقبل ويجب أن يتبع مواصفات وقت التاريخ ISO 8601بتنسيق وقت تاريخ UTC ، ولكن بدون إزاحة UTC. إذا لم تحدد منطقة زمنية، فيجب عليك إضافة الحرف "Z" في النهاية بدون أي مسافات. يشير هذا "Z" إلى الوقت البحري المكافئ.

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

<المنطقة الزمنية> سلسلة ينطبق فقط عند تحديد وقت بدء لأن هذا المشغل لا يقبل إزاحة UTC. حدد المنطقة الزمنية التي تريد تطبيقها.
<علامة ساعة واحدة أو أكثر> صفيف عدد صحيح أو عدد صحيح إذا قمت بتحديد "يوم" أو "أسبوع" ل frequency، فيمكنك تحديد عدد صحيح واحد أو أكثر من 0 إلى 23 ، مفصولا بفواصل ، كساعات اليوم التي تريد فيها تشغيل سير العمل.

على سبيل المثال، إذا حددت "10" و"12" و"14"، فستحصل على 10 صباحا و12 ظهرا و2 ظهرا كعلامات ساعة.

<علامة دقيقة واحدة أو أكثر> صفيف عدد صحيح أو عدد صحيح إذا قمت بتحديد "يوم" أو "أسبوع" ل frequency، فيمكنك تحديد عدد صحيح واحد أو أكثر من 0 إلى 59 ، مفصولا بفواصل ، كدقائق الساعة التي تريد فيها تشغيل سير العمل.

على سبيل المثال، يمكنك تحديد "30" كعلامة دقيقة واستخدام المثال السابق لساعات اليوم، تحصل على 10:30 صباحا و 12:30 ظهرا و 2:30 مساء.

أيام الأسبوع سلسلة أو صفيف سلسلة إذا قمت بتحديد "أسبوع" ل frequency، يمكنك تحديد يوم واحد أو أكثر ، مفصولا بفواصل ، عندما تريد تشغيل سير العمل: "الاثنين" و "الثلاثاء" و "الأربعاء" و "الخميس" و "الجمعة" و "السبت" و "الأحد"
<الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو متواز) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
<الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
<خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

مثال 1

يعمل مشغل التكرار الأساسي هذا يوميا:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

مثال 2

يمكنك تحديد تاريخ ووقت بدء تشغيل المشغل. يبدأ مشغل التكرار هذا في التاريخ المحدد ثم يتم تشغيله يوميا:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1,
      "startTime": "2017-09-18T00:00:00Z"
   }
}

مثال 3

يبدأ هذا الزناد المتكرر في 9 سبتمبر 2017 في الساعة 2:00 مساء ، ويطلق أسبوعيا كل يوم اثنين في الساعة 10:30 صباحا و 12:30 مساء و 2:30 مساء بتوقيت المحيط الهادئ الرسمي:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Week",
      "interval": 1,
      "schedule": {
         "hours": [ 10, 12, 14 ],
         "minutes": [ 30 ],
         "weekDays": [ "Monday" ]
      },
      "startTime": "2017-09-07T14:00:00",
      "timeZone": "Pacific Standard Time"
   }
}

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

مشغل الطلب

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

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

"manual": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "<method-type>",
      "relativePath": "<relative-path-for-accepted-parameter>",
      "schema": {
         "type": "object",
         "properties": { 
            "<property-name>": {
               "type": "<property-type>"
            }
         },
         "required": [ "<required-properties>" ]
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      },
   },
   "operationOptions": "<operation-option>"
}

مطلوب

القيمة النوع الوصف
<اسم العقار> سلسلة اسم الخاصية في مخطط JSON، الذي يصف الحمولة الصافية
<نوع العقار> سلسلة نوع العقار

‏‏اختياري

القيمة النوع الوصف
<نوع الطريقة> سلسلة الطريقة التي يجب أن تستخدمها الطلبات الواردة للاتصال بتطبيقك المنطقي: "GET" ، "PUT" ، "POST" ، "PATCH" ، "DELETE"
<المعلمة النسبية المسار للمعلمة المقبولة> سلسلة المسار النسبي للمعلمة التي يمكن أن يقبلها عنوان URL لنقطة النهاية
<الخصائص المطلوبة> صفيف خاصية واحدة أو أكثر تتطلب قيما
<الحد الأقصى للأشواط> عدد صحيح بشكل افتراضي، يتم تشغيل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو متواز) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن المشغل.
<الحد الأقصى للتشغيل في قائمة الانتظار> عدد صحيح عندما يكون سير العمل الخاص بك قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والذي يمكنك تغييره استنادا runtimeConfiguration.concurrency.runs إلى الخاصية، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.
<خيار التشغيل> سلسلة يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions . لمزيد من المعلومات، راجع خيارات التشغيل.

مثال

يحدد هذا المشغل أن الطلب الوارد يجب أن يستخدم أسلوب HTTP POST لاستدعاء المشغل ويتضمن مخططا يتحقق من صحة الإدخال من الطلب الوارد:

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

شروط المشغل

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

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

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Hour",
      "interval": 1
   },
   "conditions": [ {
      "expression": "@equals(triggers().code, 'InternalServerError')"
   } ]
}

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

@or(equals(triggers().code, 200),equals(triggers().code, 201))

تشغيل أشواط متعددة

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

ملاحظة

لا يمكنك استخدام SplitOn مع نمط استجابة متزامن. يتم تشغيل أي سير عمل يستخدم SplitOn ويتضمن إجراء استجابة بشكل غير متزامن ويرسل 202 ACCEPTED استجابة على الفور.

عند تمكين تزامن المشغل، يتم تقليل حد SplitOn بشكل كبير. إذا تجاوز عدد العناصر هذا الحد، تعطيل إمكانية SplitOn.

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

مثال

لنفترض أن لديك واجهة برمجة تطبيقات ترجع هذه الاستجابة:

{
   "Status": "Succeeded",
   "Rows": [ 
      { 
         "id": 938109380,
         "name": "customer-name-one"
      },
      {
         "id": 938109381,
         "name": "customer-name-two"
      }
   ]
}

يحتاج تطبيقك المنطقي فقط إلى المحتوى من الصفيف الموجود في Rows، حتى تتمكن من إنشاء مشغل مثل هذا المثال:

"HTTP_Debatch": {
   "type": "Http",
    "inputs": {
        "uri": "https://mydomain.com/myAPI",
        "method": "GET"
    },
   "recurrence": {
      "frequency": "Second",
      "interval": 1
    },
    "splitOn": "@triggerBody()?.Rows"
}

ملاحظة

إذا كنت تستخدم SplitOn الأمر، فلن تتمكن من الحصول على الخصائص الموجودة خارج الصفيف. لذلك في هذا المثال، لا يمكنك الحصول على status الخاصية في الاستجابة التي تم إرجاعها من واجهة برمجة التطبيقات.

لتجنب الفشل في Rows حالة عدم وجود الخاصية، يستخدم ? هذا المثال عامل التشغيل.

يمكن الآن استخدام @triggerBody().name تعريف سير العمل للحصول على القيم name ، والتي هي "customer-name-one" من التشغيل الأول ومن "customer-name-two" التشغيل الثاني. لذلك ، تبدو مخرجات المشغل الخاصة بك مثل هذه الأمثلة:

{
   "body": {
      "id": 938109380,
      "name": "customer-name-one"
   }
}
{
   "body": {
      "id": 938109381,
      "name": "customer-name-two"
   }
}

نظرة عامة على الإجراءات

توفر Azure Logic Apps أنواع إجراءات مختلفة - لكل منها مدخلات مختلفة تحدد السلوك الفريد للإجراء. تحتوي الإجراءات على هذه العناصر عالية المستوى ، على الرغم من أن بعضها اختياري:

"<action-name>": {
   "type": "<action-type>",
   "inputs": { 
      "<input-name>": { "<input-value>" },
      "retryPolicy": "<retry-behavior>" 
   },
   "runAfter": { "<previous-trigger-or-action-status>" },
   "runtimeConfiguration": { "<runtime-config-options>" },
   "operationOptions": "<operation-option>"
},

مطلوب

القيمة النوع الوصف
<اسم الإجراء> سلسلة اسم الإجراء
<نوع الإجراء> سلسلة نوع الإجراء ، على سبيل المثال ، "Http" أو "ApiConnection"
<اسم الإدخال> سلسلة اسم الإدخال الذي يحدد سلوك الإجراء
<قيمة الإدخال> مختلف قيمة الإدخال ، والتي يمكن أن تكون سلسلة ، عدد صحيح ، كائن JSON ، وما إلى ذلك
<الحالة السابقة للمشغل أو الإجراء> كائن JSON الاسم والحالة الناتجة للمشغل أو الإجراء الذي يجب تشغيله مباشرة قبل تشغيل هذا الإجراء الحالي

‏‏اختياري

القيمة النوع الوصف
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<خيارات تهيئة وقت التشغيل> كائن JSON بالنسبة لبعض الإجراءات، يمكنك تغيير سلوك الإجراء في وقت التشغيل عن طريق تعيين runtimeConfiguration خصائص. لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل.
<خيار التشغيل> سلسلة بالنسبة لبعض الإجراءات، يمكنك تغيير السلوك الافتراضي عن طريق تعيين operationOptions الخاصية. لمزيد من المعلومات، راجع خيارات التشغيل.

قائمة أنواع الإجراءات

فيما يلي بعض أنواع الإجراءات الشائعة الاستخدام:

إجراءات مضمنة

نوع الإجراء الوصف
ألف ينشئ مخرجا واحدا من المدخلات ، والتي يمكن أن يكون لها أنواع مختلفة.
تنفيذ شفرة جافا سكريبت قم بتشغيل مقتطفات شفرة جافا سكريبت التي تتناسب مع معايير محددة. للحصول على متطلبات التعليمات البرمجية والمزيد من المعلومات، راجع إضافة مقتطفات التعليمات البرمجية وتشغيلها باستخدام التعليمات البرمجية المضمنة.
الوظيفة يستدعي دالة Azure.
HTTP يستدعي نقطة نهاية HTTP.
انضمام ينشئ سلسلة من كافة العناصر الموجودة في صفيف ويفصل تلك العناصر بحرف محدد محدد.
تحليل JSON ينشئ رموزا سهلة الاستخدام من الخصائص في محتوى JSON. يمكنك بعد ذلك الرجوع إلى هذه الخصائص عن طريق تضمين الرموز المميزة في تطبيقك المنطقي.
استفسار ينشئ صفيفا من عناصر في صفيف آخر استنادا إلى شرط أو عامل تصفية.
الاستجابة ينشئ استجابة لمكالمة أو طلب وارد.
اختار ينشئ صفيفا مع كائنات JSON عن طريق تحويل العناصر من صفيف آخر استنادا إلى الخريطة المحددة.
الجدول ينشئ جدول CSV أو HTML من صفيف.
⁧⁩إنهاء⁧⁩ إيقاف سير عمل قيد التشغيل بنشاط.
انتظر إيقاف سير العمل مؤقتا لمدة محددة أو حتى التاريخ والوقت المحددين.
سير العمل يدمج سير عمل داخل سير عمل آخر.

إجراءات واجهة برمجة التطبيقات المدارة

نوع الإجراء الوصف
أبي كونكشن استدعاء نقطة نهاية HTTP باستخدام واجهة برمجة تطبيقات مدارة من قبل Microsoft.
ApiConnectionWebhook يعمل مثل HTTP Webhook ولكنه يستخدم واجهة برمجة تطبيقات تديرها Microsoft.

التحكم في إجراءات سير العمل

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

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

الإجراءات - مرجع مفصل

APICعمل الاستئصال

يرسل هذا الإجراء طلب HTTP إلى واجهة برمجة تطبيقات تديرها Microsoft ويتطلب معلومات حول واجهة برمجة التطبيقات والمعلمات بالإضافة إلى مرجع إلى اتصال صالح.

"<action-name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<api-name>']['connectionId']"
         },
         "<other-action-specific-input-properties>"        
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": "<retry-behavior>",
      "queries": { "<query-parameters>" },
      "<other-action-specific-properties>"
    },
    "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<اسم الإجراء> سلسلة اسم الإجراء الذي يوفره الموصل
<اسم واجهة برمجة التطبيقات> سلسلة اسم واجهة برمجة التطبيقات المدارة من Microsoft المستخدمة للاتصال
<نوع الطريقة> سلسلة طريقة HTTP للاتصال بواجهة برمجة التطبيقات: "GET" أو "PUT" أو "post" أو "patch" أو "DELETE"
<API-operation> سلسلة عملية واجهة برمجة التطبيقات للاتصال

‏‏اختياري

القيمة النوع الوصف
<خصائص أخرى - عمل - محدد - مدخلات - خصائص> كائن JSON أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<معلمات الاستعلام> كائن JSON أي معلمات استعلام لتضمينها في استدعاء واجهة برمجة التطبيقات.

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.

<خصائص أخرى محددة للعمل> كائن JSON أي خصائص أخرى تنطبق على هذا الإجراء المحدد

مثال

يصف هذا التعريف الإجراء إرسال بريد إلكتروني لموصل Office 365 Outlook، وهو واجهة برمجة تطبيقات تديرها Microsoft:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "Thank you for your membership!",
         "Subject": "Hello and welcome!",
         "To": "Sophie.Owen@contoso.com"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "POST",
      "path": "/Mail"
    },
    "runAfter": {}
}

APIConnectionWebhook العمل

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

"<action-name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<api-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": "<retry-behavior>",
         "queries": { "<query-parameters>" },
         "<other-action-specific-input-properties>"
      },
      "unsubscribe": {
         "method": "<method-type>",
         "uri": "<api-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "<other-action-specific-properties>"
      },
   },
   "runAfter": {}
}

تتوفر بعض القيم، مثل < نوع >الأسلوب، لكل من "subscribe" الكائنات والكائنات"unsubscribe".

مطلوب

القيمة النوع الوصف
<اسم الإجراء> سلسلة اسم الإجراء الذي يوفره الموصل
<نوع الطريقة> سلسلة طريقة HTTP لاستخدامها للاشتراك أو إلغاء الاشتراك من نقطة نهاية: "GET" أو "PUT" أو "POST" أو "patch" أو "DELETE"
<API-الاشتراك-URL> سلسلة عنوان URI المطلوب استخدامه للاشتراك في واجهة برمجة التطبيقات

‏‏اختياري

القيمة النوع الوصف
<api-unsubscribe-URL> سلسلة عنوان URI المطلوب استخدامه لإلغاء الاشتراك من واجهة برمجة التطبيقات
<محتوى الرأس> كائن JSON أي رؤوس لإرسالها في الطلب

على سبيل المثال، لتعيين اللغة والكتابة بناء على طلب:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

<محتوى الجسم> كائن JSON أي محتوى رسالة لإرساله في الطلب
<نوع المصادقة> كائن JSON نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة إلى المكالمات الصادرة.
<إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<معلمات الاستعلام> كائن JSON أي معلمات استعلام لتضمينها في استدعاء واجهة برمجة التطبيقات

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.

<خصائص أخرى - عمل - محدد - مدخلات - خصائص> كائن JSON أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد
<خصائص أخرى محددة للعمل> كائن JSON أي خصائص أخرى تنطبق على هذا الإجراء المحدد

يمكنك أيضا تحديد حدود على إجراء ApiConnectionWebhook بنفس طريقة حدود HTTP غير المتزامنة.

إنشاء عمل

ينشئ هذا الإجراء مخرجا واحدا من مدخلات متعددة، بما في ذلك التعبيرات. يمكن أن تحتوي كل من المخرجات والمدخلات على أي نوع تدعمه Azure Logic Apps أصلا، مثل المصفوفات وكائنات JSON وXML والثنائي. يمكنك بعد ذلك استخدام مخرجات الإجراء في إجراءات أخرى.

"Compose": {
   "type": "Compose",
   "inputs": "<inputs-to-compose>",
   "runAfter": {}
},

مطلوب

القيمة النوع الوصف
<المدخلات للإنشاء> أي مدخلات إنشاء مخرج واحد

مثال 1

يندمج abcdefg تعريف الإجراء هذا مع مسافة زائدة والقيمة 1234:

"Compose": {
   "type": "Compose",
   "inputs": "abcdefg 1234",
   "runAfter": {}
},

فيما يلي الإخراج الذي ينشئه هذا الإجراء:

abcdefg 1234

مثال 2

يدمج تعريف الإجراء هذا متغير سلسلة يحتوي على متغير عدد صحيح يحتوي على abcdefg1234:

"Compose": {
   "type": "Compose",
   "inputs": "@{variables('myString')}@{variables('myInteger')}",
   "runAfter": {}
},

فيما يلي الإخراج الذي ينشئه هذا الإجراء:

"abcdefg1234"

تنفيذ إجراء شفرة جافا سكريبت

يقوم هذا الإجراء بتشغيل مقتطف شفرة جافا سكريبت وإرجاع النتائج من خلال Result رمز مميز يمكن للإجراءات اللاحقة الرجوع إليه.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "<JavaScript-code-snippet>",
      "explicitDependencies": {
         "actions": [ <previous-actions> ],
         "includeTrigger": true
      }
   },
   "runAfter": {}
}

مطلوب

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

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

مطلوب في بعض الحالات

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

بالنسبة للسمة includeTrigger ، يمكنك تحديد true أو false قيم.

القيمة النوع الوصف
<الإجراءات السابقة> صفيف سلسلة صفيف يحتوي على أسماء الإجراءات المحددة. استخدم أسماء الإجراءات التي تظهر في تعريف سير العمل حيث تستخدم أسماء الإجراءات شرطة سفلية (_)، وليس مسافات (" ").

مثال 1

يقوم هذا الإجراء بتشغيل التعليمات البرمجية التي تحصل على اسم تطبيق المنطق الخاص بك وإرجاع النص "Hello world from <logic-app-name>" كنتيجة لذلك. في هذا المثال، تشير التعليمة البرمجية إلى اسم سير العمل عن طريق الوصول إلى workflowContext.workflow.name الخاصية من خلال كائن للقراءة فقط workflowContext . لمزيد من المعلومات حول استخدام workflowContext الكائن، راجع مرجع المشغل ونتائج الإجراء في التعليمات البرمجية الخاصة بك.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var text = \"Hello world from \" + workflowContext.workflow.name;\r\n\r\nreturn text;"
   },
   "runAfter": {}
}

مثال 2

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

يستخرج الرمز عناوين البريد الإلكتروني من خاصية المشغل ويقوم بإرجاع العناوين مع SelectedOption قيمة الخاصية Body من إجراء الموافقة. يتضمن الإجراء صراحة إجراء إرسال الموافقة على البريد الإلكتروني كتبعية في السمة explicitDependencies>actions .

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var re = /(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\r\n\r\nvar email = workflowContext.trigger.outputs.body.Body;\r\n\r\nvar reply = workflowContext.actions.Send_approval_email_.outputs.body.SelectedOption;\r\n\r\nreturn email.match(re) + \" - \" + reply;\r\n;",
      "explicitDependencies": {
         "actions": [
            "Send_approval_email_"
         ]
      }
   },
   "runAfter": {}
}

إجراء الوظيفة

يستدعي هذا الإجراء دالة Azure تم إنشاؤها مسبقا.

"<Azure-function-name>": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "<Azure-function-ID>"
      },
      "method": "<method-type>",
      "headers": { "<header-content>" },
      "body": { "<body-content>" },
      "queries": { "<query-parameters>" } 
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<Azure-function-ID> سلسلة معرف المورد لدالة Azure التي تريد الاتصال بها. فيما يلي تنسيق هذه القيمة:

"/subscriptions/Azure-subscription-ID>/<resourceGroups/Azure-resource-group>/providers/Microsoft.Web/sites/Azure-function-app-name/functions/<<<Azure-function-name">>

<نوع الطريقة> سلسلة طريقة HTTP لاستخدامها في استدعاء الوظيفة: "GET" أو "PUT" أو "POST" أو "patch" أو "DELETE"

إذا لم يتم تحديده ، فإن الإعداد الافتراضي هو طريقة "POST".

‏‏اختياري

القيمة النوع الوصف
<محتوى الرأس> كائن JSON أي رؤوس لإرسالها مع المكالمة

على سبيل المثال، لتعيين اللغة والكتابة بناء على طلب:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

<محتوى الجسم> كائن JSON أي محتوى رسالة لإرساله في الطلب
<معلمات الاستعلام> كائن JSON أي معلمات استعلام لتضمينها في استدعاء واجهة برمجة التطبيقات

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.

<خصائص أخرى - عمل - محدد - مدخلات - خصائص> كائن JSON أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد
<خصائص أخرى محددة للعمل> كائن JSON أي خصائص أخرى تنطبق على هذا الإجراء المحدد

عند حفظ تطبيق المنطق، يقوم محرك Logic Apps بإجراء عمليات التحقق التالية على الوظيفة المشار إليها:

  • يجب أن يكون لسير العمل حق الوصول إلى الوظيفة.

  • يمكن أن يستخدم سير العمل الخاص بك مشغل HTTP قياسي فقط أو مشغل خطاف ويب JSON عام.

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

  • لا يمكن أن تحتوي الوظيفة على أي مسار محدد.

  • يسمح فقط بمستويات التفويض "الوظيفية" و "المجهولة".

مثال

يستدعي تعريف الإجراء هذا الدالة "GetProductID" التي تم إنشاؤها مسبقا:

"GetProductID": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "/subscriptions/<XXXXXXXXXXXXXXXXXXXX>/resourceGroups/myLogicAppResourceGroup/providers/Microsoft.Web/sites/InventoryChecker/functions/GetProductID"
      },
      "method": "POST",
      "headers": { 
          "x-ms-date": "@utcnow()"
       },
      "body": { 
          "Product_ID": "@variables('ProductID')"
      }
   },
   "runAfter": {}
}

إجراء HTTP

يرسل هذا الإجراء طلبا إلى نقطة نهاية HTTP أو HTTPS المحددة ويتحقق من الاستجابة لتحديد ما إذا كان سير العمل قيد التشغيل أم لا. لمزيد من المعلومات، راجع نقاط نهاية خدمة المكالمات عبر HTTP أو HTTPS من تطبيقات Azure Logic Apps.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": { "<query-parameters>" },
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      },
   },
   "runAfter": {}
}

مطلوب

الخاصية القيمة النوع الوصف
method <نوع الطريقة> سلسلة الطريقة التي يجب استخدامها لإرسال الطلب الصادر: "GET" أو "PUT" أو "POST" أو "patch" أو "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> سلسلة عنوان URL لنقطة نهاية HTTP أو HTTPS حيث تريد إرسال الطلب الصادر. الحد الأقصى لحجم السلسلة: 2 كيلوبايت

بالنسبة لخدمة Azure أو موردها، يتضمن بناء جملة URI هذا معرف المورد والمسار إلى المورد الذي تريد الوصول إليه.

‏‏اختياري

الخاصية القيمة النوع الوصف
headers <محتوى الرأس> كائن JSON أي رؤوس تحتاج إلى تضمينها مع الطلب

على سبيل المثال، لتعيين اللغة والكتابة:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

queries <معلمات الاستعلام> كائن JSON أي معلمات استعلام تحتاج إلى استخدامها في الطلب

على سبيل المثال، يضيف ?api-version=2018-01-01 الكائن "queries": { "api-version": "2018-01-01" } إلى المكالمة.

body <محتوى الجسم> كائن JSON محتوى الرسالة المراد إرسالها كحمولة مع الطلب
authentication <المصادقة - النوع - و - الخصائص - القيم> كائن JSON نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة إلى المكالمات الصادرة. بالإضافة إلى Scheduler ، authority يتم دعم مكان الإقامة. عندما لا يتم تحديدها، تكون القيمة الافتراضية هي https://management.azure.com/، ولكن يمكنك استخدام قيمة مختلفة.
retryPolicy > type <إعادة محاولة السلوك> كائن JSON تخصيص سلوك إعادة المحاولة للفشل المتقطع، الذي يحتوي على رمز الحالة 408 و429 و5XX وأية استثناءات اتصال. لمزيد من المعلومات، راجع نهج إعادة المحاولة.
<خصائص أخرى - عمل - محدد - مدخلات - خصائص> <خاصية الإدخال> كائن JSON أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد
<خصائص أخرى محددة للعمل> <قيمة العقار> كائن JSON أي خصائص أخرى تنطبق على هذا الإجراء المحدد

مثال

يحصل تعريف الإجراء هذا على آخر الأخبار عن طريق إرسال طلب إلى نقطة النهاية المحددة:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "https://mynews.example.com/latest"
   }
}

انضم إلى العمل

ينشئ هذا الإجراء سلسلة من كافة العناصر الموجودة في صفيف ويفصل تلك العناصر بحرف المحدد المحدد.

"Join": {
   "type": "Join",
   "inputs": {
      "from": <array>,
      "joinWith": "<delimiter>"
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<صفيف> صفيف الصفيف أو التعبير الذي يوفر العناصر المصدر. إذا قمت بتحديد تعبير، فقم بتضمين هذا التعبير بعلامات اقتباس مزدوجة.
<المحدد> سلسلة أحرف واحدة الحرف الذي يفصل كل عنصر في السلسلة

مثال

افترض أن لديك متغير "myIntegerArray" تم إنشاؤه مسبقا يحتوي على صفيف الأعداد الصحيحة هذا:

[1,2,3,4]

يحصل تعريف الإجراء هذا على القيم من المتغير باستخدام الدالة variables() في تعبير وينشئ هذه السلسلة بتلك القيم ، والتي يتم فصلها بفاصلة: "1,2,3,4"

"Join": {
   "type": "Join",
   "inputs": {
      "from": "@variables('myIntegerArray')",
      "joinWith": ","
   },
   "runAfter": {}
}

تحليل عمل JSON

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

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": "<JSON-source>",
         "schema": { "<JSON-schema>" }
      },
      "runAfter": {}
},

مطلوب

القيمة النوع الوصف
<JSON-source> كائن JSON محتوى JSON الذي تريد تحليله
<JSON-schema> كائن JSON مخطط JSON الذي يصف محتوى JSON الأساسي، والذي يستخدمه الإجراء لتحليل محتوى JSON المصدر.

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

مثال

ينشئ تعريف الإجراء هذا الرموز المميزة التي يمكنك استخدامها في سير العمل الخاص بك ولكن فقط في الإجراءات التي يتم تشغيلها بعد إجراء Parse JSON :

FirstName وLastName وEmail

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": {
         "Member": {
            "Email": "Sophie.Owen@contoso.com",
            "FirstName": "Sophie",
            "LastName": "Owen"
         }
      },
      "schema": {
         "type": "object",
         "properties": {
            "Member": {
               "type": "object",
               "properties": {
                  "Email": {
                     "type": "string"
                  },
                  "FirstName": {
                     "type": "string"
                  },
                  "LastName": {
                     "type": "string"
                  }
               }
            }
         }
      }
   },
   "runAfter": { }
},

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

"content": {
   "Member": { 
      "FirstName": "Sophie",
      "LastName": "Owen",
      "Email": "Sophie.Owen@contoso.com"
   }
},

تحدد الخاصية "مخطط" مخطط JSON المستخدم لوصف محتوى JSON:

"schema": {
   "type": "object",
   "properties": {
      "Member": {
         "type": "object",
         "properties": {
            "FirstName": {
               "type": "string"
            },
            "LastName": {
               "type": "string"
            },
            "Email": {
               "type": "string"
            }
         }
      }
   }
}

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

ينشئ هذا الإجراء صفيفا من عناصر في صفيف آخر استنادا إلى شرط أو عامل تصفية محدد.

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": <array>,
      "where": "<condition-or-filter>"
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<صفيف> صفيف الصفيف أو التعبير الذي يوفر العناصر المصدر. إذا قمت بتحديد تعبير، فقم بتضمين هذا التعبير بعلامات اقتباس مزدوجة.
<حالة أو مرشح> سلسلة الشرط المستخدم لتصفية العناصر في الصفيف المصدر

ملاحظة: إذا لم تستوف أي قيم الشرط، فسيقوم الإجراء بإنشاء صفيف فارغ.

مثال

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

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": [ 1, 3, 0, 5, 4, 2 ],
      "where": "@greater(item(), 2)"
   }
}

إجراءات الاستجابة

ينشئ هذا الإجراء الحمولة الصافية للاستجابة لطلب HTTP.

"Response" {
    "type": "Response",
    "kind": "http",
    "inputs": {
        "statusCode": 200,
        "headers": { <response-headers> },
        "body": { <response-body> }
    },
    "runAfter": {}
},

مطلوب

القيمة النوع الوصف
<رمز حالة الاستجابة> عدد صحيح رمز حالة HTTP الذي يتم إرساله إلى الطلب الوارد. الرمز الافتراضي هو "200 موافق" ، ولكن يمكن أن يكون الرمز أي رمز حالة صالح يبدأ ب 2xx أو 4xx أو 5xx ، ولكن ليس ب 3xxx.

‏‏اختياري

القيمة النوع الوصف
<رؤوس الاستجابات> كائن JSON رأس واحد أو أكثر لتضمينه مع الاستجابة
<هيئة الاستجابة> مختلف نص الاستجابة ، والذي يمكن أن يكون سلسلة أو كائن JSON أو حتى محتوى ثنائي من إجراء سابق

مثال

ينشئ تعريف الإجراء هذا استجابة لطلب HTTP باستخدام رمز الحالة المحدد ونص الرسالة ورؤوس الرسائل:

"Response": {
   "type": "Response",
   "inputs": {
      "statusCode": 200,
      "body": {
         "ProductID": 0,
         "Description": "Organic Apples"
      },
      "headers": {
         "x-ms-date": "@utcnow()",
         "content-type": "application/json"
      }
   },
   "runAfter": {}
}

القيود

على عكس الإجراءات الأخرى، فإن إجراء الاستجابة له قيود خاصة:

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

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

  • يحصل الطلب الأصلي على استجابة سير العمل الخاص بك فقط عند الانتهاء من جميع الإجراءات التي يتطلبها إجراء الاستجابة ضمن حد مهلة HTTP.

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

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

    وإلا، إذا كان سير العمل يستخدم الأمر splitOn وإجراء استجابة ، تشغيل سير العمل بشكل غير متزامن وإرجاع استجابة 202 مقبول على الفور.

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

حدد الإجراء

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

"Select": {
   "type": "Select",
   "inputs": {
      "from": <array>,
      "select": { 
          "<key-name>": "<expression>",
          "<key-name>": "<expression>"        
      }
   },
   "runAfter": {}
},

مطلوب

القيمة النوع الوصف
<صفيف> صفيف الصفيف أو التعبير الذي يوفر العناصر المصدر. تأكد من إرفاق تعبير بعلامات اقتباس مزدوجة.

ملاحظة: إذا كان الصفيف المصدر فارغا، يقوم الإجراء بإنشاء صفيف فارغ.

<اسم المفتاح> سلسلة اسم الخاصية المعين للنتيجة من <التعبير>

لإضافة خاصية جديدة عبر كافة الكائنات في صفيف المخرجات، قم بتوفير <اسم> مفتاح لتلك الخاصية وتعبير> عن قيمة الخاصية<.

لإزالة خاصية من كافة الكائنات الموجودة في الصفيف، احذف <اسم> المفتاح لتلك الخاصية.

<التعبير> سلسلة التعبير الذي يحول العنصر في الصفيف المصدر ويعين النتيجة إلى <اسم المفتاح>

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

مثال

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

"Select": {
   "type": "Select",
   "inputs": {
      "from": [ 1, 2, 3 ],
      "select": { 
         "number": "@item()" 
      }
   },
   "runAfter": {}
},

فيما يلي الصفيف الذي ينشئه هذا الإجراء:

[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]

لاستخدام إخراج الصفيف هذا في إجراءات أخرى، قم بتمرير هذا الإخراج إلى إجراء إنشاء :

"Compose": {
   "type": "Compose",
   "inputs": "@body('Select')",
   "runAfter": {
      "Select": [ "Succeeded" ]
   }
},

يمكنك بعد ذلك استخدام الإخراج من الإجراء إنشاء في إجراءاتك الأخرى، على سبيل المثال، الإجراء Office 365 Outlook - إرسال بريد إلكتروني:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "@{outputs('Compose')}",
         "Subject": "Output array from Select and Compose actions",
         "To": "<your-email@domain>"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "post",
      "path": "/Mail"
   },
   "runAfter": {
      "Compose": [ "Succeeded" ]
   }
},

إجراء الجدول

ينشئ هذا الإجراء جدول CSV أو HTML من صفيف. بالنسبة للمصفوفات التي تحتوي على كائنات JSON، يقوم هذا الإجراء تلقائيا بإنشاء رؤوس الأعمدة من أسماء خصائص الكائنات. بالنسبة للمصفوفات ذات أنواع البيانات الأخرى، يجب عليك تحديد رؤوس الأعمدة وقيمها. على سبيل المثال، يتضمن هذا الصفيف خصائص "ID" و "Product_Name" التي يمكن أن يستخدمها هذا الإجراء لأسماء رؤوس الأعمدة:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

"Create_<CSV | HTML>_table": {
   "type": "Table",
   "inputs": {
      "format": "<CSV | HTML>",
      "from": <array>,
      "columns": [ 
         {
            "header": "<column-name>",
            "value": "<column-value>"
         },
         {
            "header": "<column-name>",
            "value": "<column-value>"
         } 
      ]
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<CSV أو HTML> سلسلة تنسيق الجدول الذي تريد إنشاؤه
<صفيف> صفيف الصفيف أو التعبير الذي يوفر العناصر المصدر للجدول

ملاحظة: إذا كان الصفيف المصدر فارغا، فسيقوم الإجراء بإنشاء جدول فارغ.

‏‏اختياري

لتحديد رؤوس الأعمدة وقيمها أو تخصيصها، استخدم الصفيف columns . عندما header-value يكون للأزواج نفس اسم الرأس، تظهر قيمها في العمود نفسه أسفل اسم الرأس هذا. وإلا، فإن كل رأس فريد يحدد عمودا فريدا.

القيمة النوع الوصف
<اسم العمود> سلسلة اسم رأس عمود
<قيمة العمود> أي القيمة في هذا العمود

مثال 1

افترض أن لديك متغير "myItemArray" تم إنشاؤه مسبقا يحتوي حاليا على هذه الصفيفة:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

ينشئ تعريف الإجراء هذا جدول CSV من المتغير "myItemArray". يحصل التعبير المستخدم بواسطة from الخاصية على الصفيف من "myItemArray" باستخدام الدالة variables() :

"Create_CSV_table": {
   "type": "Table",
   "inputs": {
      "format": "CSV",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

فيما يلي جدول CSV الذي ينشئه هذا الإجراء:

ID,Product_Name 
0,Apples 
1,Oranges 

مثال 2

ينشئ تعريف الإجراء هذا جدول HTML من المتغير "myItemArray". يحصل التعبير المستخدم بواسطة from الخاصية على الصفيف من "myItemArray" باستخدام الدالة variables() :

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

فيما يلي جدول HTML الذي ينشئه هذا الإجراء:

المعرفProduct_Name
0تفاح
1برتقال

مثال 3

ينشئ تعريف الإجراء هذا جدول HTML من المتغير "myItemArray". ومع ذلك، يتجاوز هذا المثال أسماء رؤوس الأعمدة الافتراضية مع "Stock_ID" و "الوصف"، ويضيف الكلمة "عضوي" إلى القيم الموجودة في عمود "الوصف".

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')",
      "columns": [ 
         {
            "header": "Stock_ID",
            "value": "@item().ID"
         },
         {
            "header": "Description",
            "value": "@concat('Organic ', item().Product_Name)"
         }
      ]
    },
   "runAfter": {}
},

فيما يلي جدول HTML الذي ينشئه هذا الإجراء:

Stock_IDالوصف
0التفاح العضوي
1البرتقال العضوي

إنهاء الإجراء

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

"Terminate": {
   "type": "Terminate",
   "inputs": {
       "runStatus": "<status>",
       "runError": {
            "code": "<error-code-or-name>",
            "message": "<error-message>"
       }
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<حالة> سلسلة حالة العودة للتشغيل: "فشل" أو "تم الإلغاء" أو "نجح"

‏‏اختياري

تنطبق خصائص كائن "runStatus" فقط عند تعيين الخاصية "runStatus" إلى حالة "فشل".

القيمة النوع الوصف
<خطأ-رمز-أو-اسم> سلسلة رمز الخطأ أو اسمه
<رسالة خطأ> سلسلة الرسالة أو النص الذي يصف الخطأ وأي إجراءات يمكن لمستخدم التطبيق اتخاذها

مثال

يوقف تعريف الإجراء هذا تشغيل سير عمل، ويعين حالة التشغيل إلى "فشل"، وإرجاع الحالة ورمز خطأ ورسالة خطأ:

"Terminate": {
    "type": "Terminate",
    "inputs": {
        "runStatus": "Failed",
        "runError": {
            "code": "Unexpected response",
            "message": "The service received an unexpected response. Please try again."
        }
   },
   "runAfter": {}
}

إجراء الانتظار

يؤدي هذا الإجراء إلى إيقاف تنفيذ سير العمل مؤقتا للفاصل الزمني المحدد أو حتى الوقت المحدد، ولكن ليس كليهما.

الفاصل الزمني المحدد

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": <number-of-units>,
         "unit": "<interval>"
      }
   },
   "runAfter": {}
},

الوقت المحدد

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "<date-time-stamp>"
      }
   },
   "runAfter": {}
},

مطلوب

القيمة النوع الوصف
<عدد الوحدات> عدد صحيح بالنسبة لإجراء التأخير ، عدد الوحدات المطلوب انتظارها
<الفاصل الزمني> سلسلة بالنسبة لإجراء التأخير ، فإن الفاصل الزمني للانتظار: "الثاني" ، "الدقيقة" ، "الساعة" ، "اليوم" ، "الأسبوع" ، "الشهر"
<ختم التاريخ والوقت> سلسلة بالنسبة لإجراء التأخير حتى الإجراء ، تاريخ ووقت استئناف التنفيذ. يجب أن تستخدم هذه القيمة تنسيق وقت تاريخ UTC.

مثال 1

يؤدي تعريف الإجراء هذا إلى إيقاف سير العمل مؤقتا لمدة 15 دقيقة:

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": 15,
         "unit": "Minute"
      }
   },
   "runAfter": {}
},

مثال 2

يؤدي تعريف الإجراء هذا إلى إيقاف سير العمل مؤقتا حتى الوقت المحدد:

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "2017-10-01T00:00:00Z"
      }
   },
   "runAfter": {}
},

إجراء سير العمل

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

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

  • يجعل المشغل تطبيق المنطق المتداخل قابلا للاستدعاء، مثل مشغل طلب أو HTTP

  • نفس اشتراك Azure مثل تطبيق المنطق الأصل

  • لاستخدام المخرجات من تطبيق المنطق المتداخل في تطبيق المنطق الأصل، يجب أن يحتوي تطبيق المنطق المتداخل على إجراء استجابة

"<nested-logic-app-name>": {
   "type": "Workflow",
   "inputs": {
      "body": { "<body-content" },
      "headers": { "<header-content>" },
      "host": {
         "triggerName": "<trigger-name>",
         "workflow": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Logic/<nested-logic-app-name>"
         }
      }
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<متداخلة-منطق-تطبيق-اسم> سلسلة اسم تطبيق المنطق الذي تريد الاتصال به
<اسم الزناد> سلسلة اسم المشغل في تطبيق المنطق المتداخل الذي تريد الاتصال به
<Azure-subscription-ID> سلسلة معرف اشتراك Azure لتطبيق المنطق المتداخل
<"Azure-resource-group"> سلسلة اسم مجموعة موارد Azure لتطبيق المنطق المتداخل
<متداخلة-منطق-تطبيق-اسم> سلسلة اسم تطبيق المنطق الذي تريد الاتصال به

‏‏اختياري

القيمة النوع الوصف
<محتوى الرأس> كائن JSON أي رؤوس لإرسالها مع المكالمة
<محتوى الجسم> كائن JSON أي محتوى رسالة لإرساله مع المكالمة

المخرجات

تختلف مخرجات هذا الإجراء استنادا إلى إجراء الاستجابة لتطبيق المنطق المتداخل. إذا لم يتضمن تطبيق المنطق المتداخل إجراء استجابة، فستكون المخرجات فارغة.

مثال

بعد انتهاء الإجراء "Start_search" بنجاح، يستدعي تعريف إجراء سير العمل هذا تطبيقا منطقيا آخر يسمى "Get_product_information"، والذي يمر في المدخلات المحددة:

"actions": {
   "Start_search": { <action-definition> },
   "Get_product_information": {
      "type": "Workflow",
      "inputs": {
         "body": {
            "ProductID": "24601",
         },
         "host": {
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/InventoryManager-RG/providers/Microsoft.Logic/Get_product_information",
            "triggerName": "Find_product"
         },
         "headers": {
            "content-type": "application/json"
         }
      },
      "runAfter": { 
         "Start_search": [ "Succeeded" ]
      }
   }
},

التحكم في تفاصيل إجراءات سير العمل

لكل إجراء

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

"For_each": {
   "type": "Foreach",
   "actions": { 
      "<action-1>": { "<action-definition-1>" },
      "<action-2>": { "<action-definition-2>" }
   },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": <count>
      }
    },
    "operationOptions": "<operation-option>"
}

مطلوب

القيمة النوع الوصف
<العمل-1... n> سلسلة أسماء الإجراءات التي يتم تشغيلها على كل عنصر صفيف
<العمل-التعريف-1... n> كائن JSON تعريفات الإجراءات التي يتم تشغيلها
<لكل تعبير> سلسلة التعبير الذي يشير إلى كل عنصر في الصفيف المحدد

‏‏اختياري

القيمة النوع الوصف
<count> عدد صحيح بشكل افتراضي، يتم تشغيل تكرارات الحلقات "لكل منها" في نفس الوقت (متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة عد> جديدة<، راجع تغيير تزامن الحلقة "لكل حلقة".
<خيار التشغيل> سلسلة لتشغيل حلقة "لكل منها" بالتتابع، وليس بالتوازي، قم بتعيين خيار>< التشغيل إلى Sequential أو <العد> إلى 1، ولكن ليس كليهما. لمزيد من المعلومات، راجع تشغيل حلقات "لكل منها" بالتتابع.

مثال

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

"For_each": {
   "type": "Foreach",
   "actions": {
      "Send_an_email": {
         "type": "ApiConnection",
         "inputs": {
            "body": {
               "Body": "@base64ToString(items('For_each')?['Content'])",
               "Subject": "Review attachment",
               "To": "Sophie.Owen@contoso.com"
                },
            "host": {
               "connection": {
                  "id": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {}
      }
   },
   "foreach": "@triggerBody()?['Attachments']",
   "runAfter": {}
}

لتحديد صفيف يتم تمريره كإخراج من المشغل فقط، يحصل هذا التعبير على صفيف اسم> الصفيف < من نص المشغل. لتجنب حدوث فشل في حالة عدم وجود الصفيف، يستخدم ? التعبير عامل التشغيل:

@triggerBody()?['<array-name>']

إذا كان الإجراء

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

"Condition": {
   "type": "If",
   "expression": { "<condition>" },
   "actions": {
      "<action-1>": { "<action-definition>" }
   },
   "else": {
      "actions": {
        "<action-2>": { "<action-definition" }
      }
   },
   "runAfter": {}
}
القيمة النوع الوصف
<شرط> كائن JSON الشرط ، الذي يمكن أن يكون تعبيرا ، لتقييم
<إجراء-1> كائن JSON الإجراء الذي سيتم تشغيله عند < تقييم الشرط> إلى true
<تعريف العمل> كائن JSON تعريف الإجراء
<إجراء-2> كائن JSON الإجراء الذي سيتم تشغيله عند < تقييم الشرط> إلى false

تحصل الإجراءات الموجودة في actions الكائنات أو else الكائنات على هذه الحالات:

  • "نجحوا" عندما يركضون وينجحون
  • "فشلت" عند تشغيلها وفشلها
  • "تم تخطيه" عندما لا يتم تشغيل الفرع المعني

مثال

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

"Condition": {
   "type": "If",
   "expression": {
      "and": [ {
         "greater": [ "@variables('myIntegerVariable')", 0 ] 
      } ]
   },
   "actions": { 
      "HTTP - Check this website": {
         "type": "Http",
         "inputs": {
         "method": "GET",
            "uri": "http://this-url"
         },
         "runAfter": {}
      }
   },
   "else": {
      "actions": {
         "HTTP - Check this other website": {
            "type": "Http",
            "inputs": {
               "method": "GET",
               "uri": "http://this-other-url"
            },
            "runAfter": {}
         }
      }
   },
   "runAfter": {}
}

كيفية استخدام الشروط للتعبيرات

فيما يلي بعض الأمثلة التي توضح كيفية استخدام التعبيرات في الشروط:

JSON النتيجة
"التعبير": "@parameters('hasSpecialAction>'<)" بالنسبة للتعبيرات المنطقية فقط، يمر الشرط لأي قيمة يتم تقييمها إلى true.

لتحويل أنواع أخرى إلى منطقية، استخدم هذه الوظائف: empty() أو equals().

"التعبير": "@greater(الإجراءات ('الإجراء>').output.value, المعلمات('العتبة>'<<))" بالنسبة لدالات المقارنة، يتم تشغيل الإجراء فقط عندما يكون الإخراج من الإجراء> أكثر من << قيمة العتبة>.
"التعبير": "@or(أكبر(إجراءات('إجراء').output.value, معلمات('عتبة>'))، أقل (إجراءات ('نفس الإجراء>>'<<<).output.value، 100))" بالنسبة للدالات المنطقية وإنشاء تعبيرات منطقية متداخلة، يتم تشغيل الإجراء عندما يكون الإخراج من الإجراء> أكثر من قيمة العتبة>< أو أقل من < 100.
"التعبير": "@equals(الطول (الإجراءات ('الإجراء'<).المخرجات.الأخطاء>)، 0))" يمكنك استخدام وظائف الصفيف للتحقق مما إذا كان الصفيف يحتوي على أي عناصر. يتم تشغيل الإجراء عندما يكون الصفيف errors فارغا.

نطاق العمل

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

"Scope": {
   "type": "Scope",
   "actions": {
      "<inner-action-1>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<inner-action-2>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   }
}

مطلوب

القيمة النوع الوصف
<العمل الداخلي-1... n> كائن JSON إجراء واحد أو أكثر يتم تشغيله داخل النطاق
<مدخلات العمل> كائن JSON المدخلات لكل إجراء

إجراء Switch

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

"Switch": {
   "type": "Switch",
   "expression": "<expression-object-or-token>",
   "cases": {
      "Case": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      },
      "Case_2": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      }
   },
   "default": {
      "actions": {
         "<default-action-name>": { "<default-action-definition>" }
      }
   },
   "runAfter": {}
}

مطلوب

القيمة النوع الوصف
<التعبير-الكائن-أو-الرمز المميز> يتفاوت التعبير أو كائن JSON أو الرمز المميز المطلوب تقييمه
<اسم الإجراء> سلسلة اسم الإجراء المطلوب تشغيله للحالة المطابقة
<تعريف العمل> كائن JSON تعريف الإجراء المراد تشغيله للحالة المطابقة
<قيمة المطابقة> يتفاوت القيمة التي يجب مقارنتها بالنتيجة التي تم تقييمها

‏‏اختياري

القيمة النوع الوصف
<اسم الإجراء الافتراضي> سلسلة اسم الإجراء الافتراضي للتشغيل عند عدم وجود حالة مطابقة
<تعريف الإجراء الافتراضي> كائن JSON تعريف الإجراء الذي سيتم تشغيله عند عدم وجود حالة مطابقة

مثال

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

"Switch": {
   "type": "Switch",
   "expression": "@body('Send_approval_email')?['SelectedOption']",
   "cases": {
      "Case": {
         "actions": {
            "Send_an_email": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your approval.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         },
         "case": "Approve"
      },
      "Case_2": {
         "actions": {
            "Send_an_email_2": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your response.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}     
         },
         "case": "Reject"
      }
   },
   "default": {
      "actions": { 
         "Send_an_email_3": { 
            "type": "ApiConnection",
            "inputs": {
               "Body": "Please respond with either 'Approve' or 'Reject'.",
               "Subject": "Please respond", 
               "To": "Sophie.Owen@contoso.com"
            },
            "host": {
               "connection": {
                  "name": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {} 
      }
   },
   "runAfter": {
      "Send_approval_email": [ 
         "Succeeded"
      ]
   }
}

حتى اتخاذ إجراء

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

 "Until": {
   "type": "Until",
   "actions": {
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   },
   "expression": "<condition>",
   "limit": {
      "count": <loop-count>,
      "timeout": "<loop-timeout>"
   },
   "runAfter": {}
}
القيمة النوع الوصف
<اسم الإجراء> سلسلة اسم الإجراء الذي تريد تشغيله داخل الحلقة
<نوع الإجراء> سلسلة نوع الإجراء الذي تريد تشغيله
<مدخلات العمل> مختلف مدخلات الإجراء المراد تشغيله
<شرط> سلسلة الشرط أو التعبير المطلوب تقييمه بعد انتهاء تشغيل جميع الإجراءات في الحلقة
<عدد الحلقات> عدد صحيح الحد الأقصى لأكبر عدد من الحلقات التي يمكن تشغيل الإجراء. لمزيد من المعلومات حول الحد الافتراضي والحد الأقصى، راجع الحدود والتكوين لتطبيقات Azure Logic Apps.
<حلقة المهلة> سلسلة الحد الأقصى لأطول وقت يمكن تشغيل الحلقة فيه. القيمة الافتراضية timeout هي PT1H، وهو تنسيق ISO 8601 المطلوب.

ملاحظة

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

مثال

يرسل تعريف إجراء الحلقة هذا طلب HTTP إلى عنوان URL المحدد حتى يتم استيفاء أحد الشروط التالية:

  • يحصل الطلب على استجابة باستخدام رمز الحالة "200 OK".
  • تم تشغيل الحلقة 60 مرة.
  • تم تشغيل الحلقة لمدة ساعة واحدة.
 "Run_until_loop_succeeds_or_expires": {
    "type": "Until",
    "actions": {
        "HTTP": {
            "type": "Http",
            "inputs": {
                "method": "GET",
                "uri": "http://myurl"
            },
            "runAfter": {}
        }
    },
    "expression": "@equals(outputs('HTTP')['statusCode'], 200)",
    "limit": {
        "count": 60,
        "timeout": "PT1H"
    },
    "runAfter": {}
}

خطافات الويب والاشتراكات

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

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

تحدث المكالمة unsubscribe تلقائيا عندما تجعل إحدى العمليات المشغل أو الإجراء غير صالح، على سبيل المثال:

  • حذف المشغل أو تعطيله.
  • حذف سير العمل أو تعطيله.
  • حذف الاشتراك أو تعطيله.

لدعم هذه المكالمات، @listCallbackUrl() يعرض التعبير "عنوان URL لمعاودة الاتصال" فريدا للمشغل أو الإجراء. يمثل عنوان URL هذا معرفا فريدا لنقاط النهاية التي تستخدم واجهة برمجة تطبيقات REST الخاصة بالخدمة. المعلمات لهذه الوظيفة هي نفسها مثل مشغل webhook أو الإجراء.

تغيير المدة غير المتزامنة

لكل من المشغلات والإجراءات، يمكنك تحديد مدة النمط غير المتزامن إلى فاصل زمني محدد عن طريق إضافة limit.timeout الخاصية. وبهذه الطريقة، إذا لم ينته الإجراء عند انقضاء الفاصل الزمني، وضع علامة على حالة الإجراء كما هو الحال Cancelled مع ActionTimedOut الرمز. تستخدم timeout الخاصية تنسيق ISO 8601.

"<trigger-or-action-name>": {
   "type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
   "inputs": {},
   "limit": {
      "timeout": "PT10S"
   },
   "runAfter": {}
}

إعدادات تكوين وقت التشغيل

يمكنك تغيير سلوك وقت التشغيل الافتراضي للمشغلات والإجراءات عن طريق إضافة هذه runtimeConfiguration الخصائص إلى تعريف المشغل أو الإجراء.

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

يعمل تعيين الخاصية runs على 1 نفس الطريقة التي يعمل بها تعيين operationOptions الخاصية إلى SingleInstance. يمكنك تعيين أي من الموقعين، ولكن ليس كليهما.

لتغيير الحد الافتراضي، راجع تغيير تزامن المشغل أو مثيلات المشغل بالتتابع.

جميع المشغلات
runtimeConfiguration.concurrency.maximumWaitingRuns عدد صحيح قم بتغيير الحد الافتراضي لعدد مثيلات سير العمل التي يجب الانتظار حتى يتم تشغيلها عندما يكون تطبيق المنطق الخاص بك يقوم بالفعل بتشغيل الحد الأقصى للمثيلات المتزامنة.

لتغيير الحد الافتراضي، راجع تغيير حد عمليات تشغيل الانتظار.

جميع المشغلات
runtimeConfiguration.concurrency.repetitions عدد صحيح قم بتغيير الحد الافتراضي لعدد تكرارات الحلقات "لكل منها" التي يمكن تشغيلها في نفس الوقت (متزامنة أو متوازية).

يعمل تعيين الخاصية repetitions على 1 نفس الطريقة التي يعمل بها تعيين operationOptions الخاصية إلى SingleInstance. يمكنك تعيين أي من الموقعين، ولكن ليس كليهما.

لتغيير الحد الافتراضي، راجع تغيير التزامن "لكل منهما" أو تشغيل حلقات "لكل شرب" بالتتابع.

فعل:

فوريتش

runtimeConfiguration.paginationPolicy.minimumItemCount عدد صحيح بالنسبة للإجراءات المحددة التي تدعم ترقيم الصفحات وتقوم بتشغيلها، تحدد هذه القيمة الحد الأدنى لعدد النتائج المطلوب استردادها.

لتشغيل ترقيم الصفحات، راجع الحصول على بيانات مجمعة أو عناصر أو نتائج باستخدام ترقيم الصفحات

الإجراء: متنوع
runtimeConfiguration.secureData.properties صفيف في العديد من المشغلات والإجراءات، تخفي هذه الإعدادات المدخلات أو المخرجات أو كليهما من محفوظات تشغيل تطبيق المنطق.

لمعرفة المزيد حول حماية هذه البيانات، راجع إخفاء المدخلات والمخرجات من محفوظات التشغيل.

معظم المشغلات والإجراءات
runtimeConfiguration.staticResult كائن JSON بالنسبة للإجراءات التي تدعم إعداد النتيجة الثابتة وتقوم بتشغيله، يحتوي الكائن على staticResult السمات التالية:

- name، الذي يشير إلى اسم تعريف النتيجة الثابتة للإجراء الحالي، والذي يظهر داخل السمة في سمة سير عمل تطبيق المنطق staticResultsdefinition . لمزيد من المعلومات، راجع النتائج الثابتة - مرجع المخطط للغة تعريف سير العمل.

- staticResultOptions، الذي يحدد ما إذا كانت النتائج الثابتة للإجراء Enabled الحالي أم لا.

لتشغيل النتائج الثابتة، راجع اختبار التطبيقات المنطقية التي تحتوي على بيانات وهمية عن طريق إعداد نتائج ثابتة

الإجراء: متنوع

خيارات التشغيل

يمكنك تغيير السلوك الافتراضي للمشغلات والإجراءات باستخدام الخاصية في تعريف المشغل أو الإجراء operationOptions .

خيار التشغيل النوع الوصف الزناد أو الإجراء
DisableAsyncPattern سلسلة قم بتشغيل الإجراءات المستندة إلى HTTP بشكل متزامن بدلا من عدم التزامن.

لتعيين هذا الخيار، راجع تشغيل الإجراءات بشكل متزامن.

الاجراءات:

أبي كونكشن,
HTTP,
⁩استجابة⁦

IncludeAuthorizationHeadersInOutputs سلسلة بالنسبة للتطبيقات المنطقية التي تمكن Azure Active Directory Open Authentication (Azure AD OAuth) من تخويل الوصول للمكالمات الواردة إلى نقطة نهاية مشغل مستندة إلى الطلب، قم بتضمين Authorization الرأس من الرمز المميز للوصول إلى OAuth في مخرجات المشغل. لمزيد من المعلومات، راجع تضمين رأس "التفويض" في مخرجات مشغل الطلب. مشغلات:

طلب,
HTTP الإخطارات على الويب

Sequential سلسلة قم بتشغيل تكرارات الحلقة "لكل مرة" واحدة تلو الأخرى ، بدلا من الكل في نفس الوقت بالتوازي.

يعمل هذا الخيار بنفس طريقة تعيين الخاصية runtimeConfiguration.concurrency.repetitions إلى 1. يمكنك تعيين أي من الموقعين، ولكن ليس كليهما.

لتعيين هذا الخيار، راجع تشغيل حلقات "لكل منها" بالتتابع.

فعل:

فوريتش

SingleInstance سلسلة قم بتشغيل المشغل لكل مثيل تطبيق منطقي بالتتابع وانتظر حتى ينتهي التشغيل النشط سابقا قبل تشغيل مثيل تطبيق المنطق التالي.

يعمل هذا الخيار بنفس طريقة تعيين الخاصية runtimeConfiguration.concurrency.runs إلى 1. يمكنك تعيين أي من الموقعين، ولكن ليس كليهما.

لتعيين هذا الخيار، راجع تشغيل المثيلات بالتتابع.

جميع المشغلات
SuppressWorkflowHeaders سلسلة لا ترسل x-ms-* رؤوس بيانات التعريف في الطلبات الصادرة. بشكل افتراضي، تتضمن خدمة Azure Logic Apps رؤوس بيانات تعريف إضافية مع البادئة x-ms- في اسم الرأس كجزء من الطلبات الصادرة. ومع ذلك، لن تقبل بعض الخدمات القديمة الطلبات ذات الرؤوس الإضافية غير المعروفة، مما يؤدي إلى فشل الطلبات. الاجراءات:

HTTP,
وظيفة,
APIManagement

SuppressWorkflowHeadersOnResponse سلسلة لا ترسل x-ms-* رؤوس بيانات التعريف استجابة لطلبات المشغل الواردة. بشكل افتراضي، ترسل خدمة Azure Logic Apps استجابات للطلبات الواردة التي تتضمن رؤوس بيانات تعريف إضافية مع البادئة x-ms- في اسم الرأس. ومع ذلك، لن تقبل بعض الخدمات القديمة الطلبات أو الردود ذات الرؤوس الإضافية غير المعروفة، مما يؤدي إلى فشل الطلبات. مشغلات:

طلب,
HTTP الإخطارات على الويب

تغيير تزامن المشغل

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

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

فيما يلي بعض الاعتبارات التي يجب مراجعتها قبل تمكين التزامن على المشغل:

  • لا يمكنك تعطيل التزامن بعد تمكين عنصر تحكم التزامن .

  • عند تمكين التزامن ، يتم تقليل حد SplitOn بشكل كبير لفصل المصفوفات. إذا تجاوز عدد العناصر هذا الحد، تعطيل إمكانية SplitOn.

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

    • لمقاطعة هذه الحالة، قم بإلغاء أقدم المثيلات التي لا تزال قيد التشغيل.

      1. في قائمة تطبيق المنطق، حدد نظرة عامة.

      2. في القسم محفوظات التشغيل، حدد أقدم مثيل لا يزال قيد التشغيل، على سبيل المثال:

        Select earliest running instance

        تلميح

        لعرض المثيلات التي لا تزال قيد التشغيل فقط، افتح قائمة الكل ، وحدد قيد التشغيل.

      3. ضمن تشغيل تطبيق Logic ، حدد إلغاء التشغيل.

        Find earliest running instance

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

      1. في تطبيق المنطق، في الإجراء الذي تريد إضافة مهلة إليه، في الزاوية العلوية اليسرى، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.

        Open action settings

      2. ضمن المهلة، حدد مدة المهلة بتنسيق ISO 8601.

        Specify timeout duration

  • لتشغيل تطبيقك المنطقي بالتتابع، قم بتعيين تزامن المشغل إما 1 باستخدام محرر طريقة عرض التعليمات البرمجية أو المصمم. تأكد من عدم تعيين خاصية operationOptions المشغل أيضا في SingleInstance محرر طريقة عرض التعليمات البرمجية. وإلا، فستصلك رسالة خطأ في التحقق من الصحة. لمزيد من المعلومات، راجع تشغيل المثيلات بالتتابع.

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

في تعريف المشغل الأساسي، أضف runtimeConfiguration.concurrency.runs الخاصية، وقم بتعيين القيمة استنادا إلى حدود تزامن المشغل. لتشغيل سير العمل بالتتابع، قم بتعيين قيمة الخاصية إلى 1.

يحد هذا المثال من عمليات التشغيل المتزامنة إلى 10 مثيلات:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 10
      }
   }
}

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

التحرير في مصمم التطبيقات المنطقية

  1. في الزاوية العلوية اليسرى للمشغل، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.

  2. ضمن التحكم في التزامن، قم بتعيين الحد إلى تشغيل.

  3. اسحب شريط تمرير درجة التوازي إلى القيمة التي تريدها. لتشغيل تطبيقك المنطقي بالتتابع، اسحب قيمة شريط التمرير إلى 1.

تغيير التزامن "لكل منهما"

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

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

ملاحظة

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

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

في التعريف الأساسي "لكل منهما"، أضف الخاصية أو حدثها runtimeConfiguration.concurrency.repetitions ، والتي يمكن أن يكون لها قيمة تتراوح من 1 و 50.

فيما يلي مثال يحد من عمليات التشغيل المتزامنة إلى 10 تكرارات:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 10
      }
   }
}

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

التحرير في مصمم التطبيقات المنطقية

  1. في لكل إجراء، من الزاوية العلوية اليسرى، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.

  2. ضمن التحكم في التزامن ، قم بتعيين التحكم في التزامن إلى تشغيل.

  3. اسحب شريط تمرير درجة التوازي إلى القيمة التي تريدها. لتشغيل تطبيقك المنطقي بالتتابع، اسحب قيمة شريط التمرير إلى 1.

تغيير حد تشغيل الانتظار

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

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

لا يمكنك فقط تغيير الحد الافتراضي لتزامن المشغل ، ولكن يمكنك أيضا تغيير الحد الافتراضي لعمليات تشغيل الانتظار. في تعريف المشغل الأساسي، أضف runtimeConfiguration.concurrency.maximumWaitingRuns الخاصية، التي يمكن أن يكون لها قيمة تتراوح من 1 إلى 100.

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "maximumWaitingRuns": 50
      }
   }
}

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

تشغيل المثيلات بالتتابع

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

ملاحظة

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

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

في تعريف المشغل، قم بتعيين أي من هاتين الخاصيتين، ولكن ليس كليهما.

قم بتعيين الخاصية runtimeConfiguration.concurrency.runs إلى 1:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 1
      }
   }
}

-أو-

قم بتعيين الخاصية operationOptions إلى SingleInstance:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "operationOptions": "SingleInstance"
}

لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيلوخيارات التشغيل.

التحرير في مصمم التطبيقات المنطقية

  1. في الزاوية العلوية اليسرى للمشغل، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.

  2. ضمن التحكم في التزامن، قم بتعيين الحد إلى تشغيل.

  3. اسحب شريط تمرير درجة التوازي إلى الرقم 1.

تشغيل حلقات "لكل منها" بالتتابع

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

ملاحظة

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

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

في تعريف الإجراء، قم بتعيين أي من هاتين الخاصيتين، ولكن ليس كليهما.

قم بتعيين الخاصية runtimeConfiguration.concurrency.repetitions إلى 1:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 1
      }
   }
}

-أو-

قم بتعيين الخاصية operationOptions إلى Sequential:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "operationOptions": "Sequential"
}

لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيلوخيارات التشغيل.

التحرير في مصمم التطبيقات المنطقية

  1. في الزاوية العلوية اليسرى لكل إجراء، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.

  2. ضمن التحكم في التزامن ، قم بتعيين التحكم في التزامن إلى تشغيل.

  3. اسحب شريط تمرير درجة التوازي إلى الرقم 1.

تشغيل الإجراءات في نمط عملية متزامنة

بشكل افتراضي، يتبع إجراء HTTP وإجراءات APIConnection في Azure Logic Apps نمط التشغيل القياسي غير المتزامن، بينما يتبع إجراء الاستجابة نمط التشغيل المتزامن. يحدد النمط غير المتزامن أنه بعد استدعاء إجراء أو إرسال طلب إلى نقطة النهاية أو الخدمة أو النظام أو واجهة برمجة التطبيقات المحددة، يقوم المستلم على الفور بإرجاع استجابة "202 مقبولة ". يؤكد هذا الرمز أن المستلم قبل الطلب ولكنه لم ينته من المعالجة. يمكن أن تتضمن الاستجابة رأسا location يحدد عنوان URL ومعرف تحديث يمكن للمتصل استخدامه لاستطلاع حالة الطلب غير المتزامن أو التحقق منه باستمرار حتى يتوقف المستلم عن المعالجة ويعيد استجابة نجاح " 200 OK" أو استجابة أخرى غير 202. لمزيد من المعلومات، راجع تكامل الخدمات المصغرة غير المتزامنة يفرض استقلالية الخدمات المصغرة.

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

    1. على شريط عنوان إجراء HTTP، حدد زر علامات الحذف (...) الذي يفتح إعدادات الإجراء.

    2. ابحث عن إعداد النمط غير المتزامن .

  • في تعريف تدوين كائن جافا سكريبت الأساسي (JSON) الخاص بالإجراء، يتبع إجراء HTTP وإجراءات APIConnection ضمنيا نمط التشغيل غير المتزامن.

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

في هذه الحالات، يمكنك تشغيل إجراء بشكل متزامن باستخدام الخيارات التالية:

إيقاف تشغيل إعداد النمط غير المتزامن

  1. في مصمم تطبيقات المنطق، على شريط عنوان الإجراء، حدد زر علامات الحذف (...)، الذي يفتح إعدادات الإجراء.

  2. ابحث عن إعداد النمط غير المتزامن ، وقم بتشغيل الإعداد إلى إيقاف التشغيل إذا تم تمكينه، وحدد تم.

    Turn off

تعطيل النمط غير المتزامن في تعريف JSON الخاص بالإجراء

في تعريف JSON الأساسي للإجراء، أضف الخاصية "operationOptions" واضبطها ضمن "DisableAsyncPattern" قسم الإجراء "inputs" ، على سبيل المثال:

"<some-long-running-action>": {
   "type": "Http",
   "inputs": { "<action-inputs>" },
   "operationOptions": "DisableAsyncPattern",
   "runAfter": {}
}

مصادقة المشغلات والإجراءات

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

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