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

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

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

Apps Script

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",
          })
        }
      }
    }
  };
}