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 undataTypede"workflowResourceDefinitionId": "dynamic_resource_id".Define un recurso personalizado para controlar la variable dinámica. Especifica
workflowResourceDefinitionscon"resourceType": "DYNAMIC"y"providerFunction": "onDynamicProviderFunction". Eliddebe coincidir con elworkflowResourceDefinitionIdestablecido enoutputs[]. 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 ejemploonDynamicDefinitionFunction(), 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 deonConfigFunction()en el archivo de manifiesto. El nombre del widget de entrada dinámica debe coincidir con elidestablecido 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 deonExecuteFunction()en el archivo de manifiesto. ElvariableIddereturnOutputVariablesActiondebe coincidir con elidde la variable de salida establecido en el archivo de manifiesto. El recurso dinámico se encuentra en el objeto del evento de flujo ene.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íficamenteresourceFieldsDefinitionRetrieval, y devuelveresourceFieldsDefinitionRetrievedAction, que proporciona los datos en formato JSON utilizable como resultado para pasos posteriores. ElresourceIddebe coincidir con elidde un elemento en el arrayworkflowResourceDefinitions[]establecido en el archivo de manifiesto.onDynamicProviderFunction(), que recupera la variable dinámica del objeto de evento de flujo ene.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