En esta guía, se explica cómo crear una variable dinámica.
Cuando sea posible, una variable se debe definir de forma estática en el archivo de manifiesto como una variable de entrada o de salida. Sin embargo, algunas situaciones requieren una variable que solo se puede definir cuando el usuario configura el flujo, ya que la naturaleza de la entrada varía. Por ejemplo, la cantidad de preguntas y respuestas (y su contenido) de un formulario de Google no se puede determinar hasta que se selecciona un formulario específico durante la configuración del flujo.
Las variables dinámicas tienen en cuenta estos casos, ya que te permiten definir una entrada que produce un conjunto dinámico de salidas en el archivo de manifiesto y en el código del paso.
Define la variable de salida en el archivo de manifiesto
En el archivo de manifiesto, sigue estos pasos:
- En - inputs[], especifica una variable de entrada que acepte un valor de entrada dinámico.
- En - outputs[], especifica una variable de salida que devuelva un conjunto dinámico de variables de salida. Asigna a este resultado un- dataTypede- "workflowResourceDefinitionId": "dynamic_resource_id".
- Define un recurso personalizado para controlar la variable dinámica. Especifica - workflowResourceDefinitionscon- "resourceType": "DYNAMIC"y- "providerFunction": "onDynamicProviderFunction". El- iddebe coincidir con el- workflowResourceDefinitionIdestablecido en- outputs[]. Para obtener más información sobre los recursos personalizados, consulta Cómo definir un recurso personalizado.
- Establece - dynamicResourceDefinitionProvideren el nombre de una función correspondiente en el código del paso, en este ejemplo- onDynamicDefinitionFunction(), que define y devuelve una tarjeta de configuración que acepta un valor de entrada dinámico y devuelve un recurso personalizado.
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",
}
Cómo definir la variable de salida en el código
El código del paso incluye estas funciones:
- onDynamicVariableConfigFunction(), que compila y devuelve una tarjeta de configuración con un widget de entrada dinámico. El nombre de esta función debe coincidir con el valor de- onConfigFunction()en el archivo de manifiesto. El nombre del widget de entrada dinámica debe coincidir con el- idestablecido en el archivo de manifiesto. Este widget de entrada dinámica permite a los usuarios establecer una variable dinámica cuando configuran su flujo, como elegir un formulario de Google.
- onDynamicVariableExecuteFunction(), que devuelve los datos de la variable dinámica como resultado cuando se ejecuta el paso. El nombre de esta función debe coincidir con el valor de- onExecuteFunction()en el archivo de manifiesto. El- variableIdde- returnOutputVariablesActiondebe coincidir con el- idde la variable de salida establecido en el archivo de manifiesto. El recurso dinámico se encuentra en el objeto del evento de flujo en- e.workflow.resourceFieldsDefinitionRetrieval. La entrada no puede hacer referencia a variables porque todas las entradas de un recurso dinámico deben estar disponibles en el momento de la configuración.
- onDynamicDefinitionFunction(), que recupera los datos de la variable dinámica del objeto de evento de flujo, específicamente- resourceFieldsDefinitionRetrieval, y devuelve- resourceFieldsDefinitionRetrievedAction, que proporciona los datos en formato JSON utilizable como resultado para pasos posteriores. El- resourceIddebe coincidir con el- idde un elemento en el array- workflowResourceDefinitions[]establecido en el archivo de manifiesto.
- onDynamicProviderFunction(), que recupera la variable dinámica del objeto de evento de flujo en- e.workflow.resourceRetrieval.resourceReference.resourceIdy devuelve JSON como resultado para pasos posteriores.
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",
          })
        }
      }
    }
  };
}
Temas relacionados
- Variables de entrada
- Cómo validar una variable de entrada
- Variables de salida
- Define un recurso personalizado
- Registra la actividad y los errores
- Objeto de evento de flujo