একটি গতিশীল চলক সংজ্ঞায়িত করুন

এই নির্দেশিকাটি ব্যাখ্যা করে কিভাবে একটি গতিশীল চলক তৈরি করতে হয়।

যখন সম্ভব হয়, ম্যানিফেস্ট ফাইলে একটি ভেরিয়েবলকে স্ট্যাটিকভাবে ইনপুট অথবা আউটপুট ভেরিয়েবল হিসেবে সংজ্ঞায়িত করা উচিত। তবে, কিছু পরিস্থিতিতে এমন একটি ভেরিয়েবলের প্রয়োজন হয় যা শুধুমাত্র তখনই সংজ্ঞায়িত করা যেতে পারে যখন ব্যবহারকারী ফ্লো কনফিগার করে কারণ ইনপুটের প্রকৃতি পরিবর্তিত হয়। উদাহরণস্বরূপ, ফ্লো কনফিগারেশনের সময় একটি নির্দিষ্ট ফর্ম নির্বাচন না করা পর্যন্ত Google Forms-এর জন্য প্রশ্ন এবং উত্তরের সংখ্যা (এবং তাদের বিষয়বস্তু) নির্ধারণ করা যাবে না।

এই কেসগুলির জন্য ডায়নামিক ভেরিয়েবলগুলি আপনাকে এমন একটি ইনপুট সংজ্ঞায়িত করতে দেয় যা ম্যানিফেস্ট ফাইল এবং ধাপের কোডে আউটপুটের একটি গতিশীল সেট তৈরি করে।

ম্যানিফেস্ট ফাইলে আউটপুট ভেরিয়েবল নির্ধারণ করুন

ম্যানিফেস্ট ফাইলে, এই পদক্ষেপগুলি অনুসরণ করুন:

  • inputs[] তে, একটি ইনপুট ভেরিয়েবল নির্দিষ্ট করুন যা একটি গতিশীল ইনপুট মান গ্রহণ করে।

  • outputs[] তে, একটি আউটপুট ভেরিয়েবল নির্দিষ্ট করুন যা আউটপুট ভেরিয়েবলের একটি গতিশীল সেট প্রদান করে। এই আউটপুটটিকে "workflowResourceDefinitionId" এর একটি dataType দিন "workflowResourceDefinitionId": "dynamic_resource_id"

  • ডায়নামিক ভেরিয়েবল পরিচালনা করার জন্য একটি কাস্টম রিসোর্স নির্ধারণ করুন। "resourceType": "DYNAMIC" এবং "providerFunction": "onDynamicProviderFunction" দিয়ে workflowResourceDefinitions নির্দিষ্ট করুন। id অবশ্যই outputs[] এ সেট করা workflowResourceDefinitionId এর সাথে মিলবে। কাস্টম রিসোর্স সম্পর্কে আরও জানতে, একটি কাস্টম রিসোর্স সংজ্ঞায়িত করুন দেখুন।

  • ধাপের কোডে, এই উদাহরণে onDynamicDefinitionFunction() এর অনুরূপ ফাংশনের নামে dynamicResourceDefinitionProvider সেট করুন, যা একটি কনফিগারেশন কার্ড সংজ্ঞায়িত করে এবং ফেরত দেয় যা একটি ডায়নামিক ইনপুট মান গ্রহণ করে এবং একটি কাস্টম রিসোর্স ফেরত দেয়।

JSON সম্পর্কে

{
  "timeZone": "America/Toronto",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "addOns": {
    "common": {
      "name": "Dynamic Variable Demo",
      "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
      "useLocaleFromApp": true
    },
    "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": "INTEGER"
                }
              }
            ],
            "outputs": [
              {
                "id": "dynamic_resource_output",
                "description": "Dynamic Data",
                "cardinality": "SINGLE",
                "dataType": {
                  "resourceType": {
                    "workflowResourceDefinitionId": "resource_definition_1"
                  }
                }
              }
            ],
            "onConfigFunction": "onDynamicVariableConfigFunction",
            "onExecuteFunction": "onDynamicVariableExecuteFunction"
          }
        }
      ],
      "workflowResourceDefinitions": [
        {
          "id": "resource_definition_1",
          "name": "Dynamic Resource",
          "providerFunction": "onDynamicProviderFunction",
          "resourceType": "DYNAMIC"
        }
      ],
      "dynamicResourceDefinitionProvider": "onDynamicDefinitionFunction"
    }
  }
}

কোডে আউটপুট ভেরিয়েবল সংজ্ঞায়িত করুন

