مشاركة عبر


قم بإنشاء أو تحرير أو تمديد JSON لتعريفات سير عمل التطبيق المنطقي في تطبيقات Azure Logic

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

عند إنشاء حلول تكامل المؤسسة باستخدام مهام سير عمل مؤتمتة في Azure Logic Apps، فإن تعريفات سير العمل الأساسية تستخدم JavaScript Object Notation (JSON) بسيطًا وتوضيحيًا بجانب مخطط لغة تعريف سير العمل (WDL) لوصفها والتحقق من صحتها. تجعل هذه التنسيقات تعريفات سير العمل أسهل في القراءة والفهم دون معرفة الكثير عن التعليمات البرمجية. إذا أردت أتمتة إنشاء موارد تطبيقات المنطق وتوزيعها، يمكنك تضمين تعريفات سير العمل مثل موارد Azure داخل قوالب Azure Resource Manager. لإنشاء تطبيقات منطقية وإدارتها وتوزيعها، يمكنك بعد ذلك استخدام Azure PowerShell أو Azure CLI أو Azure Logic Apps REST APIs.

للعمل مع تعريفات سير العمل في JSON، افتح محرر عرض التعليمات البرمجية عند العمل في مدخل Microsoft Azure أو Visual Studio Code. يمكنك أيضا نسخ التعريف ولصقه في أي محرر تريده.

إشعار

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

تحرير مدخل JSON - Azure

  1. في مربع البحث في مدخل Microsoft Azure، أدخل وحدد logic apps. من صفحة Logic apps، حدد مورد Consumption logic app الذي تريده.

  2. في قائمة logic app، ضمن Development Tools، حدد Logic app code view.

    يفتح محرر عرض التعليمات البرمجية ويعرض تعريف سير عمل تطبيق المنطق بتنسيق JSON.

تحرير JSON - Visual Studio Code

راجع تحرير تطبيق المنطق المنشور في Visual Studio Code

تحرير JSON - Visual Studio

هام

تم إهمال ملحق Azure Logic Apps Tools for Visual Studio ولم يعد يتلقى التحديثات. لإنشاء وإدارة مهام سير عمل التطبيق المنطقي باستخدام بيئة تطوير محلية، راجع الوثائق التالية:

قبل أن تتمكن من العمل على تعريف سير عمل Consumption في Visual Studio، تأكد من تثبيت الأدوات المطلوبة. في Visual Studio، يمكنك فتح التطبيقات المنطقية التي تم إنشاؤها وتوزيعها إما مباشرة من مدخل Azure أو كمشاريع Azure Resource Manager من Visual Studio.

  1. افتح حل Visual Studio، أو مشروع مجموعة موارد Azure، الذي يحتوي على تطبيقك المنطقي.

  2. ابحث عن تعريف سير العمل وافتحه، والذي يظهر بشكل افتراضي في قالب Resource Manager، المسمى LogicApp.json.

    يمكنك استخدام هذا القالب وتخصيصه للتوزيع في بيئات مختلفة.

  3. افتح القائمة المختصرة لتعريف سير العمل والقالب. تحديد فتح باستخدامLogic App Designer.

    تظهر لقطة الشاشة تطبيق المنطق المفتوح في حل Visual Studio.

    تلميح

    إذا لم يكن لديك هذا الأمر في Visual Studio 2019، فتأكد من أن لديك آخر التحديثات ل Visual Studio.

  4. في الجزء السفلي من مصمم سير العمل، اختر "عرض التعليمات البرمجية".

    يفتح محرر عرض التعليمات البرمجية ويعرض تعريف سير العمل بتنسيق JSON.

  5. للعودة إلى طريقة عرض المصمم، في أسفل محرر طريقة عرض التعليمات البرمجية، اختر تصميم.

