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

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

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

تطبيق/json

تقوم Logic Apps بتخزين أي طلب ومعالجته باستخدام نوع محتوى التطبيق/json ككائن تدوين جافا سكريبت (JSON). بشكل افتراضي، يمكنك تحليل محتوى JSON بدون أي إرسال. لتحليل طلب يحتوي على رأس بنوع المحتوى "تطبيق/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 Apps القدرة على إنشاء رموز مميزة سهلة الاستخدام تمثل الخصائص الموجودة في محتوى JSON حتى تتمكن من الرجوع إلى هذه الخصائص واستخدامها بسهولة أكبر في سير عمل تطبيقك المنطقي.

  • مشغل الطلب

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

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

    1. في مشغل الطلب، حدد استخدام عينة الحمولة لإنشاء مخطط.

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

      Screenshot that shows the

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

      Provide sample JSON payload

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

      "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. في طلبك، تأكد من تضمين Content-Type رأس وتعيين قيمة الرأس إلى application/json.

  • تحليل عمل JSON

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

    Parse 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())

التطبيق/xml والتطبيق/التدفق الثماني

تحافظ التطبيقات المنطقية دائما على Content-Type طلب أو استجابة HTTP المستلمة. لذلك إذا تلقى تطبيقك المنطقي محتوى مع تعيين إلى ، وقمت بتضمين Content-Typeapplication/octet-streamهذا المحتوى في إجراء لاحق دون إرسال ، فقد تم Content-Type تعيين الطلب الصادر أيضا على application/octet-stream. وبهذه الطريقة، يمكن للتطبيقات المنطقية ضمان عدم ضياع البيانات أثناء التنقل عبر سير العمل. ومع ذلك، يتم تخزين حالة الإجراء، أو المدخلات والمخرجات، في كائن 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=="
}

توفر التطبيقات المنطقية وظائف أصلية للتعامل مع بيانات النموذج، على سبيل المثال:

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

@string(body('formdataAction'))

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