Z tego przewodnika dowiesz się, jak utworzyć zmienną dynamiczną.
Jeśli to możliwe, zmienna powinna być zdefiniowana statycznie w pliku manifestu jako albo zmienna wejściowa, zmienna wyjściowa, albo zasób niestandardowy. W niektórych sytuacjach wymagana 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 w pliku manifestu i w kodzie kroku danych wejściowych, które generują dynamiczny zestaw danych wyjściowych.
Definiowanie zmiennej wyjściowej w pliku manifestu
W pliku manifestu skonfiguruj te ustawienia:
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 zestaw zmiennych wyjściowych. Nadaj tej zmiennej wyjściowejdataTypeo"workflowResourceDefinitionId": "dynamic_resource_id".Zdefiniuj zasób niestandardowy do obsługi zmiennej dynamicznej. Określ
workflowResourceDefinitionsz"resourceType": "DYNAMIC"i"providerFunction": "onDynamicProviderFunction".idmusi być zgodny zworkflowResourceDefinitionIdustawionym 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",
}
Definiowanie zmiennej wyjściowej w kodzie
Kod kroku zawiera te funkcje:
onDynamicVariableConfigFunction, która tworzy i zwraca kartę konfiguracji z dynamicznym widżetem wejściowym. Nazwa tej funkcji musi być zgodna z wartościąonConfigFunctionw pliku manifestu. Nazwa dynamicznego widżetu wejściowego musi być zgodna zidustawionym w pliku manifestu. Ten dynamiczny widżet wejściowy umożliwia użytkownikom ustawienie zmiennej dynamicznej 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 zidzmiennej wyjściowej ustawionym w pliku manifestu. Zasób dynamiczny znajduje się w obiekcie zdarzenia pod adreseme.workflow.resourceFieldsDefinitionRetrieval. Dane wejściowe nie mogą odwoływać się do zmiennych, ponieważ wszystkie dane wejściowe zasobu dynamicznego muszą być dostępne w czasie konfiguracji.onDynamicDefinitionFunction, która pobiera dane zmiennej dynamicznej z obiektu zdarzenia, w szczególnościresourceFieldsDefinitionRetrieval, i zwracaresourceFieldsDefinitionRetrievedAction, która zawiera nazwę zmiennych wyjściowych na potrzeby późniejszych kroków, a także selektory, dzięki którymonDynamicProviderFunctionmoże podać odpowiednią wartość dla każdej zmiennej wyjściowej.resourceIdmusi być zgodny zidelementu w tablicyworkflowResourceDefinitions[]ustawionej w pliku manifestu.onDynamicProviderFunction, która podaje wartość dla każdej zmiennej wyjściowej, używając selektorów jako kluczy, poprzez dostęp doresourceIdiworkflowResourceDefinitionId.
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