إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يصف هذا المرجع الأنواع العامة المستخدمة لتحديد المشغلات والإجراءات في تعريف سير العمل الأساسي لتطبيقك المنطقي، والذي تم وصفه والتحقق من صحته بواسطة لغة تعريف سير العمل. للعثور على مشغلات وإجراءات موصل معينة يمكنك استخدامها في تطبيقات المنطق، راجع القائمة ضمن نظرة عامة على الموصلات.
نظرة عامة على المشغلات
يتضمن كل سير عمل مشغلاً، يحدد المكالمات التي تنشئ وتبدأ سير العمل. فيما يلي فئات المشغل العامة:
مشغل الاستقصاء ، الذي يتحقق من نقطة نهاية الخدمة على فترات منتظمة
مشغل دفع ، الذي ينشئ اشتراكا في نقطة نهاية ويوفر عنوان 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>"
},
Required
| Value | Type | Description |
|---|---|---|
| < اسم المشغل> | String | اسم المشغل |
| < نوع المشغل> | String | نوع المشغل مثل "Http" أو "ApiConnection" |
| < مدخلات المشغل> | كائن JSON | المدخلات التي تحدد سلوك المشغل |
| < وحدة زمنية> | String | وحدة الوقت التي تصف عدد مرات إطلاق المشغل: "الثانية"، "الدقيقة"، "الساعة"، "اليوم"، "الأسبوع"، "الشهر" |
| < عدد الوحدات الزمنية> | Integer | قيمة تحدد عدد مرات تشغيل المشغل استنادا إلى التردد، وهو عدد الوحدات الزمنية التي يجب انتظارها حتى يتم تشغيل المشغل مرة أخرى فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية: - الشهر: 1-16 شهراً - اليوم: 1-500 يوم - الساعة: 1-12،000 ساعة - الدقيقة: 1-72،000 دقيقة - الثانية: 1-9،999،999 ثانية على سبيل المثال، إذا كان الفاصل الزمني هو 6، وكان التكرار "شهر"، يكون التكرار كل 6 أشهر. |
Optional
| Value | Type | Description |
|---|---|---|
| < صفيف بشروط> | Array | صفيف يحتوي على شرط واحد أو أكثر يحدد ما إذا كان سيتم تشغيل سير العمل. متاح فقط للمشغلات. |
| < خيارات تكوين وقت التشغيل> | كائن JSON | يمكنك تغيير سلوك وقت التشغيل عن طريق تعيين خصائص runtimeConfiguration. لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل. |
| < splitOn-expression> | String | بالنسبة للمشغلات التي ترجع صفيفاً، يمكنك تحديد تعبير يقوم بتقسيم عناصر الصفيف أو تصحيحها إلى مثيلات سير عمل متعددة للمعالجة. |
| < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
قائمة أنواع الزناد
يحتوي كل نوع من أنواع المشغل على واجهة ومدخلات مختلفة تحدد سلوك المشغل.
المشغلات المضمنة
| نوع المشغل | Description |
|---|---|
| HTTP | التحقق من أي نقطة نهاية أو استقصاءها . يجب أن تتوافق نقطة النهاية هذه مع عقد بدء محدد إما باستخدام 202 نمط غير متزامن أو عن طريق إرجاع صفيف. |
| HTTPWebhook | ينشئ نقطة نهاية قابلة للاستدعاء للتطبيق المنطقي الخاص بك ولكنه يستدعي عنوان URL المحدد للتسجيل أو إلغاء التسجيل. |
| Recurrence | الحرائق على أساس جدول زمني محدد. يمكنك تعيين التاريخ والوقت المستقبليين لإطلاق هذا المشغل. بناءً على التكرار، يمكنك أيضاً تحديد الأوقات والأيام لتشغيل سير العمل الخاص بك. |
| Request | ينشئ نقطة نهاية قابلة للاستدعاء لتطبيقك المنطقي وتُعرف أيضاً باسم المشغل "اليدوي". على سبيل المثال، راجع استدعاء مهام سير العمل أو تشغيلها أو تداخلها باستخدام نقاط نهاية HTTP. |
مشغلات API المُدارة
| نوع المشغل | Description |
|---|---|
| ApiConnection | التحقق من نقطة نهاية أو استقصاءها باستخدام واجهات برمجة التطبيقات التي تديرها Microsoft أو "الموصلات". |
| ApiConnectionWebhook | إنشاء نقطة نهاية قابلة للاستدعاء لسير عمل تطبيق المنطق الخاص بك عن طريق استدعاء واجهات برمجة التطبيقات المدارة من قبل Microsoft أو "الموصلات" للاشتراك وإلغاء الاشتراك. |
المشغلات - مرجع مفصل
مشغل APIConnection
يتحقق هذا المشغل أو يستقصي نقطة نهاية باستخدام واجهات برمجة التطبيقات أو "الموصلات" المدارة من قبل 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>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
| None | < APIConnection_trigger_name> | String | اسم المشغل |
| host.connection.name | < اسم الاتصال> | String | اسم الاتصال بواجهة برمجة التطبيقات المُدارة التي يستخدمها سير العمل |
| method | < نوع الأسلوب> | String | أسلوب HTTP للتواصل مع واجهة برمجة التطبيقات المدارة: GET، PUT، POST، PATCH، DELETE |
| path | < عملية واجهة برمجة التطبيقات> | String | عملية API للاتصال |
| recurrence.frequency | < وحدة زمنية> | String | وحدة الوقت التي تصف عدد مرات تشغيل المشغل: الثانية، الدقيقة، الساعة، اليوم، الأسبوع، الشهر |
| recurrence.interval | < عدد الوحدات الزمنية> | Integer | قيمة تحدد عدد مرات تشغيل المشغل استنادا إلى التردد، وهو عدد الوحدات الزمنية التي يجب انتظارها حتى يتم تشغيل المشغل مرة أخرى فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية: - الشهر: 1-16 شهرا - اليوم: 1-500 يوم - الساعة: 1-12,000 ساعة - دقيقة: 1-72000 دقيقة - الثانية: 1-9999999 ثانية على سبيل المثال، إذا كان الفاصل الزمني هو 6، وكان التكرار شهر، فإن التكرار يكون كل 6 أشهر. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
| retryPolicy | < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| queries | < معلمات الاستعلام> | كائن JSON | أي معلمات استعلام لتضمينها مع استدعاء API. على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
| runtimeConfiguration.concurrency.runs | < الحد الأقصى للشواط> | Integer | بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
| runtimeConfiguration.maximumWaitingRuns | < الحد الأقصى لقائمة الانتظار> | Integer | إذا كان سير العمل الخاص بك يشغل بالفعل الحد الأقصى لعدد المثيلات، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. لتغيير الحد الأقصى لعدد المثيلات، حدد قيمة للخاصية runtimeConfiguration.concurrency.runs . ملاحظة: إذا قمت بتعيين |
| splitOn | < splitOn-expression> | String | بالنسبة للمشغلات التي ترجع الصفائف، يشير هذا التعبير إلى الصفيف المراد استخدامها بحيث يمكنك إنشاء مثيل سير عمل وتشغيله لكل عنصر صفيف، بدلاً من استخدام "لكل" حلقة. على سبيل المثال، يمثل هذا التعبير عنصراً في الصفيف يتم إرجاعه داخل محتوى نص المشغل: @triggerbody()?['value'] |
| operationOptions | < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | كائن JSON | رؤوس من الرد |
| body | كائن JSON | الجسد من الاستجابة |
| رمز الحالة | Integer | تعليمة برمجية الحالة من الرد |
Example
يتحقق تعريف المشغل هذا من البريد الإلكتروني كل يوم داخل البريد الوارد لحساب العمل أو المدرسة:
"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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < اسم الاتصال> | String | اسم الاتصال بواجهة برمجة التطبيقات المُدارة التي يستخدمها سير العمل |
| < محتوى النص الأساسي> | كائن JSON | أي محتوى رسالة لإرساله كحمولة إلى واجهة برمجة التطبيقات المُدارة |
Optional
| Value | Type | Description |
|---|---|---|
| < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < معلمات الاستعلام> | كائن JSON | أي معلمات استعلام لتضمينها مع استدعاء واجهة برمجة التطبيقات على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
| < الحد الأقصى للشواط> | Integer | بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
| < الحد الأقصى لقائمة الانتظار> | Integer | عندما يكون سير العمل قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والتي يمكنك تغييرها استنادا إلى الخاصية runtimeConfiguration.concurrency.runs ، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
| < splitOn-expression> | String | بالنسبة للمشغلات التي ترجع الصفائف، يشير هذا التعبير إلى الصفيف المراد استخدامها بحيث يمكنك إنشاء مثيل سير عمل وتشغيله لكل عنصر صفيف، بدلاً من استخدام "لكل" حلقة. على سبيل المثال، يمثل هذا التعبير عنصراً في الصفيف يتم إرجاعه داخل محتوى نص المشغل: @triggerbody()?['value'] |
| < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
Example
يشترك تعريف المشغل هذا في Office 365 Outlook API، ويوفر عنوان URL لرد الاتصال لنقطة نهاية API، وينتظر استجابة نقطة النهاية عند وصول بريد إلكتروني جديد.
"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>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
method |
< نوع الأسلوب> | String | الطريقة المستخدمة لإرسال الطلب الصادر: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
uri |
< HTTP-or-HTTPS-endpoint-URL> | String | عنوان URL لنقطة نهاية HTTP أو HTTPS حيث تريد إرسال الطلب الصادر. الحد الأقصى لحجم السلسلة: 2 كيلوبايت بالنسبة إلى مورد أو خدمة Azure، يتضمن بناء جملة URI هذا معرف المورد والمسار إلى المورد الذي تريد الوصول إليه. |
frequency |
< وحدة زمنية> | String | وحدة الوقت التي تصف عدد مرات إطلاق المشغل: "الثانية"، "الدقيقة"، "الساعة"، "اليوم"، "الأسبوع"، "الشهر" |
interval |
< عدد الوحدات الزمنية> | Integer | قيمة تحدد عدد مرات تشغيل المشغل استنادا إلى التردد، وهو عدد الوحدات الزمنية التي يجب انتظارها حتى يتم تشغيل المشغل مرة أخرى فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية: - الشهر: 1-16 شهراً - اليوم: 1-500 يوم - الساعة: 1-12،000 ساعة - الدقيقة: 1-72،000 دقيقة - الثانية: 1-9،999،999 ثانية على سبيل المثال، إذا كان الفاصل الزمني هو 6، وكان التكرار "شهر"، يكون التكرار كل 6 أشهر. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< محتوى العنوان> | كائن JSON | أي رؤوس تحتاج إلى تضمينها مع الطلب على سبيل المثال، لتعيين اللغة والنوع: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< معلمات الاستعلام> | كائن JSON | أي معلمات استعلام تحتاج إلى استخدامها في الطلب على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى الطلب. |
body |
< محتوى النص الأساسي> | كائن JSON | محتوى الرسالة المراد إرسالها كحمولة مع الطلب |
authentication |
< قيم نوع المصادقة والخصائص> | كائن JSON | نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة للمكالمات الصادرة. بعد برنامج الجدولة، يتم دعم خاصية authority. في حالة عدم تحديدها، تكون القيمة الافتراضية هي https://management.azure.com/، ولكن يمكنك استخدام قيمة مختلفة. |
retryPolicy > type |
< سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
runs |
< الحد الأقصى للشواط> | Integer | بشكل افتراضي، يتم تشغيل مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
maximumWaitingRuns |
< الحد الأقصى لقائمة الانتظار> | Integer | عندما يكون سير العمل قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والتي يمكنك تغييرها استنادا إلى الخاصية runtimeConfiguration.concurrency.runs ، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
operationOptions |
< خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
Outputs
| Element | Type | Description |
|---|---|---|
headers |
كائن JSON | رؤوس من الرد |
body |
كائن JSON | الجسد من الاستجابة |
status code |
Integer | تعليمة برمجية الحالة من الرد |
متطلبات الطلبات الواردة
للعمل بشكل جيد مع تطبيقك المنطقي، يجب أن تتوافق نقطة النهاية مع نمط أو عقد تشغيل محدد، وأن تتعرف على خصائص الاستجابة هذه:
| Property | Required | Description |
|---|---|---|
| رمز الحالة | Yes | يبدأ تعليمة برمجية الحالة "200 OK" تشغيل. أي رمز حالة آخر لا يبدأ تشغيل. |
| عنوان إعادة المحاولة بعد | No | عدد الثواني حتى يستقصي تطبيقك المنطقي نقطة النهاية مرة أخرى |
| عنوان الموقع | No | عنوان URL المطلوب الاتصال به في فترة الاقتراع التالية. إذا لم يتم تحديده، فسيتم استخدام عنوان URL الأصلي. |
أمثلة سلوكيات لطلبات مختلفة
| رمز الحالة | أعد المحاولة بعد | Behavior |
|---|---|---|
| 200 | {none} | قم بتشغيل سير العمل، ثم تحقق مرة أخرى للحصول على مزيد من البيانات بعد التكرار المحدد. |
| 200 | 10 ثوان | قم بتشغيل سير العمل، ثم تحقق مرة أخرى للحصول على مزيد من البيانات بعد 10 ثوانٍ. |
| 202 | 60 ثانية | لا تقم بتشغيل سير العمل. المحاولة التالية تحدث في دقيقة واحدة، مع مراعاة التكرار المحدد. إذا كان التكرار المحدد أقل من دقيقة واحدة، فستكون الأولوية لرأس إعادة المحاولة. خلاف ذلك، يتم استخدام التكرار المحدد. |
| 400 | {none} | طلب غير صالح، لا تقم بتشغيل سير العمل. إذا لم يتم تحديد retryPolicy، فسيتم استخدام النهج الافتراضية. بعد الوصول إلى عدد مرات إعادة المحاولة، يتحقق المشغل مرة أخرى من البيانات بعد التكرار المحدد. |
| 500 | {none} | خطأ في الخادم، لا تقم بتشغيل سير العمل. إذا لم يتم تحديد 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" .
Required
| Value | Type | Description |
|---|---|---|
| < نوع الأسلوب> | String | طريقة HTTP المستخدمة في طلب الاشتراك: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
| < عنوان URL للاشتراك في نقطة النهاية> | String | عنوان URL لنقطة النهاية حيث يتم إرسال طلب الاشتراك |
Optional
| Value | Type | Description |
|---|---|---|
| < نوع الأسلوب> | String | طريقة HTTP المستخدمة في طلب الإلغاء: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
| < عنوان URL لإلغاء الاشتراك في نقطة النهاية> | String | عنوان URL لنقطة النهاية حيث يتم إرسال طلب الإلغاء |
| < محتوى النص الأساسي> | String | أي محتوى رسالة لإرساله في طلب الاشتراك أو الإلغاء |
| < نوع المصادقة> | كائن JSON | نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة للمكالمات الصادرة. |
| < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < الحد الأقصى للشواط> | Integer | بشكل افتراضي، تعمل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
| < الحد الأقصى لقائمة الانتظار> | Integer | عندما يكون سير العمل قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والتي يمكنك تغييرها استنادا إلى الخاصية runtimeConfiguration.concurrency.runs ، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
| < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | كائن JSON | رؤوس من الرد |
| body | كائن JSON | الجسد من الاستجابة |
| status code | Integer | تعليمة برمجية الحالة من الرد |
Example
ينشئ هذا المشغل اشتراكاً في نقطة النهاية المحددة، ويوفر عنوان 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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < وحدة زمنية> | String | وحدة الوقت التي تصف عدد مرات إطلاق المشغل: "الثانية"، "الدقيقة"، "الساعة"، "اليوم"، "الأسبوع"، "الشهر" |
| < عدد الوحدات الزمنية> | Integer | قيمة تحدد عدد مرات تشغيل المشغل استنادا إلى التردد، وهو عدد الوحدات الزمنية التي يجب انتظارها حتى يتم تشغيل المشغل مرة أخرى فيما يلي الحد الأدنى والحد الأقصى للفواصل الزمنية: - الشهر: 1-16 شهراً - اليوم: 1-500 يوم - الساعة: 1-12،000 ساعة - الدقيقة: 1-72،000 دقيقة - الثانية: 1-9،999،999 ثانية على سبيل المثال، إذا كان الفاصل الزمني هو 6، وكان التكرار "شهر"، يكون التكرار كل 6 أشهر. |
Optional
| Value | Type | Description |
|---|---|---|
| < start-date-time-with-format-YYYY-MM-DDThh:mm:ss> | String | تاريخ البدء ووقته بهذا التنسيق: YYYY-MM-DDThh:mm:ss إذا قمت بتحديد منطقة زمنية -or- YYYY-MM-DDThh:mm:ssZ إذا لم تحدد منطقة زمنية لذلك على سبيل المثال، إذا كنت تريد 18 سبتمبر 2017 الساعة 2:00 مساءً، فحدد "2017-09-18T14: 00: 00" وحدد منطقة زمنية مثل "توقيت المحيط الهادي"، أو حدد "2017-09- 18T14: 00: 00Z "دون منطقة زمنية. ملاحظة: يبلغ الحد الأقصى لوقت البدء 49 عاماً في المستقبل ويجب أن يتبع مواصفات وقت التاريخ ISO 8601 في تنسيق وقت التاريخ UTC، ولكن دون تعويض التوقيت العالمي المتفق عليه. إذا لم تحدد منطقة زمنية، يجب إضافة الحرف "Z" في النهاية دون أي مسافات. يشير هذا الحرف "Z" إلى الوقت البحري المكافئ. بالنسبة للجداول الزمنية البسيطة، يكون وقت البدء هو أول ظهور، بينما بالنسبة للجداول المعقدة، لا يتم إطلاق المشغل في وقت أقرب من وقت البدء. لمزيد من المعلومات بشأن تواريخ وأوقات البدء، راجع إنشاء وجدولة المهام قيد التشغيل بانتظام. |
| < المنطقة الزمنية> | String | ينطبق فقط عند تحديد وقت بدء لأن هذا المشغل لا يقبل إزاحة UTC. حدد المنطقة الزمنية التي تريد تطبيقها. |
| < علامة ساعة واحدة أو أكثر> | عدد صحيح أو مجموعة صحيحة | إذا حددت "يوم" أو "أسبوع" لـ frequency، يمكنك تحديد عدد صحيح واحد أو أكثر من 0 إلى 23، مفصولاً بفاصلات، كساعات اليوم التي تريد فيها تشغيل سير العمل. على سبيل المثال، إذا حددت "10" و"12" و"14"، فستحصل على 10 صباحاً و12 ظهراً و2 ظهراً كعلامات ساعة. |
| < علامة دقيقة واحدة أو أكثر> | عدد صحيح أو مجموعة صحيحة | إذا حددت "يوم" أو "أسبوع" لـ frequency، يمكنك تحديد عدد صحيح واحد أو أكثر من 0 إلى 59، مفصولاً بفاصلات، كدقائق الساعة التي تريد فيها تشغيل سير العمل. على سبيل المثال، يمكنك تحديد "30" كعلامة دقيقة واستخدام المثال السابق لساعات اليوم، تحصل على 10:30 صباحاً و12:30 ظهراً و2:30 مساءً. |
| weekDays | سلسلة أو مجموعة سلسلة | إذا حددت "أسبوع" لـ frequency، يمكنك تحديد يوم واحد أو أكثر، مفصولاً بفواصل، عندما تريد تشغيل سير العمل: "الاثنين"، "الثلاثاء"، "الأربعاء"، "الخميس"، "الجمعة"، "السبت والأحد" |
| < الحد الأقصى للشواط> | Integer | بشكل افتراضي، تعمل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
| < الحد الأقصى لقائمة الانتظار> | Integer | عندما يكون سير العمل قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والتي يمكنك تغييرها استنادا إلى الخاصية runtimeConfiguration.concurrency.runs ، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
| < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية 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 الذي يصف الحمولة أو المدخلات التي يتلقاها المشغل من الطلب الوارد ويتحقق منها. يسهل المخطط أيضاً الرجوع إلى خصائص المشغل من الإجراءات اللاحقة في سير العمل.
Note
كان الاسم الأصلي لمشغل الطلبيدويا، والذي قد يستمر في الظهور في بعض الأماكن. تم تغيير هذا الاسم لإنشاء المزيد من التناسق حول نوع نمط سير العمل الذي تستخدم المشغل لإنشائه.
لاستدعاء هذا المشغل، يجب عليك استخدام listCallbackUrl API، الموصوفة في Workflow Service REST API. لمعرفة كيفية استخدام هذا المشغل كنقطة نهاية HTTP، راجع استدعاء مهام سير العمل أو تشغيلها أو تداخلها مع نقاط نهاية HTTP.
"Request": {
"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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < اسم الخاصية> | String | اسم الخاصية في مخطط JSON، الذي يصف الحمولة |
| < نوع الخاصية> | String | نوع الخاصية |
Optional
| Value | Type | Description |
|---|---|---|
| < نوع الأسلوب> | String | الطريقة التي يجب أن تستخدمها الطلبات الواردة لاستدعاء التطبيق المنطقي الخاص بك: "GET"، "PUT"، "POST"، "PATCH"، "DELETE" |
| < مسار نسبي للمعلمة المقبولة> | String | المسار النسبي للمعلمة التي يمكن أن يقبلها عنوان URL لنقطة النهاية |
| < الخصائص المطلوبة> | Array | خاصية واحدة أو أكثر تتطلب قيماً |
| < الحد الأقصى للشواط> | Integer | بشكل افتراضي، تعمل جميع مثيلات سير العمل في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن المشغل. |
| < الحد الأقصى لقائمة الانتظار> | Integer | عندما يكون سير العمل قيد التشغيل بالفعل الحد الأقصى لعدد المثيلات، والتي يمكنك تغييرها استنادا إلى الخاصية runtimeConfiguration.concurrency.runs ، يتم وضع أي عمليات تشغيل جديدة في قائمة الانتظار هذه حتى الحد الافتراضي. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
| < خيار التشغيل> | String | يمكنك تغيير السلوك الافتراضي عن طريق تعيين خاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
Example
يحدد هذا المشغل أن الطلب الوارد يجب أن يستخدم طريقة HTTP POST لاستدعاء المشغل ويتضمن مخططاً يتحقق من صحة الإدخال من الطلب الوارد:
"Request": {
"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))
تشغيل سير عمل متعدد على صفيف
في السيناريوهات التي يستخدم فيها سير العمل مشغلا يتلقى صفائف للمعالجة، قد يستغرق أحيانا استخدام لكل تكرار حلقي وقتا طويلا. لتسريع المعالجة، أحد الخيارات هو إنشاء فروع متوازية. أو، إذا كان المشغل يدعم التصحيح، يمكنك أن يكون المشغل مقسما بين عناصر الصفيف وتشغيل مثيل سير عمل منفصل لكل عنصر صفيف. هذا الخيار مفيد، على سبيل المثال، عندما تريد استقصاء نقطة نهاية قد ترجع عناصر جديدة متعددة بين فواصل الاستقصاء.
لا تدعم هذه الإمكانية سوى المشغلات التي يمكنها قبول الصفائف والصفائف المرجعة مثل الطلب أو HTTP أو ناقل خدمة Microsoft Azure أو Office Outlook 365. بالنسبة لهذه المشغلات، في مصمم سير العمل، يمكنك تشغيل إعداد Split on الذي يضيف الخاصية splitOn إلى تعريف المشغل.
Note
إذا كان ملف Swagger الخاص بالمشغل يصف حمولة عبارة عن صفيف، splitOn تتم إضافة الخاصية تلقائيا إلى تعريف المشغل الخاص بك. إذا لم يكن الأمر كما يمكن للمشغل قبول الصفائف، يمكنك إضافة الخاصية إلى حمولة الاستجابة التي تحتوي على الصفيف الذي تريد إلغاء خصمه.
قبل استخدام إمكانية الخصم، راجع الاعتبارات التالية:
إذا تم تشغيل تزامن المشغل أيضا، يتم تقليل حد الانقسام بشكل كبير. إذا تجاوز عدد العناصر هذا الحد، فلن تتوفر إمكانية Split on .
لا تعمل إمكانية Split on مع نمط الاستجابة المتزامن. إذا كان سير العمل يستخدم إجراء الاستجابة وقم بتشغيل الإعداد Split on يعمل بشكل غير متزامن ويرسل استجابة
202 ACCEPTEDعلى الفور.يوجد حد لعدد عناصر الصفيف التي يمكن ل Split on معالجتها في تشغيل سير عمل واحد. لمزيد من المعلومات، راجع حدود التكرار الحلقي والتكرارات.
إذا قمت بإعداد التصحيح من خلال تعريف المشغل باستخدام الخاصية
splitOn، فلا يمكنك الرجوع مباشرة إلى الخصائص الموجودة خارج الصفيف أو الوصول إليها. لتجنب حالات الفشل، قبل المرجع مع?عامل التشغيل. للحصول على أمثلة، راجع تشغيل التصحيح في تعريف المشغل.
تشغيل التحجيم من خلال المصمم
اتبع هذه الخطوات في مصمم سير العمل لإعداد التصحيح على مشغل حيث يكون مدعوما:
في [مدخل Azure]، افتح مورد تطبيق المنطق الخاص بك.
افتح سير العمل في المصمم.
في المصمم، حدد المشغل الذي يدعم التصحيح لفتح جزء معلومات المشغل.
في علامة التبويب الإعدادات ، ضمن عام، ابحث عن الإعداد تقسيم على ، وغير الإعداد إلى تشغيل إذا لم يكن قيد التشغيل.
تشغيل التصحيح في تعريف المشغل
تعالج بعض المشغلات الصفائف، ولكن الإعداد Split on غير متوفر من خلال المصمم. لمثل هذه المشغلات، اتبع الخطوات التالية لإضافة الخاصية splitOn في تعريف المشغل:
على سبيل المثال، افترض أن سير العمل الخاص بك يستخدم مشغل HTTP لاستدعاء واجهة برمجة التطبيقات ويحصل على الاستجابة التالية:
{
"Status": "Succeeded",
"Rows": [
{
"id": 938109380,
"name": "customer-name-one"
},
{
"id": 938109381,
"name": "customer-name-two"
}
]
}
إذا كان سير العمل الخاص بك يحتاج فقط إلى المحتوى من Rows الصفيف، يمكنك إضافة الخاصية وإعدادها splitOn في تعريف المشغل كما هو موضح في المثال التالي:
"HTTP_trigger_debatch": {
"type": "Http",
"inputs": {
"uri": "https://mydomain.com/myAPI",
"method": "GET"
},
"recurrence": {
"frequency": "Second",
"interval": 1
},
"splitOn": "@triggerBody()?.Rows"
}
Note
تذكر أنه إذا كنت تستخدم الخاصية splitOn ، فلا يمكنك الوصول مباشرة إلى الخصائص الموجودة خارج الصفيف أو الرجوع إليها. لتجنب حالات الفشل، استخدم ? عامل التشغيل كما هو موضح في الأمثلة.
يمكن لتعريف سير العمل أيضا استخدام splitOn و @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>"
},
Required
| Value | Type | Description |
|---|---|---|
| < اسم الإجراء> | String | اسم العمل |
| < نوع الإجراء> | String | نوع الإجراء، على سبيل المثال، "Http" أو "ApiConnection" |
| < اسم الإدخال> | String | اسم الإدخال الذي يحدد سلوك الإجراء |
| < قيمة الإدخال> | Various | قيمة الإدخال، والتي يمكن أن تكون سلسلة وعدد صحيح وعنصر JSON وما إلى ذلك |
| < حالة المشغل أو الإجراء السابق> | كائن JSON | الاسم والحالة الناتجة للمشغل أو الإجراء الذي يجب تشغيله على الفور قبل أن يتم تشغيل هذا الإجراء الحالي |
Optional
| Value | Type | Description |
|---|---|---|
| < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < خيارات تكوين وقت التشغيل> | كائن JSON | بالنسبة لبعض الإجراءات، يمكنك تغيير سلوك الإجراء في وقت التشغيل عن طريق تعيين خصائص runtimeConfiguration. لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل. |
| < خيار التشغيل> | String | بالنسبة لبعض الإجراءات، يمكنك تغيير السلوك الافتراضي عن طريق تعيين الخاصية operationOptions. لمزيد من المعلومات، راجع خيارات العملية. |
قائمة أنواع الإجراءات
فيما يلي بعض أنواع الإجراءات الشائعة الاستخدام:
أنواع الإجراءات المضمنة مثل هذه الأمثلة والمزيد:
HTTP لاستدعاء نقاط النهاية عبر HTTP أو HTTPS
الاستجابة للطلبات
تنفيذ تعليمة JavaScript البرمجية لتشغيل مقتطفات تعليمة JavaScript البرمجية
دالة لاستدعاء Azure Functions
إجراءات عملية البيانات مثل الانضماموإنشاءوجدولوتحديد وغيرها من الإجراءات التي تنشئ البيانات أو تحولها من مدخلات مختلفة
سير العمل لاستدعاء سير عمل تطبيق منطقي آخر
أنواع إجراءات واجهة برمجة التطبيقات المُدارة مثل ApiConnection وApiConnectionWebHook التي تستدعي موصلات وواجهات برمجة تطبيقات متنوعة تديرها Microsoft، لـ مثال، Azure Service Bus وOffice 365 Outlook وPower BI وAzure Blob Storage وOneDrive وGitHub والمزيد
التحكم في أنواع إجراءات سير العمل مثل If، Foreach، Switchو النطاق وحتى، والتي تحتوي على إجراءات أخرى وتساعدك على تنظيم تنفيذ سير العمل
الإجراءات المضمنة
| نوع الإجراء | Description |
|---|---|
| Compose | لإنشاء مخرجات فردية من المدخلات، والتي يمكن أن يكون لها أنواع مختلفة. |
| تنفيذ تعليمة JavaScript البرمجية | قم بتشغيل مقتطفات تعليمات JavaScript البرمجية التي تناسب معايير محددة. للحصول على متطلبات التعليمة البرمجية ومزيد من المعلومات، راجع إضافة وتشغيل مقتطفات التعليمة البرمجية مع التعليمة البرمجية المضمنة. |
| Function | يستدعي وظيفة Azure. |
| HTTP | يستدعي نقطة نهاية HTTP. |
| Join | يُنشئ سلسلة من جميع العناصر في صفيف ويفصل بين تلك العناصر بحرف محدد. |
| تحليل JSON | ينشئ رموزاً سهلة الاستخدام من خصائص في محتوى JSON. يمكنك بعد ذلك الرجوع إلى تلك الخصائص من خلال تضمين الرموز المميزة في التطبيق المنطقي الخاص بك. |
| Query | ينشئ صفيفاً من عناصر في صفيف آخر بناءً على شرط أو عامل تصفية. |
| Response | ينشئ رداً على مكالمة واردة أو طلب. |
| Select | يُنشئ صفيفاً بعناصر JSON بتحويل العناصر من صفيف آخر بناءً على الخريطة المحددة. |
| Table | ينشئ جدول CSV أو HTML من صفيف. |
| Terminate | يوقف سير عمل نشط. |
| Wait | إيقاف سير العمل مؤقتاً لمدة محددة أو حتى التاريخ والوقت المحددين. |
| Workflow | يداخل سير عمل داخل سير عمل آخر. |
إجراءات API المُدارة
| نوع الإجراء | Description |
|---|---|
| ApiConnection | استدعاء نقطة نهاية HTTP باستخدام واجهة برمجة تطبيقات تديرها Microsoft. |
| ApiConnectionWebhook | يعمل مثل HTTP Webhook ولكنه يستخدم واجهة برمجة تطبيقات تديرها Microsoft. |
التحكم في إجراءات سير العمل
تساعدك هذه الإجراءات في التحكم في تنفيذ سير العمل وتضمين إجراءات أخرى. من خارج إجراء سير عمل التحكم، يمكنك الرجوع مباشرة إلى الإجراءات الموجودة داخل إجراء التحكم في سير العمل. على سبيل المثال، إذا كان لديك إجراء Http داخل نطاق، يمكنك الرجوع إلى التعبير @body('Http') من أي مكان في سير العمل. ومع ذلك، يمكن للإجراءات الموجودة داخل إجراء سير عمل التحكم فقط "تشغيلها بعد" الإجراءات الأخرى الموجودة في نفس بنية مسار عمل التحكم.
| نوع الإجراء | Description |
|---|---|
| ForEach | قم بتشغيل نفس الإجراءات في حلقة لكل عنصر في الصفيف. |
| If | قم بتشغيل الإجراءات بناءً على ما إذا كان الشرط المحدد صحيحاً أم خطأ. |
| Scope | قم بتشغيل الإجراءات بناءً على حالة المجموعة من مجموعة من الإجراءات. |
| Switch | قم بتشغيل الإجراءات المنظمة في حالات عندما تتطابق القيم من التعبيرات أو العناصر أو الرموز المميزة مع القيم المحددة بواسطة كل حالة. |
| Until | قم بتشغيل الإجراءات في حلقة حتى يتحقق الشرط المحدد. |
الإجراءات - مرجع مفصل
إجراء APIConnection
يرسل هذا الإجراء طلب 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < اسم الإجراء> | String | اسم الإجراء الذي قدمه الموصل |
| < اسم واجهة برمجة التطبيقات> | String | اسم API الذي تديره Microsoft والمستخدم للاتصال |
| < نوع الأسلوب> | String | طريقة HTTP لاستدعاء واجهة برمجة التطبيقات: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
| < عملية واجهة برمجة التطبيقات> | String | عملية API للاتصال |
Optional
| Value | Type | Description |
|---|---|---|
| < خصائص الإدخال الخاصة بالإجراءات الأخرى> | كائن JSON | أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد |
| < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < معلمات الاستعلام> | كائن JSON | أي معلمات استعلام لتضمينها مع استدعاء API. على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
| < خصائص خاصة بإجراء آخر> | كائن JSON | أي خصائص أخرى تنطبق على هذا الإجراء المحدد |
Example
يصف هذا التعريف إجراء إرسال بريد إلكتروني لموصل 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" .
Required
| Value | Type | Description |
|---|---|---|
| < اسم الإجراء> | String | اسم الإجراء الذي قدمه الموصل |
| < نوع الأسلوب> | String | طريقة HTTP المستخدمة للاشتراك أو إلغاء الاشتراك من نقطة نهاية: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
| < api-subscribe-URL> | String | URI المراد استخدامه للاشتراك في API |
Optional
| Value | Type | Description |
|---|---|---|
| < عنوان URL لإلغاء الاشتراك في واجهة برمجة التطبيقات> | String | URI المراد استخدامه لإلغاء الاشتراك من API |
| < محتوى العنوان> | كائن JSON | أي رؤوس لإرسالها في الطلب على سبيل المثال، لتعيين اللغة والكتابة على طلب: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < محتوى النص الأساسي> | كائن JSON | أي محتوى رسالة لإرساله في الطلب |
| < نوع المصادقة> | كائن JSON | نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة للمكالمات الصادرة. |
| < سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < معلمات الاستعلام> | كائن JSON | أي معلمات استعلام لتضمينها مع استدعاء واجهة برمجة التطبيقات على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
| < خصائص الإدخال الخاصة بالإجراءات الأخرى> | كائن JSON | أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد |
| < خصائص خاصة بإجراء آخر> | كائن JSON | أي خصائص أخرى تنطبق على هذا الإجراء المحدد |
يمكنك أيضا تحديد حدود على إجراء ApiConnectionWebhook بنفس الطريقة التي تحدد بها حدود HTTP غير المتزامنة.
إنشاء إجراء
ينشئ هذا الإجراء ناتجاً واحداً من مدخلات متعددة، بما في ذلك التعبيرات. يمكن أن يكون لكل من المخرجات والمدخلات أي نوع تدعمه Azure Logic Apps في الأصل، مثل الصفائف وعناصر JSON وXML والثنائي. يمكنك بعد ذلك استخدام ناتج الإجراء في إجراءات أخرى.
"Compose": {
"type": "Compose",
"inputs": "<inputs-to-compose>",
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < مدخلات إلى إنشاء> | Any | المدخلات لإنشاء مخرجات فردية |
المثال 1
يدمج تعريف الإجراء هذا abcdefg مع مسافة لاحقة والقيمة 1234:
"Compose": {
"type": "Compose",
"inputs": "abcdefg 1234",
"runAfter": {}
},
هذا هو الناتج الذي يُنشئه هذا الإجراء:
abcdefg 1234
مثال 2
يدمج تعريف الإجراء هذا متغير سلسلة يحتوي على abcdefg ومتغير عدد صحيح يحتوي على 1234:
"Compose": {
"type": "Compose",
"inputs": "@{variables('myString')}@{variables('myInteger')}",
"runAfter": {}
},
هذا هو الناتج الذي يُنشئه هذا الإجراء:
"abcdefg1234"
قم بتنفيذ إجراء JavaScript Code
يقوم هذا الإجراء بتشغيل قصاصة برمجية تعليمات JavaScript البرمجية وإرجاع النتائج من خلال تعليمة برمجية مميز يمكن للإجراءات اللاحقة في سير العمل الرجوع إليها.
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "<JavaScript-code-snippet>",
"explicitDependencies": {
"actions": [ <preceding-actions> ],
"includeTrigger": true
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < JavaScript-code-snippet> | Varies | تعليمة JavaScript البرمجية الذي تريد تشغيله. للحصول على متطلبات التعليمة البرمجية ومزيد من المعلومات، راجع تشغيل مقتطفات التعليمة البرمجية في مهام سير العمل. في السمة code، يمكن لمقتطف التعليمة البرمجية استخدام عنصر للقراءة فقط workflowContext كإدخال. يحتوي هذا العنصر على خصائص فرعية تمنحك حق الوصول إلى التعليمة البرمجية إلى المخرجات من المشغل وأي إجراءات سابقة في سير عملك. لمزيد من المعلومات بشأن العنصر workflowContext، راجع مشغل الإشارة ونتائج الإجراء باستخدام عنصر workflowContext. |
مطلوب في بعض الحالات
تحدد السمة explicitDependencies أنك تريد تضمين النتائج صراحةً من المشغل أو الإجراءات السابقة أو كليهما كتبعيات لمقتطف التعليمة البرمجية. لمزيد من المعلومات بشأن إضافة هذه التبعيات، راجع إضافة تبعيات كمعلمات إلى إجراء Inline Code.
بالنسبة للسمة includeTrigger، يمكنك تحديد قيم true أو false.
| Value | Type | Description |
|---|---|---|
| < الإجراءات السابقة> | مصفوفة السلسلة | صفيف بأسماء الإجراء بتنسيق JSON كتبعيات. تأكد من استخدام أسماء الإجراءات التي تظهر في تعريف سير العمل حيث تستخدم أسماء الإجراءات التسطير السفلي (_)، وليس المسافات (" "). |
المثال 1
يؤدي هذا الإجراء إلى تشغيل التعليمة البرمجية التي تحصل على اسم سير عمل التطبيق المنطقي وإرجاع النص "مرحباً بالعالم من <اسم التطبيق المنطقي>" كنتيجة لذلك. في هذا المثال، تشير التعليمة البرمجية إلى اسم سير العمل من خلال الوصول إلى الخاصية 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
يقوم هذا الإجراء بتشغيل التعليمة البرمجية في سير عمل تطبيق منطقي يتم تشغيله عند وصول بريد إلكتروني جديد إلى حساب Outlook. يستخدم سير العمل أيضاً إجراء Office 365 Outlook إرسال بريد إلكتروني للموافقة الذي يعيد توجيه المحتوى من البريد الإلكتروني المستلم مع طلب الموافقة.
يستخرج التعليمة البرمجية عناوين البريد الإلكتروني من خاصية Body لرسالة البريد الإلكتروني، ويعيد العناوين مع قيمة خاصية SelectedOption من إجراء الموافقة. يتضمن الإجراء بشكل صريح إجراء إرسال بريد إلكتروني للموافقة كعنصر تابع في عنصر actions داخل العنصر explicitDependencies.
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "var myResult = /(([^<>()\\[\\]\\\\.,;:\\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(myResult) + \" - \" + 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < معرف دالة Azure> | String | معرّف المورد لوظيفة Azure التي تريد الاتصال بها. فيما يلي تنسيق هذه القيمة: "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Web/sites/<Azure-function-app-name>/functions/<Azure-function-name>" |
| < نوع الأسلوب> | String | أسلوب HTTP لاستخدامه لاستدعاء الدالة: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" إذا لم يتم تحديده، يكون الإعداد الافتراضي هو طريقة "POST". |
Optional
| Value | Type | Description |
|---|---|---|
| < محتوى العنوان> | كائن JSON | أي رؤوس لإرسالها مع المكالمة على سبيل المثال، لتعيين اللغة والكتابة على طلب: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < محتوى النص الأساسي> | كائن JSON | أي محتوى رسالة لإرساله في الطلب |
| < معلمات الاستعلام> | كائن JSON | أي معلمات استعلام لتضمينها مع استدعاء واجهة برمجة التطبيقات على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
| < خصائص الإدخال الخاصة بالإجراءات الأخرى> | كائن JSON | أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد |
| < خصائص خاصة بإجراء آخر> | كائن JSON | أي خصائص أخرى تنطبق على هذا الإجراء المحدد |
عند حفظ تطبيق المنطق الخاص بك، تقوم Azure Logic Apps بإجراء هذه الفحوصات على الدالة المشار إليها:
يجب أن يكون لسير العمل الخاص بك حق الوصول إلى الوظيفة.
يمكن لسير العمل استخدام مشغل HTTP قياسي أو مشغل خطاف ويب JSON عام.
تحصل Azure Logic Apps على عنوان URL للمشغل وتخزنه مؤقتا، والذي يتم استخدامه في وقت التشغيل. ومع ذلك، إذا كانت أي عملية تبطل عنوان URL المخزن مؤقتا، يفشل إجراء الوظيفة في وقت التشغيل. لإصلاح هذه المشكلة، احفظ التطبيق المنطقي مرة أخرى حتى يحصل التطبيق المنطقي على عنوان URL المشغل ويخزنه مؤقتاً مرة أخرى.
لا يمكن تحديد أي مسار للوظيفة.
يُسمح فقط بمستويات المصادقة "الوظيفية" و"المجهولة".
Example
يستدعي تعريف الإجراء هذا وظيفة "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": {}
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
method |
< نوع الأسلوب> | String | الطريقة المستخدمة لإرسال الطلب الصادر: "GET" أو "PUT" أو "POST" أو "PATCH" أو "DELETE" |
uri |
< HTTP-or-HTTPS-endpoint-URL> | String | عنوان URL لنقطة نهاية HTTP أو HTTPS حيث تريد إرسال الطلب الصادر. الحد الأقصى لحجم السلسلة: 2 كيلوبايت بالنسبة إلى مورد أو خدمة Azure، يتضمن بناء جملة URI هذا معرف المورد والمسار إلى المورد الذي تريد الوصول إليه. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< محتوى العنوان> | كائن JSON | أي رؤوس تحتاج إلى تضمينها مع الطلب على سبيل المثال، لتعيين اللغة والنوع: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< معلمات الاستعلام> | كائن JSON | أي معلمات استعلام تحتاج إلى استخدامها في الطلب على سبيل المثال، يضيف العنصر "queries": { "api-version": "2018-01-01" }?api-version=2018-01-01 إلى المكالمة. |
body |
< محتوى النص الأساسي> | كائن JSON | محتوى الرسالة المراد إرسالها كحمولة مع الطلب |
authentication |
< قيم نوع المصادقة والخصائص> | كائن JSON | نموذج المصادقة الذي يستخدمه الطلب لمصادقة الطلبات الصادرة. لمزيد من المعلومات، راجع إضافة مصادقة للمكالمات الصادرة. بعد برنامج الجدولة، يتم دعم خاصية authority. في حالة عدم تحديدها، تكون القيمة الافتراضية هي https://management.azure.com/، ولكن يمكنك استخدام قيمة مختلفة. |
retryPolicy > type |
< سلوك إعادة المحاولة> | كائن JSON | يخصص سلوك إعادة المحاولة للفشل المتقطع، والذي يحتوي على تعليمة برمجية الحالة 408، و429، و5XX، وأي استثناءات تتعلق بالاتصال. لمزيد من المعلومات، راجع نُهج إعادة المحاولة. |
| < خصائص الإدخال الخاصة بالإجراءات الأخرى> | < خاصية الإدخال> | كائن JSON | أي خصائص إدخال أخرى تنطبق على هذا الإجراء المحدد |
| < خصائص خاصة بإجراء آخر> | < قيمة الخاصية> | كائن JSON | أي خصائص أخرى تنطبق على هذا الإجراء المحدد |
Example
يحصل تعريف الإجراء هذا على آخر الأخبار عن طريق إرسال طلب إلى نقطة النهاية المحددة:
"HTTP": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "https://mynews.example.com/latest"
}
}
إجراء الانضمام
ينشئ هذا الإجراء سلسلة من جميع العناصر في صفيف ويفصل بين تلك العناصر بحرف المحدد.
"Join": {
"type": "Join",
"inputs": {
"from": <array>,
"joinWith": "<delimiter>"
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < صفيف> | Array | الصفيف أو التعبير الذي يوفر العناصر المصدر. إذا حددت تعبيراً، فقم بإحاطة هذا التعبير بعلامات اقتباس مزدوجة. |
| < محدد> | سلسلة ذات حرف واحد | الحرف الذي يفصل بين كل عنصر في السلسلة |
Example
لنفترض أن لديك متغير "myIntegerArray" تم إنشاؤه مسبقاً ويحتوي على صفيف عدد صحيح:
[1,2,3,4]
يحصل تعريف الإجراء هذا على القيم من المتغير باستخدام الوظيفة variables() في تعبير وإنشاء هذه السلسلة بهذه القيم، والتي يتم فصلها بفاصلة: "1,2,3,4"
"Join": {
"type": "Join",
"inputs": {
"from": "@variables('myIntegerArray')",
"joinWith": ","
},
"runAfter": {}
}
إجراء تحليل JSON
ينشئ هذا الإجراء حقولا سهلة الاستخدام أو رموزا مميزة من الخصائص في محتوى JSON. يمكنك بعد ذلك الوصول إلى تلك الخصائص في التطبيق المنطقي الخاص بك باستخدام الرموز المميزة بدلاً من ذلك. على سبيل المثال، عندما تريد استخدام إخراج JSON من خدمات مثل Azure Service Bus وAzure Cosmos DB، يمكنك تضمين هذا الإجراء في تطبيقك المنطقي بحيث يمكنك بسهولة الرجوع إلى البيانات في هذا الإخراج.
"Parse_JSON": {
"type": "ParseJson",
"inputs": {
"content": "<JSON-source>",
"schema": { "<JSON-schema>" }
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < مصدر JSON> | كائن JSON | محتوى JSON الذي تريد تحليله |
| < مخطط JSON> | كائن JSON | مخطط JSON الذي يصف محتوى JSON الأساسي، والذي يستخدمه الإجراء لتحليل محتوى JSON المصدر. تلميح: في مصمم سير العمل، يمكنك إما توفير المخطط أو توفير حمولة عينة بحيث يمكن للإجراء إنشاء المخطط. |
Example
ينشئ تعريف الإجراء هذا هذه الرموز المميزة التي يمكنك استخدامها في سير العمل ولكن فقط في الإجراءات التي تعمل بعد إجراء تحليل 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < صفيف> | Array | الصفيف أو التعبير الذي يوفر العناصر المصدر. إذا حددت تعبيراً، فقم بإحاطة هذا التعبير بعلامات اقتباس مزدوجة. |
| < شرط أو عامل تصفية> | String | الشرط المستخدم لتصفية العناصر في الصفيف المصدر ملاحظة: إذا لم تكن هناك قيم تفي بالشرط، فسينشئ الإجراء صفيفا فارغا. |
Example
ينشئ تعريف الإجراء هذا صفيفاً يحتوي على قيم أكبر من القيمة المحددة، وهي اثنان:
"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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < رمز حالة الاستجابة> | Integer | رمز حالة HTTP الذي تم إرساله إلى الطلب الوارد. التعليمة البرمجية الافتراضي هو "200 OK"، ولكن يمكن أن يكون التعليمة البرمجية أي رمز حالة صالح يبدأ بـ 2xx أو 4xx أو 5xx، ولكن ليس بـ 3xxx. |
Optional
| Value | Type | Description |
|---|---|---|
| < عناوين الاستجابة> | كائن JSON | رأس واحد أو أكثر لتضمينه مع الاستجابة |
| < نص الاستجابة> | Various | نص الاستجابة، والذي يمكن أن يكون سلسلة أو عنصر JSON أو حتى محتوى ثنائي من إجراء سابق |
Example
ينشئ تعريف الإجراء هذا استجابة لطلب HTTP بتعليمة برمجية الحالة المحدد ونص الرسالة ورؤوس الرسائل:
"Response": {
"type": "Response",
"inputs": {
"statusCode": 200,
"body": {
"ProductID": 0,
"Description": "Organic Apples"
},
"headers": {
"x-ms-date": "@utcnow()",
"content-type": "application/json"
}
},
"runAfter": {}
}
Restrictions
على عكس الإجراءات الأخرى، يحتوي إجراء الاستجابة على قيود خاصة:
يمكن أن يستخدم سير العمل إجراء الاستجابة فقط عندما يبدأ سير العمل بمشغل طلب HTTP، ما يعني أنه يجب تشغيل سير العمل الخاص بك بواسطة طلب HTTP.
يمكن لسير العمل استخدام إجراء الاستجابة في أي مكان باستثناء حلقات Foreach ، والحلقات حتى ، بما في ذلك الحلقات المتتالية، والفروع المتوازية.
يحصل الطلب الأصلي على استجابة سير العمل فقط عند الانتهاء من جميع الإجراءات المطلوبة بواسطة إجراء الاستجابة ضمن حد مهلة HTTP.
ومع ذلك، إذا كان سير العمل الخاص بك يستدعي تطبيقاً منطقياً آخر كسير عمل متداخل، فإن سير العمل الأصل ينتظر حتى ينتهي سير العمل المتداخل، بغض النظر عن الوقت الذي يمر قبل انتهاء سير العمل المتداخل.
عندما يستخدم سير العمل إجراء الاستجابة ونمط استجابة متزامن، لا يمكن لسير العمل أيضا استخدام الأمر splitOn في تعريف المشغل لأن هذا الأمر ينشئ عمليات تشغيل متعددة. تحقق من هذه الحالة عند استخدام طريقة PUT، وإذا كان هذا صحيحاً، فقم بإرجاع استجابة "طلب غير صالح".
وإلا، إذا كان سير العمل الخاص بك يستخدم الأمر splitOn وإجراء استجابة ، يتم تشغيل سير العمل بشكل غير متزامن ويعيد على الفور استجابة "202 ACCEPTED".
عندما يصل تنفيذ سير العمل إلى إجراء الاستجابة ، ولكن الطلب الوارد قد تلقى بالفعل استجابة، يتم وضع علامة على إجراء الاستجابة على أنه "فشل" بسبب التعارض. ونتيجة لذلك، يتم أيضاً تمييز تشغيل تطبيقك المنطقي بحالة "فشل".
تحديد إجراء
ينشئ هذا الإجراء صفيفاً يحتوي على عناصر JSON عن طريق تحويل العناصر من صفيف آخر بناءً على الخريطة المحددة. صفيف الإخراج والصفيف المصدر لها دائماً نفس عدد العناصر. رغم أنه لا يمكنك تغيير عدد العناصر في صفيف الإخراج، إلا إنه يمكنك إضافة أو إزالة الخصائص وقيمها عبر تلك العناصر. تحدد الخاصية select زوجاً واحداً على الأقل من قيم المفاتيح والقيمة يحدد الخريطة لتحويل العناصر في الصفيف المصدر. يمثل زوج المفتاح والقيمة خاصية وقيمتها عبر جميع العناصر في صفيف الإخراج.
"Select": {
"type": "Select",
"inputs": {
"from": <array>,
"select": {
"<key-name>": "<expression>",
"<key-name>": "<expression>"
}
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < صفيف> | Array | الصفيف أو التعبير الذي يوفر العناصر المصدر. تأكد من إحاطة تعبير بعلامات اقتباس مزدوجة. ملاحظة: إذا كان الصفيف المصدر فارغا، ينشئ الإجراء صفيفا فارغا. |
| < اسم المفتاح> | String | اسم الخاصية المعين للنتيجة من <التعبير> لإضافة خاصية جديدة عبر كافة الكائنات في صفيف الإخراج، قم بتوفير <اسم> مفتاح لتلك الخاصية <وتعبير> لقيمة الخاصية. لإزالة خاصية من كافة الكائنات في الصفيف، احذف <اسم> المفتاح لتلك الخاصية. |
| < تعبير> | String | التعبير الذي يحول العنصر في الصفيف المصدر ويعين النتيجة إلى <اسم المفتاح> |
ينشئ الإجراء Select صفيفا كإخراج، لذلك يجب أن يقبل أي إجراء يريد استخدام هذا الإخراج صفيفا، أو يجب تحويل الصفيف إلى النوع الذي يقبله إجراء المستهلك. على سبيل المثال، لتحويل صفيف الإخراج إلى سلسلة، يمكنك تمرير هذا الصفيف إلى إجراء الإنشاء ، ثم الرجوع إلى الإخراج من إجراء الإنشاء في الإجراءات الأخرى.
Example
ينشئ تعريف الإجراء هذا صفيف عنصر 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| <CSV أو HTML> | String | تنسيق الجدول الذي تريد إنشاءه |
| < صفيف> | Array | الصفيف أو التعبير الذي يوفر العناصر المصدر للجدول ملاحظة: إذا كان الصفيف المصدر فارغا، ينشئ الإجراء جدولا فارغا. |
Optional
لتحديد أو تخصيص رؤوس الأعمدة والقيم، استخدم الصفيف columns. عندما يكون لأزواج header-value نفس اسم الرأس، تظهر قيمها في نفس العمود تحت اسم الرأس هذا. وإلا، فإن كل رأس فريد يحدد عموداً فريداً.
| Value | Type | Description |
|---|---|---|
| < اسم العمود> | String | اسم رأس العمود |
| < قيمة العمود> | Any | القيمة في هذا العمود |
المثال 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 الذي ينشئه هذا الإجراء:
| ID | Product_Name |
|---|---|
| 0 | Apples |
| 1 | Oranges |
مثال 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 | Description |
|---|---|
| 0 | التفاح العضوي |
| 1 | البرتقال العضوي |
إنهاء الإجراء
يوقف هذا الإجراء تشغيل مثيل سير العمل، ويلغي أي إجراءات قيد التقدم، ويتخطى أي إجراءات متبقية، ويعيد الحالة المحددة. على سبيل المثال، يمكنك استخدام الإجراء إنهاء عندما يجب إنهاء تطبيق المنطق الخاص بك تماما من حالة خطأ. لا يؤثر هذا الإجراء على الإجراءات المكتملة بالفعل ولا يمكن أن يظهر داخل التكرارات الحلقية Foreach و Until ، بما في ذلك الحلقات المتتالية.
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "<status>",
"runError": {
"code": "<error-code-or-name>",
"message": "<error-message>"
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < حالة> | String | الحالة المراد إرجاعها للتشغيل: "فشل" أو "تم الإلغاء" أو "تم النجاح" |
Optional
تنطبق خصائص كائن "runError" فقط عند تعيين الخاصية "runStatus" إلى حالة "Failed".
| Value | Type | Description |
|---|---|---|
| < رمز الخطأ أو الاسم> | String | تعليمة برمجية أو اسم الخطأ |
| < رسالة خطأ> | String | الرسالة أو النص الذي يصف الخطأ وأي إجراءات يمكن لمستخدم التطبيق اتخاذها |
Example
يعمل تعريف الإجراء هذا على إيقاف تشغيل سير العمل، وتعيين حالة التشغيل على "فشل"، وإرجاع الحالة، ورمز الخطأ، ورسالة الخطأ:
"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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < عدد الوحدات> | Integer | بالنسبة لإجراء التأخير ، عدد الوحدات التي يجب الانتظار فيها |
| < فترة> | String | لإجراء التأخير ، الفاصل الزمني للانتظار: "الثاني"، "الدقيقة"، "الساعة"، "اليوم"، "الأسبوع"، "الشهر" |
| < الطابع الزمني للتاريخ> | String | بالنسبة إلى الإجراء تأخير حتى ، تاريخ ووقت استئناف التنفيذ. يجب أن تستخدم هذه القيمة تنسيق وقت تاريخ 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": {}
},
إجراء سير العمل
يستدعي هذا الإجراء تطبيقاً منطقياً آخر تم إنشاؤه مسبقاً، ما يعني أنه يمكنك تضمين وإعادة استخدام مهام سير عمل التطبيق المنطقي الأخرى. يمكنك أيضا استخدام المخرجات من التطبيق المنطقي التابع أو المتداخل في الإجراءات التي تتبع تطبيق المنطق المتداخل، شريطة أن يقوم تطبيق المنطق التابع بإرجاع استجابة.
تتحقق Azure 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < اسم التطبيق-المنطق المتداخل> | String | اسم التطبيق المنطقي الذي تريد الاتصال به |
| < اسم المشغل> | String | اسم المشغل في التطبيق المنطقي المتداخل الذي تريد الاتصال به |
| < معرف اشتراك Azure> | String | معرف اشتراك Azure للتطبيق المنطقي المتداخل |
| < مجموعة موارد Azure> | String | اسم مجموعة موارد Azure للتطبيق المنطقي المتداخل |
Optional
| Value | Type | Description |
|---|---|---|
| < محتوى العنوان> | كائن JSON | أي رؤوس لإرسالها مع المكالمة |
| < محتوى النص الأساسي> | كائن JSON | أي محتوى رسالة لإرساله مع المكالمة |
Outputs
تختلف مخرجات هذا الإجراء بناءً على إجراء استجابة التطبيق المنطقي المتداخل. إذا كان التطبيق المنطقي المتداخل لا يتضمن إجراء استجابة، فإن المخرجات تكون فارغة.
Example
بعد انتهاء إجراء "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" ]
}
}
},
التحكم في تفاصيل إجراءات سير العمل
إجراء Foreach
يتكرر إجراء التكرار هذا عبر صفيف وينفذ إجراءات على كل عنصر صفيف. بشكل افتراضي، تعمل حلقة "for each" بالتوازي حتى أقصى عدد من الحلقات. لهذا الحد الأقصى، راجع الحدود والتكوين. تعرف على كيفية إنشاء حلقات "لكل".
"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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < action-1... n> | String | أسماء الإجراءات التي يتم تشغيلها على كل عنصر صفيف |
| < تعريف الإجراء-1... n> | كائن JSON | تعريفات الإجراءات التي يتم تشغيلها |
| < لكل تعبير> | String | التعبير الذي يشير إلى كل عنصر في الصفيف المحدد |
Optional
| Value | Type | Description |
|---|---|---|
| < عد> | Integer | بشكل افتراضي، يتم تشغيل تكرارات التكرار الحلقي "لكل" في نفس الوقت (بشكل متزامن أو بالتوازي) حتى الحد الافتراضي. لتغيير هذا الحد عن طريق تعيين قيمة < جديدة>، راجع تغيير تزامن التكرار الحلقي "لكل". |
| < خيار التشغيل> | String | لتشغيل حلقة "لكل" بشكل تسلسلي، بدلا من التوازي، قم بتعيين خيار <العملية> إلى أو Sequential< إلى >1، ولكن ليس كليهما. لمزيد من المعلومات، راجع تشغيل "لكل" حلقات بالتتابع. |
Example
ترسل حلقة "لكل" رسالة بريد إلكتروني لكل عنصر في الصفيف، والتي تحتوي على مرفقات من بريد إلكتروني وارد. الحلقة ترسل بريداً إلكترونياً، بما في ذلك المرفق، إلى الشخص الذي يراجع المرفق.
"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": {}
}
| Value | Type | Description |
|---|---|---|
| < شرط> | كائن JSON | الشرط، الذي يمكن أن يكون تعبيراً، للتقييم |
| < الإجراء-1> | كائن JSON | الإجراء الذي سيتم تشغيله عند < تقييم الشرط> إلى صحيح |
| < تعريف الإجراء> | كائن JSON | تعريف العمل |
| < action-2> | كائن JSON | الإجراء الذي سيتم تشغيله عند < تقييم الشرط> إلى خطأ |
تحصل الإجراءات في العناصر actions أو else على هذه الحالات:
- "نجحوا" عندما يجرون وينجحون
- "فشل" عندما يجرون ويفشلون
- "تم التخطي" عندما لا يعمل الفرع المعني
Example
يحدد هذا الشرط أنه عندما يكون لمتغير العدد الصحيح قيمة أكبر من الصفر، يتحقق سير العمل من موقع ويب. إذا كان المتغير صفراً أو أقل، يتحقق سير العمل من موقع ويب مختلف.
"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 | Result |
|---|---|
| "تعبير": "@parameters('<hasSpecialAction>')" | بالنسبة للتعبيرات المنطقية فقط، يمر الشرط لأي قيمة يتم تقييمها على صواب. لتحويل الأنواع الأخرى إلى Boolean، استخدم هاتين الدالتين: empty() أو equals(). |
| "تعبير": "@greater(actions('<action>').output.value, parameters('<threshold>'))" | بالنسبة لوظائف المقارنة، يتم تشغيل الإجراء فقط عندما يكون الإخراج من <الإجراء> أكثر من < قيمة الحد>. |
| "تعبير": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less(actions('<same-action>').output.value, 100))" | بالنسبة لوظائف المنطق وإنشاء تعبيرات منطقية متداخلة، يتم تشغيل الإجراء عندما يكون الإخراج من < أكثر من > قيمة < أو أقل من > 100. |
| "تعبير": "@equals(length(actions('<action>').outputs.errors), 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": {}
}
}
}
Required
| Value | Type | Description |
|---|---|---|
| < inner-action-1... n> | كائن JSON | إجراء واحد أو أكثر يتم تشغيله داخل النطاق |
| < مدخلات الإجراء> | كائن JSON | المدخلات لكل عمل |
تبديل الإجراء
ينظم هذا الإجراء، المعروف أيضا باسم عبارة التبديل، الإجراءات الأخرى في حالات، ويعين قيمة لكل حالة، باستثناء الحالة الافتراضية إذا كانت موجودة. عند تشغيل سير العمل، يقارن إجراء Switch القيمة من تعبير أو كائن أو رمز مميز بالقيم المحددة لكل حالة. إذا عثر الإجراء Switch على حالة مطابقة، يقوم سير العمل بتشغيل الإجراءات الخاصة بهذه الحالة فقط. في كل مرة يتم فيها تشغيل إجراء التبديل ، إما توجد حالة مطابقة واحدة فقط أو لا توجد أي تطابقات. إذا لم تكن هناك تطابقات، يقوم إجراء 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < تعبير كائن أو رمز مميز> | Varies | التعبير أو عنصر JSON أو الرمز المراد تقييمه |
| < اسم الإجراء> | String | اسم الإجراء المراد تشغيله للحالة المطابقة |
| < تعريف الإجراء> | كائن JSON | تعريف الإجراء المراد تشغيله لحالة المطابقة |
| < مطابقة القيمة> | Varies | القيمة المطلوب مقارنتها بالنتيجة المقيمة |
Optional
| Value | Type | Description |
|---|---|---|
| < اسم الإجراء الافتراضي> | String | اسم الإجراء الافتراضي الذي يتم تشغيله عند عدم وجود حالة مطابقة |
| < تعريف الإجراء الافتراضي> | كائن JSON | تعريف الإجراء الذي سيتم تشغيله في حالة عدم وجود حالة مطابقة |
Example
يعمل تعريف الإجراء هذا على تقييم ما إذا كان الشخص الذي قام بالرد على البريد الإلكتروني لطلب الموافقة قد حدد خيار "الموافقة" أو خيار "الرفض". استنادا إلى هذا الاختيار، يقوم إجراء Switch بتشغيل الإجراءات لحالة المطابقة، وهي إرسال بريد إلكتروني آخر إلى المستجيب ولكن مع صياغة مختلفة في كل حالة.
"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": {}
}
| Value | Type | Description |
|---|---|---|
| < اسم الإجراء> | String | اسم الإجراء الذي تريد تشغيله داخل الحلقة |
| < نوع الإجراء> | String | نوع الإجراء الذي تريد تشغيله |
| < مدخلات الإجراء> | Various | مدخلات للعمل للتشغيل |
| < شرط> | String | الشرط أو التعبير المراد تقييمه بعد انتهاء تشغيل جميع الإجراءات في الحلقة |
| < عدد التكرارات الحلقية> | Integer | الحد الأقصى لعدد الحلقات التي يمكن للإجراء تشغيلها. لمزيد من المعلومات بشأن الحد الأقصى والحد الأقصى الافتراضي، راجع الحدود والتكوين لـ Azure Logic Apps. |
| < مهلة التكرار الحلقي> | String | الحد الأقصى لأطول وقت يمكن تشغيل الحلقة فيه. القيمة الافتراضية timeout هي PT1H، وهي تنسيق ISO 8601المطلوب. |
Note
إذا كان التعبير يعتمد على الإخراج من أي إجراء داخل الحلقة حتى، فتأكد من حساب أي فشل ناتج عن هذا الإجراء.
Example
يرسل تعريف إجراء الحلقة هذا طلب 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": {}
}
Webhooks والاشتراكات
لا تتحقق المشغلات والإجراءات المستندة إلى Webhook من نقاط النهاية بانتظام، ولكن تنتظر أحداثاً أو بيانات معينة في نقاط النهاية هذه بدلاً من ذلك. تشترك هذه المشغلات والإجراءات في نقاط النهاية من خلال توفير عنوان URL لرد الاتصال حيث يمكن لنقطة النهاية إرسال الاستجابات.
يحدث استدعاء subscribe عندما يتغير سير العمل بأي طريقة، على سبيل المثال، عندما يتم تجديد معلومات تسجيل الدخول، أو عندما تتغير معلمات الإدخال لمشغل أو إجراء. يستخدم هذا الاستدعاء نفس عمليات إجراءات HTTP القياسية.
تحدث المكالمة unsubscribe تلقائياً عندما تجعل العملية المشغل أو الإجراء غير صالح، على سبيل المثال:
- حذف أو تعطيل الزناد.
- حذف أو تعطيل سير العمل.
- حذف أو تعطيل الاشتراك.
لدعم هذه الاستدعاءات، يعرض التعبير @listCallbackUrl() "عنوان URL لمعاودة الاتصال" فريداً للمشغل أو الإجراء. يمثل عنوان URL هذا معرفاً فريداً لنقاط النهاية التي تستخدم واجهة برمجة تطبيقات REST الخاصة بالخدمة. معلمات هذه الوظيفة هي نفسها مشغل أو إجراء خطاف الويب.
تغيير المدة غير المتزامنة
لكل من المشغلات والإجراءات، يمكنك قصر مدة النمط غير المتزامن على فترة زمنية محددة عن طريق إضافة خاصية limit.timeout. بهذه الطريقة، إذا لم ينته الإجراء عند انقضاء الفاصل الزمني، يتم وضع علامة على حالة الإجراء على أنها Cancelled مع تعليمة برمجية ActionTimedOut. تستخدم الخاصية timeoutتنسيق ISO 8601.
"<trigger-or-action-name>": {
"type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
"inputs": {},
"limit": {
"timeout": "PT10S"
},
"runAfter": {}
}
إعدادات تكوين وقت التشغيل
يمكنك تغيير سلوك وقت التشغيل الافتراضي للمشغلات والإجراءات عن طريق إضافة هذه الخصائص runtimeConfiguration إلى تعريف المشغل أو الإجراء.
| Property | Type | Description | الزناد أو الإجراء |
|---|---|---|---|
runtimeConfiguration.concurrency.runs |
Integer | تغيير الحد الافتراضي لعدد مثيلات سير العمل التي يمكن تشغيلها في نفس الوقت (بشكل متزامن أو بالتوازي). يمكن أن يساعد تعديل هذه القيمة في الحد من عدد الطلبات التي تتلقاها أنظمة الواجهة الخلفية. يعمل تعيين الخاصية runs على 1 بنفس طريقة تعيين الخاصية operationOptions على SingleInstance. يمكنك تعيين أي من الخاصيتين، ولكن ليس كليهما. لتغيير الحد الافتراضي، راجع تغيير التزامن المشغل أو تشغيل المثيلات بالتتابع. |
كافة المشغلات |
runtimeConfiguration.concurrency.maximumWaitingRuns |
Integer | قم بتغيير الحد الافتراضي لعدد مثيلات سير العمل التي يجب أن تنتظر للتشغيل عندما يقوم تطبيق المنطق بالفعل بتشغيل الحد الأقصى للمثيلات المتزامنة. لتغيير الحد الافتراضي، راجع تغيير حد فترات الانتظار. |
كافة المشغلات |
runtimeConfiguration.concurrency.repetitions |
Integer | قم بتغيير الحد الافتراضي لعدد تكرارات التكرار الحلقي "لكل" التي يمكن تشغيلها في نفس الوقت (بشكل متزامن أو بالتوازي). يعمل تعيين الخاصية repetitions على 1 بنفس طريقة تعيين الخاصية operationOptions على SingleInstance. يمكنك تعيين أي من الخاصيتين، ولكن ليس كليهما. لتغيير الحد الافتراضي، راجع تغيير "لكل" تزامن أو تشغيل "لكل" حلقات متسلسلة. |
Action: Foreach |
runtimeConfiguration.paginationPolicy.minimumItemCount |
Integer | بالنسبة للإجراءات المحددة التي تدعم وتشغل ترقيم الصفحات، تحدد هذه القيمة الحد الأدنى لعدد النتائج التي سيتم استردادها. لتشغيل ترقيم الصفحات، راجع الحصول على بيانات أو عناصر أو نتائج مجمعة باستخدام ترقيم الصفحات |
الإجراء: متنوع |
runtimeConfiguration.secureData.properties |
Array | في العديد من المشغلات والإجراءات، تخفي هذه الإعدادات المدخلات أو المخرجات أو كليهما من سجل تشغيل تطبيق المنطق. لمعرفة المزيد بشأن حماية هذه البيانات، راجع إخفاء المدخلات والمخرجات من سجل التشغيل. |
معظم المحفزات والأفعال |
runtimeConfiguration.staticResult |
كائن JSON | بالنسبة للإجراءات التي تدعم إعداد النتيجة الثابتة وتشغيله، يحتوي العنصر على staticResult هذه السمات: - name، الذي يشير إلى اسم تعريف النتيجة الثابت للإجراء الحالي، والذي يظهر داخل السمة staticResults في سمة definition لسير عمل التطبيق المنطقي. لمزيد من المعلومات، راجع النتائج الثابتة - مرجع المخطط للغة تعريف سير العمل. - staticResultOptions، والتي تحدد ما إذا كانت النتائج الثابتة Enabled للإجراء الحالي أم لا. لتشغيل النتائج الثابتة، راجع اختبار التطبيقات المنطقية باستخدام بيانات وهمية عن طريق إعداد نتائج ثابتة |
الإجراء: متنوع |
خيارات العملية
يمكنك تغيير السلوك الافتراضي للمشغلات والإجراءات باستخدام الخاصية operationOptions في تعريف المشغل أو الإجراء.
| خيار العملية | Type | Description | الزناد أو الإجراء |
|---|---|---|---|
DisableAsyncPattern |
String | قم بتشغيل الإجراءات المستندة إلى HTTP بشكل متزامن، بدلاً من تشغيلها بشكل غير متزامن. لتعيين هذا الخيار، راجع تشغيل الإجراءات بشكل متزامن. |
Actions: ApiConnection, HTTP, Response |
IncludeAuthorizationHeadersInOutputs |
String | بالنسبة لتطبيقات المنطق التي تمكن OAuth باستخدام معرف Microsoft Entra لتخويل الوصول إلى المكالمات الواردة إلى نقطة نهاية المشغل المستندة إلى الطلب، قم بتضمين Authorization العنوان من الرمز المميز للوصول إلى OAuth في مخرجات المشغل. لمزيد من المعلومات، راجع تضمين رأس "التخويل" في مخرجات تشغيل الطلب. |
Triggers: Request, HTTP Webhook |
Sequential |
String | قم بتشغيل "لكل" تكرار حلقة واحدة تلو الأخرى، بدلاً من الكل في نفس الوقت بالتوازي. يعمل هذا الخيار بنفس طريقة تعيين خاصية runtimeConfiguration.concurrency.repetitions على 1. يمكنك تعيين أي من الخاصيتين، ولكن ليس كليهما. لتعيين هذا الخيار، راجع تشغيل "لكل" حلقات بالتتابع. |
Action: Foreach |
SingleInstance |
String | قم بتشغيل المشغل لكل مثيل تطبيق منطقي بالتتابع وانتظر انتهاء التشغيل النشط سابقاً قبل تشغيل مثيل التطبيق المنطقي التالي. يعمل هذا الخيار بنفس طريقة تعيين خاصية runtimeConfiguration.concurrency.runs على 1. يمكنك تعيين أي من الخاصيتين، ولكن ليس كليهما. لتعيين هذا الخيار، راجع تشغيل المثيلات بالتتابع. |
كافة المشغلات |
SuppressWorkflowHeaders |
String | لا ترسل x-ms-* رؤوس بيانات تعريف في الطلبات الصادرة. بشكل افتراضي، تتضمن Azure Logic Apps رؤوس بيانات تعريف إضافية مع البادئة x-ms- في اسم الرأس كجزء من الطلبات الصادرة. ومع ذلك، لن تقبل بعض الخدمات القديمة الطلبات ذات الرؤوس الإضافية غير المعروفة، ما يؤدي إلى فشل الطلبات. |
Actions: HTTP, Function, APIManagement |
SuppressWorkflowHeadersOnResponse |
String | لا ترسل x-ms-* رؤوس بيانات تعريف رداً على طلبات التشغيل الواردة. بشكل افتراضي، يرسل Azure Logic Apps استجابات للطلبات الواردة التي تتضمن عناوين بيانات تعريف إضافية مع البادئة x-ms- في اسم العنوان. ومع ذلك، لن تقبل بعض الخدمات القديمة الطلبات أو الاستجابات ذات الرؤوس الإضافية غير المعروفة، ما يؤدي إلى فشل الطلبات. |
Triggers: Request, HTTP Webhook |
تغيير المشغل التزامن
بشكل افتراضي، تعمل جميع مثيلات سير عمل التطبيق المنطقي في نفس الوقت (بشكل متزامن أو بالتوازي). يعني هذا السلوك أن كل مثيل مشغل يتم تشغيله قبل انتهاء تشغيل مثيل سير العمل النشط سابقاً. ومع ذلك، فإن عدد المثيلات قيد التشغيل المتزامن له حد افتراضي. عندما يصل عدد مثيلات سير العمل التي يتم تشغيلها بشكل متزامن إلى هذا الحد، يجب أن تنتظر أي مثيلات جديدة أخرى للتشغيل. يساعد هذا الحد في التحكم في عدد الطلبات التي تتلقاها الأنظمة الخلفية.
عند تشغيل عنصر تحكم التزامن للمشغل، يتم تشغيل مثيلات المشغل بالتوازي مع الحد الافتراضي. لتغيير حد التزامن الافتراضي هذا، يمكنك استخدام إما محرر عرض التعليمات البرمجية أو مصمم سير العمل لأن تغيير إعداد التزامن من خلال المصمم يضيف الخاصية في تعريف المشغل الأساسي أو يحدثها runtimeConfiguration.concurrency.runs والعكس صحيح. تتحكم هذه الخاصية في الحد الأقصى لعدد مثيلات سير العمل الجديدة التي يمكن تشغيلها بالتوازي.
قبل تمكين التزامن على مشغل، راجع الاعتبارات التالية:
لا يمكنك تعطيل التزامن بعد تمكين التحكم في التزامن.
إذا وصل الحد الأقصى لعدد عمليات تشغيل المشغل المتزامنة إلى الحد الأقصى لدرجة التوازي، فقد تواجه عمليات تشغيل المشغل اللاحقة أخطاء تقييد أو "429 - طلبات كثيرة جدا". إذا قمت بإعداد نهج إعادة المحاولة الذي يعالج 429 خطأ، فقد يواجه المشغل دورة من سلوك إعادة المحاولة والتقييد الذي يسبب تأخيرات طويلة في معالجة طلبات المشغل الجديدة.
عند تمكين التزامن، يتم تقليل حد التقسيم على بشكل كبير لصفائف الخصم. إذا تجاوز عدد العناصر هذا الحد، يتم تعطيل إمكانية Split on .
عند تمكين التزامن، قد يتسبب مثيل تطبيق منطقي طويل التشغيل في دخول مثيلات تطبيق منطقي جديدة في حالة انتظار. تمنع هذه الحالة Azure Logic Apps من إنشاء مثيلات جديدة وتحدث حتى عندما يكون عدد عمليات التشغيل المتزامنة أقل من الحد الأقصى المحدد لعدد مرات التشغيل المتزامنة.
لمقاطعة هذه الحالة، قم بإلغاء أقدم المثيلات التي لا تزال قيد التشغيل.
في قائمة تطبيق المنطق، حدد نظرة عامة.
في قسم Runs history ، حدد أقرب مثيل لا يزال قيد التشغيل، على سبيل المثال:
Tip
لعرض المثيلات التي لا تزال قيد التشغيل فقط، افتح القائمة الكل ، وحدد تشغيل.
ضمن Logic app run، حدد Cancel run.
للتغلب على هذا الاحتمال، أضف مهلة إلى أي إجراء قد يعيق عمليات التشغيل هذه. إذا كنت تعمل في محرر التعليمة البرمجية، فراجع تغيير المدة غير المتزامنة. بخلاف ذلك، إذا كنت تستخدم المصمم، فاتبع الخطوات التالية:
في سير عمل تطبيق المنطق، حدد الإجراء الذي تريد إضافة مهلة فيه. في الزاوية العلوية اليسرى للإجراء، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.
ضمن المهلة، حدد مدة المهلة بتنسيق ISO 8601.
لتشغيل تطبيقك المنطقي بشكل تسلسلي، عيّن تزامن المشغل على
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.
تغيير "لكل" التزامن
بشكل افتراضي، يتم تشغيل جميع التكرارات "لكل" حلقة في نفس الوقت (بشكل متزامن أو بالتوازي). يعني هذا السلوك أن كل تكرار يبدأ تشغيله قبل انتهاء تشغيل التكرار السابق. ومع ذلك، فإن عدد التكرارات قيد التشغيل المتزامن له حد افتراضي. عندما يصل عدد التكرارات التي يتم تشغيلها بشكل متزامن إلى هذا الحد، يجب أن تنتظر أي تكرارات أخرى للتشغيل.
لتغيير الحد الافتراضي، يمكنك استخدام محرر عرض التعليمات runtimeConfiguration.concurrency.repetitions البرمجية أو مصمم سير العمل لأن تغيير إعداد التزامن من خلال المصمم يضيف الخاصية أو يحدثها في تعريف الإجراء الأساسي "لكل" والعكس صحيح. تتحكم هذه الخاصية في الحد الأقصى لعدد التكرارات التي يمكن تشغيلها بالتوازي.
Note
إذا قمت بتعيين إجراء "لكل" ليتم تشغيله بالتتابع إما باستخدام المصمم أو محرر عرض التعليمة البرمجية، فلا تقم بتعيين خاصية الإجراء operationOptions على Sequential في محرر عرض التعليمة البرمجية. خلاف ذلك، تحصل على خطأ في التحقق من الصحة. لمزيد من المعلومات، راجع تشغيل "لكل" حلقات بالتتابع.
تحرير في عرض التعليمة البرمجية
في التعريف الأساسي "لكل"، قم بإضافة أو تحديث خاصية runtimeConfiguration.concurrency.repetitions، والتي يمكن أن تحتوي على قيمة تتراوح من 1 و50.
إليك مثال يحد من عمليات التشغيل المتزامنة إلى 10 تكرارات:
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 10
}
}
}
لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل.
التحرير في مصمم سير العمل
في كل إجراء، من الزاوية العلوية اليسرى، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.
ضمن التحكم في التزامن، قم بتعيين عنصر تحكم التزامن إلى تشغيل.
اسحب شريط التمرير درجة التوازي إلى القيمة التي تريدها. لتشغيل تطبيق المنطق بشكل تسلسلي، اسحب قيمة شريط التمرير إلى 1.
تغيير حد فترات الانتظار
بشكل افتراضي، تعمل جميع مثيلات سير عمل التطبيق المنطقي في نفس الوقت (بشكل متزامن أو بالتوازي). يعني هذا السلوك أن كل مثيل مشغل يتم تشغيله قبل انتهاء تشغيل مثيل سير العمل النشط سابقاً. ومع ذلك، يوجد حد افتراضي لعدد مثيلات سير العمل قيد التشغيل بشكل متزامن. عندما يصل عدد عمليات التشغيل المتزامنة إلى هذا الحد، يجب أن تنتظر أي مثيلات سير عمل جديدة أخرى للتشغيل. يوجد حد افتراضي أيضا لعدد مثيلات سير العمل قيد الانتظار. عندما يصل عدد مثيلات الانتظار إلى هذا الحد، لم تعد Azure Logic Apps تقبل مثيلات سير العمل الجديدة لتشغيلها. ترجع مشغلات الطلب والإخطار على الويب 429 - العديد من أخطاء الطلبات، وتبدأ المشغلات المتكررة في تخطي محاولات التحقق.
يمكنك تغيير الحد الافتراضي لتزامن المشغل بالإضافة إلى الحد الافتراضي لانتظار التشغيل. ومع ذلك، يؤدي هذا التغيير في المقام الأول إلى إبطاء المشغل لتخفيف الضغط بسبب التزامن. على سبيل المثال، إذا كان لديك مشغل استقصاء، وكانت قائمة انتظار عمليات التشغيل ممتلئة بسبب عمليات التشغيل قيد التقدم، تتوقف Azure Logic Apps عن التحقق. إذا كان سير العمل يستخدم مشغلا يستند إلى الطلب، وكانت قائمة انتظار عمليات التشغيل ممتلئة، تبدأ Azure Logic Apps في إرجاع الخطأ 429. توجد بعض السيناريوهات حيث لا يمكن ل Azure Logic Apps إيقاف المشغل من الاستقصاء دون إدخال حالات الفشل واختيار إضافة مثل هذه التشغيلات إلى قائمة انتظار عمليات التشغيل على أي حال دون فشل عمليات تشغيل الاستدعاء.
في تعريف المشغل الأساسي، أضف الخاصية 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 في تعريف المشغل الأساسي والعكس صحيح.
Note
عند تعيين مشغل للتشغيل بالتتابع إما باستخدام المصمم أو محرر عرض التعليمة البرمجية، لا تقم بتعيين خاصية المشغل operationOptions على Sequential في محرر عرض التعليمة البرمجية.
خلاف ذلك، تحصل على خطأ في التحقق من الصحة.
تحرير في عرض التعليمة البرمجية
في تعريف المشغل، عيّن أياً من هاتين الخاصيتين، ولكن ليس كليهما.
عيّن الخاصية runtimeConfiguration.concurrency.runs على 1:
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
}
}
-or-
عيّن الخاصية operationOptions على SingleInstance:
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"operationOptions": "SingleInstance"
}
لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل وخيارات التشغيل.
التحرير في مصمم سير العمل
في الزاوية العلوية اليسرى للمشغل، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.
ضمن التحكم في التزامن، قم بتعيين الحد إلى تشغيل.
اسحب شريط التمرير درجة التوازي إلى الرقم
1.
تشغيل "لكل" حلقات بالتتابع
لتشغيل تكرار حلقة "لكل" فقط بعد انتهاء التكرار السابق، قم بتعيين إجراء "لكل" للتشغيل بالتتابع. يمكنك استخدام محرر عرض التعليمات البرمجية أو مصمم سير العمل لأن تغيير تزامن الإجراء من خلال المصمم يضيف أيضا الخاصية أو يحدثها runtimeConfiguration.concurrency.repetitions في تعريف الإجراء الأساسي والعكس صحيح.
Note
عند تعيين إجراء "لكل" ليتم تشغيله بالتتابع إما باستخدام المصمم أو محرر عرض التعليمة البرمجية، لا تقم بتعيين خاصية الإجراء operationOptions على Sequential في محرر عرض التعليمة البرمجية.
خلاف ذلك، تحصل على خطأ في التحقق من الصحة.
تحرير في عرض التعليمة البرمجية
في تعريف الإجراء، قم بتعيين أي من هاتين الخاصيتين، ولكن ليس كليهما.
عيّن الخاصية runtimeConfiguration.concurrency.repetitions على 1:
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
}
}
-or-
عيّن الخاصية operationOptions على Sequential:
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"operationOptions": "Sequential"
}
لمزيد من المعلومات، راجع إعدادات تكوين وقت التشغيل وخيارات التشغيل.
التحرير في مصمم سير العمل
في الزاوية العلوية اليسرى لكل إجراء، حدد زر علامات الحذف (...)، ثم حدد الإعدادات.
ضمن التحكم في التزامن، قم بتعيين عنصر تحكم التزامن إلى تشغيل.
اسحب شريط التمرير درجة التوازي إلى الرقم
1.
قم بتشغيل الإجراءات في نمط عملية متزامن
بشكل افتراضي، يتبع إجراء HTTP وإجراءات APIConnection في Azure Logic Apps نمط العملية غير المتزامنالقياسي، بينما يتبع إجراء الاستجابة نمط العملية المتزامنة. يحدد النمط غير المتزامن أنه بعد إجراء يستدعي أو يرسل طلبا إلى نقطة النهاية المحددة أو الخدمة أو النظام أو واجهة برمجة التطبيقات، يقوم المتلقي بإرجاع استجابة "202 ACCEPTED" على الفور. تؤكد هذه التعليمة البرمجية أن المتلقي قبل الطلب ولكنه لم ينته من المعالجة. يمكن أن تتضمن الاستجابة عنوانا location يحدد عنوان URL ومعرف التحديث الذي يمكن للمتصل استخدامه للاستقصاء باستمرار أو التحقق من حالة الطلب غير المتزامن حتى يتوقف المتلقي عن المعالجة ويرجع استجابة نجاح "200 OK" أو استجابة أخرى غير 202. لمزيد من المعلومات، راجع يفرض تكامل الخدمات المصغرة غير المتزامن استقلالية الخدمات المصغرة.
في Logic App Designer، يحتوي إجراء HTTP وإجراءات APIConnection وإجراء الاستجابة على إعداد النمط غير المتزامن . عند التمكين، يحدد هذا الإعداد أن المتصل لا ينتظر انتهاء المعالجة ويمكنه الانتقال إلى الإجراء التالي ولكنه يستمر في التحقق من الحالة حتى تتوقف المعالجة. إذا تم تعطيله، فإن هذا الإعداد يحدد أن المتصل ينتظر انتهاء المعالجة قبل الانتقال إلى الإجراء التالي. للعثور على هذا الإعداد، اتبع الخطوات التالية:
في شريط عنوان إجراء HTTP، حدد زر علامات الحذف (...) الذي يفتح إعدادات الإجراء.
ابحث عن إعداد النمط غير المتزامن .
في تعريف JavaScript Object Notation (JSON) الأساسي للإجراء، يتبع إجراء HTTP وإجراءات APIConnection بشكل ضمني نمط التشغيل غير المتزامن.
في بعض السيناريوهات، قد ترغب في اتخاذ إجراء ليتبع النمط المتزامن بدلاً من ذلك. على سبيل المثال، عند استخدام إجراء HTTP، قد ترغب في:
في هذه الحالات، يمكنك تنفيذ الإجراء بشكل متزامن باستخدام الخيارات التالية:
استبدل إصدار الاستطلاع لهذا الإجراء بإصدار الرد التلقائي على الويب، إذا كان متاحاً.
قم بتعطيل السلوك غير المتزامن للإجراء باتباع أي من الخيارين:
في Logic App Designer، أوقف إعداد النمط غير المتزامن.
في تعريف JSON الأساسي للإجراء، أضف
"DisableAsyncPattern"خيار العملية.
إيقاف تشغيل إعداد النمط غير المتزامن
في Logic App Designer، في شريط عنوان الإجراء، حدد زر علامات الحذف (...) الذي يفتح إعدادات الإجراء.
ابحث عن إعداد النمط غير المتزامن ، وقم بتحويل الإعداد إلى إيقاف التشغيل إذا تم تمكينه، وحدد تم.
تعطيل النمط غير المتزامن في تعريف JSON للإجراء
في تعريف JSON الأساسي للإجراء، أضف الخاصية "operationOptions" وقم بتعيينها إلى "DisableAsyncPattern" ضمن قسم الإجراء "inputs" ، على سبيل المثال:
"<some-long-running-action>": {
"type": "Http",
"inputs": { "<action-inputs>" },
"operationOptions": "DisableAsyncPattern",
"runAfter": {}
}
قم بمصادقة المشغلات والإجراءات
تدعم نقاط نهاية HTTP وHTTPS أنواعاً مختلفة من المصادقة. استناداً إلى المشغل أو الإجراء الذي تستخدمه لإجراء مكالمات صادرة أو طلبات للوصول إلى نقاط النهاية هذه، يمكنك الاختيار من بين نطاقات مختلفة من أنواع المصادقة. لمزيد من المعلومات، راجع إضافة مصادقة للمكالمات الصادرة.
الخطوات التالية
- تعرف على المزيد بشأن لغة تعريف سير العمل