ধাপের কোডে এই ফাংশনগুলি অন্তর্ভুক্ত রয়েছে:

  • onDynamicVariableConfigFunction() , যা একটি ডায়নামিক ইনপুট উইজেট সহ একটি কনফিগারেশন কার্ড তৈরি করে এবং ফেরত দেয়। এই ফাংশনের নাম ম্যানিফেস্ট ফাইলে onConfigFunction() এর মানের সাথে মিলতে হবে। ডায়নামিক ইনপুট উইজেটের নাম ম্যানিফেস্ট ফাইলে সেট করা id সাথে মিলতে হবে। এই ডায়নামিক ইনপুট উইজেট ব্যবহারকারীদের তাদের প্রবাহ কনফিগার করার সময় একটি ডায়নামিক ভেরিয়েবল সেট করতে দেয়, যেমন একটি Google ফর্ম নির্বাচন করা।
  • onDynamicVariableExecuteFunction() , যা ধাপটি চালানোর সময় আউটপুট হিসেবে ডায়নামিক ভেরিয়েবল ডেটা ফেরত দেয়। এই ফাংশনের নাম অবশ্যই ম্যানিফেস্ট ফাইলে onExecuteFunction() এর মানের সাথে মিলবে। returnOutputVariablesAction এর variableId অবশ্যই ম্যানিফেস্ট ফাইলে সেট করা আউটপুট ভেরিয়েবলের id সাথে মিলবে। e.workflow.resourceFieldsDefinitionRetrieval এ flow event object এ ডায়নামিক রিসোর্স পাওয়া যাবে। ইনপুটটি ভেরিয়েবলগুলিকে রেফারেন্স করতে পারে না কারণ একটি ডায়নামিক রিসোর্সের জন্য সমস্ত ইনপুট কনফিগারেশনের সময় উপলব্ধ থাকতে হবে।
  • onDynamicDefinitionFunction() , যা ফ্লো ইভেন্ট অবজেক্ট থেকে, বিশেষ করে resourceFieldsDefinitionRetrieval থেকে গতিশীল পরিবর্তনশীল ডেটা পুনরুদ্ধার করে এবং resourceFieldsDefinitionRetrievedAction প্রদান করে যা পরবর্তী ধাপগুলির জন্য আউটপুট হিসাবে ব্যবহারযোগ্য JSON-এ ডেটা সরবরাহ করে। resourceId অবশ্যই ম্যানিফেস্ট ফাইলে সেট করা workflowResourceDefinitions[] অ্যারেতে থাকা একটি আইটেমের id সাথে মিলবে।
  • onDynamicProviderFunction() , যা e.workflow.resourceRetrieval.resourceReference.resourceId এ ফ্লো ইভেন্ট অবজেক্ট থেকে ডায়নামিক ভেরিয়েবল উদ্ধার করে এবং পরবর্তী ধাপগুলির জন্য JSON আউটপুট হিসেবে প্রদান করে।

অ্যাপস স্ক্রিপ্ট

function onDynamicVariableConfigFunction() {
  let section = CardService.newCardSection()
    .addWidget(
      CardService.newTextInput()
        .setFieldName("dynamic_resource_input")
        .setTitle("Dynamic Resource Input")
        .setHint("Input a Integer value between 1 and 3\(inclusive\) for corresponding number of output variables")
    );

  const card = CardService.newCardBuilder()
    .addSection(section)
    .build();

  return card;
}

function onDynamicDefinitionFunction(e) {
  console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
  var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];

  let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
    .setResourceId("resource_definition_1")
    .addResourceField(
      AddOnsResponseService.newResourceField()
        .setSelector("question_1")
        .setDisplayText("Question 1")
    );

  if (input_value == 2 || input_value == 3) {
    resourceDefinitions = resourceDefinitions
      .addResourceField(
        AddOnsResponseService.newResourceField()
          .setSelector("question_2")
          .setDisplayText("Question 2")
      );
  }
  if (input_value == 3) {
    resourceDefinitions = resourceDefinitions
      .addResourceField(
        AddOnsResponseService.newResourceField()
          .setSelector("question_3")
          .setDisplayText("Question 3")
      );
  }

  let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
    .addDynamicResourceDefinition(resourceDefinitions);

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  let renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}

function onDynamicVariableExecuteFunction(e) {
  console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));

  let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
    .setVariableDataMap({
      "dynamic_resource_output": AddOnsResponseService.newVariableData()
        .addResourceReference("my_dynamic_resource_id")
    });

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  let renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}

function onDynamicProviderFunction(e) {
  console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));

  // resourceId == "my_dynamic_resource_id"
  var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
  // workflowResourceDefinitionId == "resource_definition_1"
  var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;

  const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
    .setResourceData(
      AddOnsResponseService.newResourceData()
        .addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
        .addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
        .addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
    );

  const hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  const renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}