Z tego przewodnika dowiesz się, jak utworzyć zmienną dynamiczną.
Jeśli to możliwe, zmienną należy zdefiniować statycznie w pliku manifestu jako zmienną wejściową lub wyjściową. 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 liczby pytań i odpowiedzi (oraz ich treści) w Formularzach Google nie można określić, 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 wykonaj te czynności:
W
inputs[]określ zmienną wejściową, która akceptuje dynamiczną wartość wejściową.W
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 do obsługi zmiennej dynamicznej. 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
{
"timeZone": "America/Toronto",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Dynamic Variable Demo",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
"useLocaleFromApp": true
},
"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ąonConfigFunction()w pliku manifestu. Nazwa dynamicznego widżetu wejściowego musi być zgodna z wartościąidustawioną w pliku manifestu. Ten dynamiczny widżet wejściowy umożliwia użytkownikom ustawianie dynamicznej zmiennej podczas konfigurowania przepływu, np. wybieranie 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ąonExecuteFunction()w pliku manifestu. WartośćvariableIdwreturnOutputVariablesActionmusi być zgodna z wartościąidzmiennej wyjściowej ustawioną w pliku manifestu. Zasób dynamiczny znajduje się w obiekcie zdarzenia przepływu 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 przepływu, a konkretnieresourceFieldsDefinitionRetrieval, i zwracaresourceFieldsDefinitionRetrievedAction, które udostępnia dane w formacie JSON do wykorzystania w dalszych krokach. WartośćresourceIdmusi być zgodna z wartościąidelementu w tablicyworkflowResourceDefinitions[]ustawionej w pliku manifestu.onDynamicProviderFunction(), która pobiera zmienną dynamiczną z obiektu zdarzenia przepływu we.workflow.resourceRetrieval.resourceReference.resourceIdi zwraca dane wyjściowe w formacie JSON na potrzeby kolejnych kroków.
Google Apps Script
function onDynamicVariableConfigFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextInput()
.setFieldName("dynamic_resource_input")
.setTitle("Dynamic Resource Input")
.setHint("Input a Integer value between 1 and 3\(inclusive\) for 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
- Obiekt zdarzenia przepływu