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

এই নির্দেশিকায় একটি ডাইনামিক ভ্যারিয়েবল তৈরি করার পদ্ধতি ব্যাখ্যা করা হয়েছে।

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

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

ম্যানিফেস্ট ফাইলে আউটপুট ভেরিয়েবলটি সংজ্ঞায়িত করুন।

ম্যানিফেস্ট ফাইলে নিম্নলিখিত বিষয়গুলো কনফিগার করুন:

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

  • outputs[] -এর মধ্যে এমন একটি আউটপুট ভেরিয়েবল নির্দিষ্ট করুন যা একাধিক ডাইনামিক আউটপুট ভেরিয়েবল রিটার্ন করবে। এই আউটপুটের ` dataType হিসেবে "workflowResourceDefinitionId": "dynamic_resource_id" দিন।

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

  • স্টেপের কোডে থাকা সংশ্লিষ্ট ফাংশনের নামে 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": "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 এর সাথে মিলতে হবে। এই ডাইনামিক ইনপুট উইজেটটি ব্যবহারকারীদের তাদের ধাপ কনফিগার করার সময়, যেমন একটি গুগল ফর্ম বেছে নেওয়ার ক্ষেত্রে, একটি ডাইনামিক ভেরিয়েবল সেট করতে দেয়।
  • onDynamicVariableExecuteFunction , যা স্টেপটি চলার সময় আউটপুট হিসাবে ডাইনামিক ভেরিয়েবলের ডেটা ফেরত দেয়। এই ফাংশনের নামটি অবশ্যই ম্যানিফেস্ট ফাইলের onExecuteFunction এর মানের সাথে মিলতে হবে। returnOutputVariablesAction এর variableData কী-টি অবশ্যই ম্যানিফেস্ট ফাইলে সেট করা আউটপুট ভেরিয়েবলের id সাথে মিলতে হবে। ডাইনামিক রিসোর্সটি ইভেন্ট অবজেক্টের e.workflow.resourceFieldsDefinitionRetrieval এ পাওয়া যায়। ইনপুট ভেরিয়েবল রেফারেন্স করতে পারে না, কারণ একটি ডাইনামিক রিসোর্সের জন্য সমস্ত ইনপুট কনফিগারেশনের সময় উপলব্ধ থাকতে হবে।
  • onDynamicDefinitionFunction , যা ইভেন্ট অবজেক্ট, বিশেষত resourceFieldsDefinitionRetrieval থেকে ডাইনামিক ভেরিয়েবলের ডেটা পুনরুদ্ধার করে এবং resourceFieldsDefinitionRetrievedAction রিটার্ন করে। এই অ্যাকশনটি পরবর্তী ধাপগুলোর জন্য আউটপুট ভেরিয়েবলের নাম এবং সিলেক্টর সরবরাহ করে, যাতে onDynamicProviderFunction প্রতিটি আউটপুট ভেরিয়েবলের জন্য সংশ্লিষ্ট মান প্রদান করতে পারে। resourceId অবশ্যই ম্যানিফেস্ট ফাইলে সেট করা workflowResourceDefinitions[] অ্যারের কোনো একটি আইটেমের id সাথে মিলতে হবে।
  • onDynamicProviderFunction , যা resourceId এবং workflowResourceDefinitionId অ্যাক্সেস করে সিলেক্টরকে কী (key) হিসেবে ব্যবহার করে প্রতিটি আউটপুট ভেরিয়েবলের জন্য একটি মান প্রদান করে।

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

function onDynamicVariableConfigFunction() {
  let section = CardService.newCardSection()
    .addWidget(
      CardService.newTextInput()
        .setFieldName("dynamic_resource_input")
        .setTitle("Dynamic Resource Input")
        .setHint("Enter an integer value between 1 and 3 (inclusive) for the 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;
}