Z tego przewodnika dowiesz się, jak utworzyć zmienną dynamiczną.
W miarę możliwości zmienna powinna być zdefiniowana statycznie 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 agenta, 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 agenta 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
workflowResourceDefinitionsz wartościami"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ąonConfigFunction()w 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ąonExecuteFunction()w pliku manifestu. KluczvariableDatawreturnOutputVariablesActionmusi być zgodny ze zmienną wyjściowąidustawioną 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 dla zasobu dynamicznego muszą być dostępne w momencie konfiguracji.onDynamicDefinitionFunction(), która pobiera dane zmiennej dynamicznej z obiektu zdarzenia, a konkretnieresourceFieldsDefinitionRetrieval, i zwracaresourceFieldsDefinitionRetrievedAction, która zawiera nazwy zmiennych wyjściowych na potrzeby późniejszych kroków, a także selektory, dzięki którym funkcjaonDynamicProviderFunction()moż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("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
- Obiekty zdarzeń Workspace Studio