Este guia explica como criar uma variável dinâmica.
Sempre que possível, uma variável deve ser definida estaticamente no arquivo de manifesto como uma variável de entrada ou de saída. No entanto, algumas situações exigem uma variável que só pode ser definida quando o usuário configura o fluxo, porque a natureza da entrada varia. Por exemplo, o número de perguntas e respostas (e o conteúdo delas) de um Formulário Google só pode ser determinado quando um formulário específico é selecionado durante a configuração do fluxo.
As variáveis dinâmicas consideram esses casos, permitindo que você defina uma entrada que produz um conjunto dinâmico de saídas no arquivo de manifesto e no código da etapa.
Definir a variável de saída no arquivo de manifesto
No arquivo de manifesto, siga estas etapas:
Em
inputs[], especifique uma variável de entrada que aceite um valor de entrada dinâmico.Em
outputs[], especifique uma variável de saída que retorne um conjunto dinâmico de variáveis de saída. Dê a essa saída umdataTypede"workflowResourceDefinitionId": "dynamic_resource_id".Defina um recurso personalizado para processar a variável dinâmica. Especifique
workflowResourceDefinitionscom"resourceType": "DYNAMIC"e"providerFunction": "onDynamicProviderFunction". Oidprecisa corresponder aoworkflowResourceDefinitionIddefinido emoutputs[]. Para saber mais sobre recursos personalizados, consulte Definir um recurso personalizado.Defina
dynamicResourceDefinitionProvidercomo o nome de uma função correspondente no código da etapa. Neste exemplo,onDynamicDefinitionFunction(), que define e retorna um card de configuração que aceita um valor de entrada dinâmico e retorna um 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",
}
Definir a variável de saída no código
O código da etapa inclui estas funções:
onDynamicVariableConfigFunction(), que cria e retorna um card de configuração com um widget de entrada dinâmica. O nome dessa função precisa corresponder ao valor deonConfigFunction()no arquivo de manifesto. O nome do widget de entrada dinâmica precisa corresponder aoiddefinido no arquivo de manifesto. Com esse widget de entrada dinâmica, os usuários podem definir uma variável dinâmica ao configurar o fluxo, como escolher um Formulário Google.onDynamicVariableExecuteFunction(), que retorna os dados da variável dinâmica como saída quando a etapa é executada. O nome dessa função precisa corresponder ao valor deonExecuteFunction()no arquivo de manifesto. OvariableIddereturnOutputVariablesActionprecisa corresponder aoidda variável de saída definido no arquivo de manifesto. O recurso dinâmico é encontrado no objeto de evento de fluxo eme.workflow.resourceFieldsDefinitionRetrieval. A entrada não pode referenciar variáveis porque todas as entradas de um recurso dinâmico precisam estar disponíveis no momento da configuração.onDynamicDefinitionFunction(), que extrai os dados da variável dinâmica do objeto de evento de fluxo, especificamenteresourceFieldsDefinitionRetrieval, e retornaresourceFieldsDefinitionRetrievedAction, que fornece os dados em JSON utilizável como saída para etapas posteriores. OresourceIdprecisa corresponder aoidde um item na matrizworkflowResourceDefinitions[]definida no arquivo de manifesto.onDynamicProviderFunction(), que extrai a variável dinâmica do objeto de evento de fluxo eme.workflow.resourceRetrieval.resourceReference.resourceIde retorna JSON como saída para etapas 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
- Variáveis de entrada
- Validar uma variável de entrada
- Variáveis de saída
- Definir um recurso personalizado
- Registrar atividades e erros
- Objeto de evento de fluxo