डाइनैमिक वैरिएबल तय करना

इस गाइड में डाइनैमिक वैरिएबल बनाने का तरीका बताया गया है.

जब भी मुमकिन हो, वैरिएबल को मेनिफ़ेस्ट फ़ाइल में स्टैटिक तौर पर इस तरह से तय किया जाना चाहिए: इनपुट वैरिएबल, आउटपुट वैरिएबल या कस्टम संसाधन. हालांकि, कुछ स्थितियों में ऐसे वैरिएबल की ज़रूरत होती है जिसे सिर्फ़ तब तय किया जा सकता है, जब उपयोगकर्ता एजेंट को कॉन्फ़िगर करता है. ऐसा इसलिए, क्योंकि इनपुट का टाइप अलग-अलग होता है. उदाहरण के लिए, Google फ़ॉर्म के लिए सवालों और जवाबों की संख्या (और उनका कॉन्टेंट) तब तक तय नहीं की जा सकती, जब तक एजेंट कॉन्फ़िगरेशन के दौरान कोई फ़ॉर्म नहीं चुना जाता.

डाइनैमिक वैरिएबल की मदद से, इन मामलों को ध्यान में रखा जाता है. इनकी मदद से, मेनिफ़ेस्ट फ़ाइल और चरण के कोड में ऐसा इनपुट तय किया जा सकता है जिससे डाइनैमिक आउटपुट का सेट जनरेट होता है.

मेनिफ़ेस्ट फ़ाइल में आउटपुट वैरिएबल तय करना

मेनिफ़ेस्ट फ़ाइल में जाकर, यह तरीका अपनाएं:

  • inputs[] में, ऐसा इनपुट वैरिएबल तय करें जो डाइनैमिक इनपुट वैल्यू स्वीकार करता हो.

  • outputs[] में, ऐसा आउटपुट वैरिएबल तय करें जो आउटपुट वैरिएबल का डाइनैमिक सेट दिखाता हो. इस आउटपुट को dataType में से "workflowResourceDefinitionId": "dynamic_resource_id" दें.

  • डाइनैमिक वैरिएबल को मैनेज करने के लिए, कस्टम रिसॉर्स तय करें. "resourceType": "DYNAMIC" और "providerFunction": "onDynamicProviderFunction" के साथ workflowResourceDefinitions तय करें. 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 से मेल खाना चाहिए. इस डाइनैमिक इनपुट विजेट की मदद से उपयोगकर्ता, अपने चरण को कॉन्फ़िगर करते समय डाइनैमिक वैरिएबल सेट कर सकते हैं. जैसे, Google फ़ॉर्म चुनना.
  • onDynamicVariableExecuteFunction(), जो चरण के चलने पर डाइनैमिक वैरिएबल डेटा को आउटपुट के तौर पर दिखाता है. इस फ़ंक्शन का नाम, मेनिफ़ेस्ट फ़ाइल में onExecuteFunction() की वैल्यू से मेल खाना चाहिए. returnOutputVariablesAction में मौजूद variableData की कुंजी, मेनिफ़ेस्ट फ़ाइल में सेट किए गए आउटपुट वैरिएबल के id से मेल खानी चाहिए. डाइनैमिक संसाधन, इवेंट ऑब्जेक्ट में e.workflow.resourceFieldsDefinitionRetrieval पर मौजूद है. इनपुट, वैरिएबल का रेफ़रंस नहीं दे सकता, क्योंकि डाइनैमिक संसाधन के सभी इनपुट, कॉन्फ़िगरेशन के समय उपलब्ध होने चाहिए.
  • onDynamicDefinitionFunction(), जो इवेंट ऑब्जेक्ट से डाइनैमिक वैरिएबल डेटा को फ़ेच करता है. खास तौर पर, resourceFieldsDefinitionRetrieval से और resourceFieldsDefinitionRetrievedAction दिखाता है. यह बाद के चरणों के लिए आउटपुट वैरिएबल का नाम देता है. साथ ही, यह सिलेक्टर भी देता है, ताकि onDynamicProviderFunction() हर आउटपुट वैरिएबल को उससे जुड़ी वैल्यू दे सके. resourceId, मेनिफ़ेस्ट फ़ाइल में सेट किए गए workflowResourceDefinitions[] ऐरे में मौजूद किसी आइटम के id से मेल खाना चाहिए.
  • onDynamicProviderFunction(), जो resourceId और workflowResourceDefinitionId को ऐक्सेस करके, कुंजियों के तौर पर सिलेक्टर का इस्तेमाल करके हर आउटपुट वैरिएबल के लिए वैल्यू उपलब्ध कराता है.

Apps Script

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