Definisci una variabile dinamica

Questa guida spiega come creare una variabile dinamica.

Se possibile, una variabile deve essere definita staticamente nel file manifest come variabile di input o di output. Tuttavia, alcune situazioni richiedono una variabile che può essere definita solo quando l'utente configura il flusso perché la natura dell'input varia. Ad esempio, il numero di domande e risposte (e il loro contenuto) per un Modulo Google non può essere determinato finché non viene selezionato un modulo specifico durante la configurazione del flusso.

Le variabili dinamiche tengono conto di questi casi consentendoti di definire un input che produce un insieme dinamico di output nel file manifest e nel codice del passaggio.

Definisci la variabile di output nel file manifest

Nel file manifest, segui questi passaggi:

  • In inputs[], specifica una variabile di input che accetta un valore di input dinamico.

  • In outputs[], specifica una variabile di output che restituisce un insieme dinamico di variabili di output. Assegna a questo output un dataType di "workflowResourceDefinitionId": "dynamic_resource_id".

  • Definisci una risorsa personalizzata per gestire la variabile dinamica. Specifica workflowResourceDefinitions con "resourceType": "DYNAMIC" e "providerFunction": "onDynamicProviderFunction". id deve corrispondere a workflowResourceDefinitionId impostato in outputs[]. Per scoprire di più sulle risorse personalizzate, consulta Definire una risorsa personalizzata.

  • Imposta dynamicResourceDefinitionProvider sul nome di una funzione corrispondente nel codice del passaggio, in questo esempio onDynamicDefinitionFunction(), che definisce e restituisce una scheda di configurazione che accetta un valore di input dinamico e restituisce una risorsa personalizzata.

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

Definisci la variabile di output nel codice

Il codice del passaggio include le seguenti funzioni:

  • onDynamicVariableConfigFunction(), che crea e restituisce una scheda di configurazione con un widget di input dinamico. Il nome di questa funzione deve corrispondere al valore di onConfigFunction() nel file manifest. Il nome del widget di input dinamico deve corrispondere a id impostato nel file manifest. Questo widget di input dinamico consente agli utenti di impostare una variabile dinamica durante la configurazione del flusso, ad esempio la scelta di un modulo Google.
  • onDynamicVariableExecuteFunction(), che restituisce i dati della variabile dinamica come output quando viene eseguito il passaggio. Il nome di questa funzione deve corrispondere al valore di onExecuteFunction() nel file manifest. Il variableId di returnOutputVariablesAction deve corrispondere al id della variabile di output impostato nel file manifest. La risorsa dinamica si trova nell'oggetto evento del flusso in e.workflow.resourceFieldsDefinitionRetrieval. L'input non può fare riferimento a variabili perché tutti gli input per una risorsa dinamica devono essere disponibili al momento della configurazione.
  • onDynamicDefinitionFunction(), che recupera i dati delle variabili dinamiche dall'oggetto evento del flusso, in particolare resourceFieldsDefinitionRetrieval, e restituisce resourceFieldsDefinitionRetrievedAction che fornisce i dati in formato JSON utilizzabile come output per i passaggi successivi. resourceId deve corrispondere a id di un elemento nell'array workflowResourceDefinitions[] impostato nel file manifest.
  • onDynamicProviderFunction(), che recupera la variabile dinamica dall'oggetto evento di flusso in e.workflow.resourceRetrieval.resourceReference.resourceId e restituisce JSON come output per i passaggi successivi.

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