تحديد متغيّر ديناميكي

يوضّح هذا الدليل كيفية إنشاء متغيّر ديناميكي.

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

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

تحديد متغيّر الإخراج في ملف البيان

في ملف البيان، اتّبِع الخطوات التالية:

  • في inputs[]، حدِّد متغيّر إدخال يقبل قيمة إدخال ديناميكية.

  • في outputs[]، حدِّد متغيّر إخراج يعرض مجموعة ديناميكية من متغيّرات الإخراج. أعطِ هذه النتيجة dataType من "workflowResourceDefinitionId": "dynamic_resource_id".

  • حدِّد مرجعًا مخصّصًا للتعامل مع المتغيّر الديناميكي. حدِّد workflowResourceDefinitions باستخدام "resourceType": "DYNAMIC" و"providerFunction": "onDynamicProviderFunction". يجب أن يتطابق id مع workflowResourceDefinitionId المحدّد في outputs[]. لمزيد من المعلومات حول الموارد المخصّصة، اطّلِع على مقالة تحديد مورد مخصّص.

  • اضبط dynamicResourceDefinitionProvider على اسم دالة مقابلة في رمز الخطوة، مثل onDynamicDefinitionFunction() في هذا المثال، الذي يحدّد بطاقة إعدادات ويعرضها وتقبل هذه البطاقة قيمة إدخال ديناميكية وتعرض موردًا مخصّصًا.

JSON

"flows": {
  "workflowElements" : [{
    "id": "getDynamicVariable",
    "state": "ACTIVE",
    "name": "Get Dynamic Variable",
    "description": "Get Dynamic Variable",
    "workflowAction": {
    "inputs": [
      {
          "id": "dynamic_resource_input",
          "description": "Dynamic Resource Input",
          "cardinality": "SINGLE",
          "dataType": {
            "basicType": "STRING"
          }
       }
      ],
      "outputs": [
        {
          "id": "dynamic_resource_output",
          "description": "Dynamic Data",
          "cardinality": "SINGLE",
          "dataType": {
            "resourceType": {
              "workflowResourceDefinitionId": "dynamic_resource_id"
            }
          }
        }
      ],
      "onConfigFunction": "onDynamicVariableConfigFunction",
      "onExecuteFunction": "onDynamicVariableExecuteFunction"
    }
  }],
  "workflowResourceDefinitions": [{
    "id": "dynamic_resource_id",
    "name": "Dynamic Resource",
    "providerFunction": "onDynamicProviderFunction",
    "resourceType" : "DYNAMIC"
  }],
  "dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}

تحديد متغيّر الإخراج في الرمز

يتضمّن رمز الخطوة الوظائف التالية:

  • onDynamicVariableConfigFunction()، الذي ينشئ بطاقة إعداد ويعرضها مع تطبيق مصغّر لإدخال البيانات بشكل ديناميكي. يجب أن يتطابق اسم هذه الدالة مع قيمة onConfigFunction() في ملف البيان. يجب أن يتطابق اسم أداة الإدخال الديناميكية مع id المحدّد في ملف البيان. تتيح أداة الإدخال الديناميكية هذه للمستخدمين ضبط متغيّر ديناميكي عند إعداد سير العمل، مثل اختيار نموذج Google.
  • onDynamicVariableExecuteFunction()، التي تعرض بيانات المتغيّر الديناميكي كناتج عند تنفيذ الخطوة. يجب أن يتطابق اسم هذه الدالة مع قيمة onExecuteFunction() في ملف البيان. يجب أن يتطابق variableId الخاص بـ returnOutputVariablesAction مع id الخاص بمتغير الإخراج الذي تم ضبطه في ملف البيان. يمكن العثور على المرجع الديناميكي في عنصر حدث التدفق على e.workflow.resourceFieldsDefinitionRetrieval. لا يمكن أن يشير الإدخال إلى متغيرات لأنّه يجب أن تتوفّر جميع الإدخالات الخاصة بمورد ديناميكي في وقت الإعداد.
  • onDynamicDefinitionFunction()، التي تسترد بيانات المتغير الديناميكي من عنصر حدث المسار، وتحديدًا resourceFieldsDefinitionRetrieval، وتعرض resourceFieldsDefinitionRetrievedAction التي توفّر البيانات بتنسيق JSON صالح للاستخدام كناتج للخطوات اللاحقة. يجب أن يتطابق resourceId مع id الخاص بعنصر في مصفوفة workflowResourceDefinitions[] المحدّدة في ملف البيان.
  • onDynamicProviderFunction()، التي تسترد المتغيّر الديناميكي من عنصر حدث سير العمل في e.workflow.resourceRetrieval.resourceReference.resourceId وتعرض JSON كنتيجة للخطوات اللاحقة.

برمجة التطبيقات

function onDynamicVariableConfigFunction() {
  var card = {
    "sections": [
      {
        "widgets": [
          {
            "textInput": {
              "name": "dynamic_resource_input",
              "label": "Dynamic Resource Input",
            }
          },
        ]
      }
    ]
  };
  return {
    "action": {
      "navigations": [{
        "push_card": card
      }]
    }
  };
}

function onDynamicVariableExecuteFunction(){
  var dynamic_resource_id = uuidv4();
  return {
    "hostAppAction": {
      "workflowAction": {
        "returnOutputVariablesAction": {
          "variableValues": [{
            "variableId": "dynamic_resource_output",
            "variableData": {
              "resourceReferences" : [ dynamic_resource_id ]
            }
          }]
        }
      }
    }
  };
}

function onDynamicDefinitionFunction(e) {
  var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.stringValues[0];
  // input_value == "dynamic_resource_input"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceFieldsDefinitionRetrievedAction": {
          "dynamicResourceDefinitions": [{
            "resourceId": "dynamic_resource_id",
            "fields": [{
                "selector":  "question_1",
                "displayText": "Question 1"
            },{
                "selector":  "question_2",
                "displayText": "Question 2"
            },{
                "selector":  "question_3",
                "displayText": "Question 3"
            }]
          }]
        }
      }
    }
  };
}

function onDynamicProviderFunction(e) {
  var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
  // resourceId == uuidv4();

  var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
  // workflowResourceDefinitionId == "dynamic_resource_id"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceRetrievedAction": {
          "resourceJson": JSON.stringify({
            "question_1": "Answer 1",
            "question_2": "Answer 2",
            "question_3": "Answer 3",
          })
        }
      }
    }
  };
}