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

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

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

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

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

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

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

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

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

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

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

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

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;
}