В этом руководстве объясняется, как создать динамическую переменную.
По возможности переменную следует статически определять в файле манифеста как входную переменную , выходную переменную или пользовательский ресурс . Однако в некоторых ситуациях требуется переменная, которую можно определить только при настройке потока пользователем, поскольку характер входных данных может меняться. Например, количество вопросов и ответов (и их содержимое) для формы Google Forms нельзя определить до тех пор, пока не будет выбрана конкретная форма во время настройки потока.
Динамические переменные учитывают эти случаи, позволяя определять входные данные, которые приводят к динамическому набору выходных данных, как в файле манифеста, так и в коде шага.
Определите выходную переменную в файле манифеста.
В файле манифеста выполните следующие действия:
В
inputs[]укажите входную переменную, которая принимает динамическое входное значение.В
outputs[]укажите выходную переменную, которая возвращает динамический набор выходных переменных. Присвойте этой выходной переменнойdataType"workflowResourceDefinitionId": "dynamic_resource_id".Определите пользовательский ресурс для обработки динамической переменной. Укажите
workflowResourceDefinitionsсо"resourceType": "DYNAMIC"и"providerFunction": "onDynamicProviderFunction".idдолжен совпадать сworkflowResourceDefinitionId, заданным вoutputs[]. Для получения дополнительной информации о пользовательских ресурсах см. раздел «Определение пользовательского ресурса» .Установите
dynamicResourceDefinitionProviderравным имени соответствующей функции в коде шага, в этом примереonDynamicDefinitionFunction(), которая определяет и возвращает карточку конфигурации, принимающую динамическое входное значение и возвращающую пользовательский ресурс.
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",
}
Определите выходную переменную в коде.
В код этого шага включены следующие функции:
- Функция
onDynamicVariableConfigFunction()создает и возвращает карточку конфигурации с динамическим виджетом ввода. Имя этой функции должно совпадать со значениемonConfigFunction()в файле манифеста. Имя динамического виджета ввода должно совпадать сidзаданным в файле манифеста. Этот динамический виджет ввода позволяет пользователям устанавливать динамическую переменную при настройке шага, например, при выборе формы Google. -
onDynamicVariableExecuteFunction()возвращает данные динамической переменной в качестве выходных данных при выполнении шага. Имя этой функции должно совпадать со значениемonExecuteFunction()в файле манифеста. КлючvariableDataвreturnOutputVariablesActionдолжен совпадать сidвыходной переменной, заданным в файле манифеста. Динамический ресурс находится в объекте события по адресуe.workflow.resourceFieldsDefinitionRetrieval. Входные данные не могут ссылаться на переменные, поскольку все входные данные для динамического ресурса должны быть доступны на этапе настройки. -
onDynamicDefinitionFunction()извлекает данные динамических переменных из объекта события, а именноresourceFieldsDefinitionRetrieval, и возвращаетresourceFieldsDefinitionRetrievedAction, который предоставляет имена выходных переменных для последующих шагов, а также селекторы, чтобы функцияonDynamicProviderFunction()могла присвоить соответствующее значение каждой выходной переменной.resourceIdдолжен совпадать сidэлемента в массивеworkflowResourceDefinitions[]заданном в файле манифеста. Функция
onDynamicProviderFunction()предоставляет значение для каждой выходной переменной, используя селекторы в качестве ключей, путем доступа кresourceIdиworkflowResourceDefinitionId.
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;
}
Связанные темы
- Входные переменные
- Проверить входную переменную
- Выходные переменные
- Определите пользовательский ресурс
- Журналы активности и ошибок
- Объекты событий Workspace Studio