تعریف یک متغیر پویا

این راهنما نحوه ایجاد یک متغیر پویا را توضیح می‌دهد.

در صورت امکان، یک متغیر باید به صورت ایستا در فایل مانیفست به عنوان یک متغیر ورودی یا خروجی تعریف شود. با این حال، برخی موقعیت‌ها به متغیری نیاز دارند که فقط هنگام پیکربندی جریان توسط کاربر قابل تعریف باشد زیرا ماهیت ورودی متفاوت است. به عنوان مثال، تعداد سوالات و پاسخ‌ها (و محتوای آنها) برای یک فرم گوگل تا زمانی که یک فرم خاص در طول پیکربندی جریان انتخاب نشود، قابل تعیین نیست.

متغیرهای پویا با امکان تعریف ورودی که مجموعه‌ای پویا از خروجی‌ها را در فایل مانیفست و در کد هر مرحله تولید می‌کند، این موارد را در نظر می‌گیرند.

متغیر خروجی را در فایل مانیفست تعریف کنید

در فایل مانیفست، مراحل زیر را دنبال کنید:

  • در inputs[] ، یک متغیر ورودی مشخص کنید که یک مقدار ورودی پویا را بپذیرد.

  • در outputs[] ، یک متغیر خروجی مشخص کنید که مجموعه‌ای پویا از متغیرهای خروجی را برمی‌گرداند. به این خروجی، dataType برابر با "workflowResourceDefinitionId": "dynamic_resource_id" بدهید.

  • یک منبع سفارشی برای مدیریت متغیر پویا تعریف کنید. workflowResourceDefinitions با "resourceType": "DYNAMIC" و "providerFunction": "onDynamicProviderFunction" مشخص کنید. id باید با workflowResourceDefinitionId تنظیم شده در outputs[] مطابقت داشته باشد. برای کسب اطلاعات بیشتر در مورد منابع سفارشی، به بخش تعریف یک منبع سفارشی مراجعه کنید.

  • dynamicResourceDefinitionProvider برابر با نام تابع مربوطه در کد مرحله قرار دهید، در این مثال onDynamicDefinitionFunction() ، که یک کارت پیکربندی را تعریف و برمی‌گرداند که یک مقدار ورودی پویا را می‌پذیرد و یک منبع سفارشی را برمی‌گرداند.

جی‌سون

"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 تنظیم شده در فایل مانیفست مطابقت داشته باشد. این ویجت ورودی پویا به کاربران اجازه می‌دهد هنگام پیکربندی جریان خود، مانند انتخاب یک فرم گوگل، یک متغیر پویا تنظیم کنند.
  • 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",
          })
        }
      }
    }
  };
}