В этом руководстве объясняется, как создать динамическую переменную.
По возможности переменную следует статически определять в файле манифеста как входную переменную , выходную переменную или пользовательский ресурс . Однако в некоторых ситуациях требуется переменная, которую можно определить только при настройке потока пользователем, поскольку характер входных данных может меняться. Например, количество вопросов и ответов (и их содержимое) для формы 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("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;
}
Связанные темы
- Входные переменные
- Проверить входную переменную
- Выходные переменные
- Определите пользовательский ресурс
- Журналы активности и ошибок
- Объекты событий Workspace Studio