المعلمات

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

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

  1. في القالب الخاص بك، حدد معلمات القالب ومعلمات تعريف مسار العمل لقبول القيم لاستخدامها في التوزيع ووقت التشغيل، على التوالي.

    يتم تحديد معلمات القالب في قسم المعلمات خارج تعريف سير العمل الخاص بك، بينما يتم تحديد معلمات تعريف سير العمل في قسم المعلمات الموجود داخل تعريف سير العمل الخاص بك.

  2. استبدل القيم المشفرة بالتعبيرات التي تشير إلى هذه المعلمات. تستخدم تعبيرات القوالب بناء جملة يختلف عن تعبيرات تعريف مسار العمل.

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

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

  3. قم بتخزين قيم المعلمات في ملف معلمة منفصل وقم بتضمين هذا الملف مع عملية التوزيع.

سلاسل العملية مع الوظائف

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

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder1",
        "companyName": "NAME=Contoso"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "request": {
      "type": "Request",
      "kind": "Http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
      }
    }
  },
  "outputs": {}
}

تصف هذه الخطوات كيفية معالجة هذا المثال لهذه السلسلة، والعمل من الداخل إلى الخارج:

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"

  1. length() احصل على اسم الشركة، بحيث تحصل على العدد الإجمالي للأحرف.

  2. للحصول على سلسلة أقصر، اطرح 5.

  3. الآن احصل على substring(). ابدأ من الفهرس 5، وانتقل إلى باقي السلسلة.

  4. تحويل هذه السلسلة الفرعية إلى سلسلة base64().

  5. الآن replace() جميع الأحرف + مع - حرف.

  6. أخيرًا، replace() جميع الأحرف / التي تحتوي على _ حرفًا.

تعيين عناصر القائمة إلى قيم الخاصية، ثم استخدام الخرائط كمعلمات

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

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

  • intersection() تتحقق الدالة من تطابق الفئة مع فئة معرفة معروفة.

  • بعد أن يحصل المثال على فئة مطابقة، يسحب المثال العنصر من الخريطة باستخدام أقواس مربعة: parameters[...]

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "specialCategories": {
      "defaultValue": [
        "science",
        "google",
        "microsoft",
        "robots",
        "NSA"
      ],
      "type": "Array"
    },
    "destinationMap": {
      "defaultValue": {
        "science": "https://www.nasa.gov",
        "microsoft": "https://www.microsoft.com/en-us/default.aspx",
        "google": "https://www.google.com",
        "robots": "https://en.wikipedia.org/wiki/Robot",
        "NSA": "https://www.nsa.gov/"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "Request",
      "kind": "http"
    }
  },
  "actions": {
    "getArticles": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=https://feeds.wired.com/wired/index"
      }
    },
    "forEachArticle": {
      "type": "foreach",
      "foreach": "@body('getArticles').responseData.feed.entries",
      "actions": {
        "ifGreater": {
          "type": "if",
          "expression": "@greater(length(intersection(item().categories, parameters('specialCategories'))), 0)",
          "actions": {
            "getSpecialPage": {
              "type": "Http",
              "inputs": {
                "method": "GET",
                "uri": "@parameters('destinationMap')[first(intersection(item().categories, parameters('specialCategories')))]"
              }
            }
          }
        }
      },
      "runAfter": {
        "getArticles": [
          "Succeeded"
        ]
      }
    }
  }
}

الحصول على البيانات مع وظائف التاريخ

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

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. من الإجراء order، استخرج startTime.

  2. احصل على الوقت الحالي باستخدام الدالة utcNow() .

  3. طرح ثانية واحدة: addSeconds(..., -1)

    يمكنك استخدام وحدات زمنية أخرى مثل minutes أو hours.

  4. الآن، يمكنك مقارنة هاتين القيمتين.

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

لتنسيق التواريخ، يمكنك استخدام مُنسِّقات السلاسل. على سبيل المثال، للحصول على RFC1123، استخدم utcnow('r'). تعرف على المزيد عن تنسيق التاريخ.

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder-id"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "request",
      "kind": "http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{parameters('order').id}"
      }
    },
    "ifTimingWarning": {
      "type": "If",
      "expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
      "actions": {
        "timingWarning": {
          "type": "Http",
          "inputs": {
            "method": "GET",
            "uri": "https://www.example.com/?recordLongOrderTime=@{parameters('order').id}&currentTime=@{utcNow('r')}"
          }
        }
      },
      "runAfter": {
        "order": [
          "Succeeded"
        ]
      }
    }
  },
  "outputs": {}
}