⁧⁩ التعامل مع أنواع المحتوى في تطبيقات Azure Logic⁧⁩

ينطبق على: Azure Logic Apps (الاستهلاك + قياسي)

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

لتحديد الطريقة المناسبة للتعامل مع أنواع المحتوى، تعتمد Logic Apps على قيمة العنوان Content-Type في استدعاءات HTTP، على سبيل المثال:

تطبيق/json

يخزن Logic Apps ويعالج أي طلب مع نوع محتوى application/json باعتباره كائن JavaScript Notation (JSON). بشكل افتراضي، يمكنك توزيع محتوى JSON بدون أي تحويل. لتوزيع طلب يحتوي على عنوان بنوع محتوى "application/json"، يمكنك استخدام تعبير. يعرض هذا المثال القيمة dogمن المصفوفةanimal-type بدون تحويل:

@body('myAction')['animal-type'][0]

{
  "client": {
     "name": "Fido",
     "animal-type": [ "dog", "cat", "rabbit", "snake" ]
  }
}

إذا كنت تعمل باستخدام بيانات JSON التي لا تحدد عنوانًا، فيمكنك إرسال هذه البيانات يدويًا إلى JSON باستخدام الدالة json ()، على سبيل المثال:

@json(triggerBody())['animal-type']

إنشاء الرموز المميزة لخصائص JSON

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

  • مشغل الطلب

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

    إذا لم يكن لديك مخطط، يمكنك إنشاء المخطط.

    1. في المشغل Request، حدد Use sample payload to generate schema.

    2. ضمن أدخل أو الصق نموذج حمولة JSON، قدم نموذجًا للحمولة ثم اختر تم . على سبيل المثال:

      لقطة شاشة تعرض الإجراء

      يظهر المخطط الذي تم إنشاؤه الآن في المشغل الخاص بك.

      تقديم نموذج لحمولة JSON

      فيما يلي التعريف الأساسي لمشغل الطلب الخاص بك في محرر عرض التعليمات البرمجية:

      "triggers": { 
         "manual": {
            "type": "Request",
            "kind": "Http",
            "inputs": { 
               "schema": {
                  "type": "object",
                  "properties": {
                     "client": {
                        "type": "object",
                        "properties": {
                           "animal-type": {
                              "type": "array",
                              "items": {
                                 "type": "string"
                              },
                           },
                           "name": {
                              "type": "string"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    3. في طلب HTTP الذي يرسله تطبيق العميل إلى Azure Logic Apps، تأكد من تضمين عنوان يسمى Content-Type، وتعيين قيمة العنوان إلى application/json.

  • توزيع إجراء JSON

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

    تحليل JSON

رسالة نصية/نص عادي

عندما يتلقى تطبيقك المنطقي رسائل HTTP التي تم تعيين عنوان Content-Type لها إلى text/plain، يخزن تطبيقك المنطقي هذه الرسائل في شكل أولي. إذا قمت بتضمين هذه الرسائل في إجراءات لاحقة بدون إرسال، فستخرج الطلبات مع تعيين عنوان Content-Type إلى text/plain.

على سبيل المثال، عندما تعمل مع ملف ثابت، قد تتلقى طلب HTTP مع تعيين عنوان Content-Type إلى نوع المحتوى text/plain:

Date,Name,Address
Oct-1,Frank,123 Ave

إذا قمت بعد ذلك بإرسال هذا الطلب في إجراء لاحق باعتباره النص الأساسي لطلب آخر، على سبيل المثال، @body('flatfile')، فسيكون لهذا الطلب الثاني أيضًا عنوان Content-Type تم تعيينه إلى text/plain. إذا كنت تعمل مع بيانات نص عادي ولكن لم تحدد عنوانًا، فيمكنك إرسال هذه البيانات يدويًا إلى نص باستخدام دالة string () مثل هذا التعبير:

@string(triggerBody())

application/xml and application/octet-stream

تحتفظ Logic Apps دائمًا بـ Content-Type في طلب أو استجابة HTTP مستلمة. لذلك إذا تلقى تطبيقك المنطقي محتوى مع تعيين Content-Type إلى application/octet-stream، وقمت بتضمين هذا المحتوى في إجراء لاحق بدون إرسال، فإن الطلب الصادر أيضًا Content-Type تم تعيينه إلى application/octet-stream. بهذه الطريقة، يمكن أن تضمن Logic Apps عدم فقدان البيانات أثناء التنقل خلال سير العمل. ومع ذلك، يتم تخزين حالة الإجراء أو المدخلات والمخرجات في كائن JSON بينما تنتقل الحالة عبر سير العمل.

دالات المحول

للاحتفاظ ببعض أنواع البيانات، تقوم Logic Apps بتحويل المحتوى إلى سلسلة ثنائية بترميز base64 مع بيانات تعريف مناسبة تحافظ على كل من $content الحمولة و$content-type، والتي يتم تحويلها تلقائيًا.

توضح هذه القائمة كيفية تحويل Logic Apps المحتوى عند استخدام هذه الدالات:

  • json(): تحول البيانات إلى application/json
  • xml(): تحول البيانات إلى application/xml
  • binary(): تحول البيانات إلى application/octet-stream
  • string(): تحول البيانات إلى text/plain
  • base64(): تحول المحتوى إلى سلسلة بتشفير base64
  • base64toString(): تحول سلسلة بتشفير base64 إلى text/plain
  • base64toBinary(): تحول سلسلة بتشفير base64 إلى application/octet-stream
  • dataUri(): تحول سلسلة إلى بيانات URI
  • dataUriToBinary(): تحول بيانات URI إلى سلسلة ثنائية
  • dataUriToString(): تحول بيانات URI إلى سلسلة

على سبيل المثال، إذا تلقيت طلب HTTP إذ تم تعيين Content-Type إلى application/xml، مثل هذا المحتوى:

<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>

يمكنك إرسال هذا المحتوى باستخدام التعبير @xml(triggerBody()) مع الدالتين xml() وtriggerBody() ثم استخدام هذا المحتوى لاحقًا. أو يمكنك استخدام التعبير @xpath(xml(triggerBody()), '/CustomerName') مع الدالتين xpath() وxml().

أنواع المحتويات الأخرى

تعمل Logic Apps مع أنواع المحتويات الأخرى وتدعمها، ولكنها قد تتطلب منك الحصول على نص الرسالة يدويًا عن طريق فك تشفير المتغير $content.

على سبيل المثال، افترض أنه تم تشغيل تطبيق المنطق الخاص بك عن طريق طلب بنوع المحتوى application/x-www-url-formencoded. للحفاظ على جميع البيانات، يحتوي المتغير $content في نص الطلب على حمولة مشفرة كسلسلة base64:

CustomerName=Frank&Address=123+Avenue

نظرًا لأن الطلب ليس نصًا عاديًا أو JSON، يتم تخزين الطلب في الإجراء على النحو التالي:

"body": {
   "$content-type": "application/x-www-url-formencoded",
   "$content": "AAB1241BACDFA=="
}

توفر Logic Apps دالات أصلية للتعامل مع بيانات النموذج، على سبيل المثال:

أو يمكنك الوصول إلى البيانات يدويًا باستخدام تعبير مثل هذا المثال:

@string(body('formdataAction'))

إذا أردت أن يكون للطلب الصادر نفس عنوان نوع المحتوى application/x-www-url-formencoded، يمكنك إضافة الطلب إلى نص الإجراء دون أي إرسال باستخدام تعبير مثل @body('formdataAction'). ومع ذلك، لا تعمل هذه الطريقة إلا عندما يكون النص هو المعامل الوحيد في الإدخال body. إذا حاولت استخدام التعبير @body('formdataAction') في طلب application/json، فسيظهر لك خطأ في وقت التشغيل لأن النص يتم إرساله مشفرًا.