Z tego przewodnika dowiesz się, jak utworzyć zmienną dynamiczną.
Jeśli to możliwe, zmienna powinna być statycznie zdefiniowana w pliku manifestu jako zmienna wejściowa, zmienna wyjściowa lub zasób niestandardowy. W niektórych sytuacjach potrzebna jest jednak zmienna, którą można zdefiniować tylko wtedy, gdy użytkownik skonfiguruje przepływ, ponieważ charakter danych wejściowych jest różny. Na przykład liczba pytań i odpowiedzi (oraz ich treść) w Formularzach Google nie może zostać określona, dopóki podczas konfigurowania przepływu nie zostanie wybrany konkretny formularz.
Zmienne dynamiczne uwzględniają te przypadki, umożliwiając zdefiniowanie danych wejściowych, które generują dynamiczny zestaw danych wyjściowych w pliku manifestu i w kodzie kroku.
Zdefiniuj zmienną wyjściową w pliku manifestu
W pliku manifestu skonfiguruj te ustawienia:
W
inputs[]określ zmienną wejściową, która akceptuje dynamiczną wartość wejściową.W polu
outputs[]określ zmienną wyjściową, która zwraca dynamiczny zbiór zmiennych wyjściowych. Nadaj temu wynikowi wartośćdataType"workflowResourceDefinitionId": "dynamic_resource_id".Zdefiniuj zasób niestandardowy, który będzie obsługiwać zmienną dynamiczną. Określ
workflowResourceDefinitionsza pomocą"resourceType": "DYNAMIC"i"providerFunction": "onDynamicProviderFunction". Wartośćidmusi być zgodna z wartościąworkflowResourceDefinitionIdustawioną woutputs[]. Więcej informacji o zasobach niestandardowych znajdziesz w artykule Definiowanie zasobu niestandardowego.Ustaw
dynamicResourceDefinitionProviderna nazwę odpowiedniej funkcji w kodzie kroku, w tym przykładzieonDynamicDefinitionFunction, która definiuje i zwraca kartę konfiguracji akceptującą dynamiczną wartość wejściową i zwracającą zasób niestandardowy.
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": "INTEGER"
}
}
],
"outputs": [
{
"id": "dynamic_resource_output",
"description": "Dynamic Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_definition_1"
}
}
}
],
"onConfigFunction": "onDynamicVariableConfigFunction",
"onExecuteFunction": "onDynamicVariableExecuteFunction"
}
}],
"workflowResourceDefinitions": [{
"id": "resource_definition_1",
"name": "Dynamic Resource",
"providerFunction": "onDynamicProviderFunction",
"resourceType" : "DYNAMIC"
}],
"dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}
Zdefiniuj zmienną wyjściową w kodzie
Kod kroku zawiera te funkcje:
onDynamicVariableConfigFunction, która tworzy i zwraca kartę konfiguracji z dynamicznym widżetem wprowadzania danych. Nazwa tej funkcji musi być zgodna z wartościąonConfigFunctionw pliku manifestu. Nazwa dynamicznego widżetu wejściowego musi być zgodna z nazwąidustawioną w pliku manifestu. Ten dynamiczny widżet wejściowy umożliwia użytkownikom ustawienie dynamicznej zmiennej podczas konfigurowania kroku, np. wybranie Formularza Google.onDynamicVariableExecuteFunction, która zwraca dane zmiennej dynamicznej jako dane wyjściowe po uruchomieniu kroku. Nazwa tej funkcji musi być zgodna z wartościąonExecuteFunctionw pliku manifestu. KluczvariableDatawreturnOutputVariablesActionmusi być zgodny ze zmienną wyjściowąidustawioną w pliku manifestu. Zasób dynamiczny znajduje się w obiekcie zdarzenia w lokalizacjie.workflow.resourceFieldsDefinitionRetrieval. Dane wejściowe nie mogą odwoływać się do zmiennych, ponieważ wszystkie dane wejściowe dla zasobu dynamicznego muszą być dostępne w momencie konfiguracji.onDynamicDefinitionFunction, która pobiera dane zmiennej dynamicznej z obiektu zdarzenia, w szczególnościresourceFieldsDefinitionRetrieval, i zwracaresourceFieldsDefinitionRetrievedAction, która zawiera nazwy zmiennych wyjściowych na potrzeby późniejszych kroków, a także selektory, dzięki którym funkcjaonDynamicProviderFunctionmoże podać odpowiednią wartość dla każdej zmiennej wyjściowej. WartośćresourceIdmusi być zgodna z wartościąidelementu w tablicyworkflowResourceDefinitions[]ustawionej w pliku manifestu.onDynamicProviderFunction, która podaje wartość każdej zmiennej wyjściowej za pomocą selektorów jako kluczy, uzyskując dostęp doresourceIdiworkflowResourceDefinitionId.
Google Apps Script
function onDynamicVariableConfigFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextInput()
.setFieldName("dynamic_resource_input")
.setTitle("Dynamic Resource Input")
.setHint("Enter an integer value between 1 and 3 (inclusive) for the corresponding number of output variables")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onDynamicDefinitionFunction(e) {
console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];
let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
.setResourceId("resource_definition_1")
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_1")
.setDisplayText("Question 1")
);
if (input_value == 2 || input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_2")
.setDisplayText("Question 2")
);
}
if (input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_3")
.setDisplayText("Question 3")
);
}
let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
.addDynamicResourceDefinition(resourceDefinitions);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicVariableExecuteFunction(e) {
console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.setVariableDataMap({
"dynamic_resource_output": AddOnsResponseService.newVariableData()
.addResourceReference("my_dynamic_resource_id")
});
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicProviderFunction(e) {
console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));
// resourceId == "my_dynamic_resource_id"
var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
// workflowResourceDefinitionId == "resource_definition_1"
var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(
AddOnsResponseService.newResourceData()
.addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
.addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
.addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
);
const hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
const renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
Powiązane artykuły
- Zmienne wejściowe
- Sprawdzanie poprawności zmiennej wejściowej
- Zmienne wyjściowe
- Definiowanie zasobu niestandardowego
- Rejestrowanie aktywności i błędów
- Obiekty zdarzeń Workspace Studio