این راهنما نحوه ایجاد یک متغیر پویا را توضیح میدهد.
در صورت امکان، یک متغیر باید به صورت ایستا در فایل مانیفست به عنوان یک متغیر ورودی یا خروجی تعریف شود. با این حال، برخی موقعیتها به متغیری نیاز دارند که فقط هنگام پیکربندی جریان توسط کاربر قابل تعریف باشد زیرا ماهیت ورودی متفاوت است. به عنوان مثال، تعداد سوالات و پاسخها (و محتوای آنها) برای یک فرم گوگل تا زمانی که یک فرم خاص در طول پیکربندی جریان انتخاب نشود، قابل تعیین نیست.
متغیرهای پویا با امکان تعریف ورودی که مجموعهای پویا از خروجیها را در فایل مانیفست و در کد هر مرحله تولید میکند، این موارد را در نظر میگیرند.
متغیر خروجی را در فایل مانیفست تعریف کنید
در فایل مانیفست، مراحل زیر را دنبال کنید:
در
inputs[]، یک متغیر ورودی مشخص کنید که یک مقدار ورودی پویا را بپذیرد.در
outputs[]، یک متغیر خروجی مشخص کنید که مجموعهای پویا از متغیرهای خروجی را برمیگرداند. به این خروجی،dataTypeبرابر با"workflowResourceDefinitionId": "dynamic_resource_id"بدهید.یک منبع سفارشی برای مدیریت متغیر پویا تعریف کنید.
workflowResourceDefinitionsبا"resourceType": "DYNAMIC"و"providerFunction": "onDynamicProviderFunction"مشخص کنید.idباید باworkflowResourceDefinitionIdتنظیم شده درoutputs[]مطابقت داشته باشد. برای کسب اطلاعات بیشتر در مورد منابع سفارشی، به بخش تعریف یک منبع سفارشی مراجعه کنید.dynamicResourceDefinitionProviderبرابر با نام تابع مربوطه در کد مرحله قرار دهید، در این مثالonDynamicDefinitionFunction()، که یک کارت پیکربندی را تعریف و برمیگرداند که یک مقدار ورودی پویا را میپذیرد و یک منبع سفارشی را برمیگرداند.
جیسون
{
"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"
}
}
}
متغیر خروجی را در کد تعریف کنید
کد این مرحله شامل این توابع است:
-
onDynamicVariableConfigFunction()که یک کارت پیکربندی با یک ویجت ورودی پویا میسازد و برمیگرداند. نام این تابع باید با مقدارonConfigFunction()در فایل مانیفست مطابقت داشته باشد. نام ویجت ورودی پویا باید باidتنظیم شده در فایل مانیفست مطابقت داشته باشد. این ویجت ورودی پویا به کاربران اجازه میدهد هنگام پیکربندی جریان خود، مانند انتخاب یک فرم گوگل، یک متغیر پویا تنظیم کنند. -
onDynamicVariableExecuteFunction() که دادههای متغیر پویا را هنگام اجرای مرحله به عنوان خروجی برمیگرداند. نام این تابع باید با مقدارonExecuteFunction() در فایل مانیفست مطابقت داشته باشد.variableIdidتابعreturnOutputVariablesActionباید با شناسه متغیر خروجی تنظیم شده در فایل مانیفست مطابقت داشته باشد. منبع پویا در شیء رویداد جریان درe.workflow.resourceFieldsDefinitionRetrievalیافت میشود. ورودی نمیتواند به متغیرها ارجاع دهد زیرا همه ورودیهای یک منبع پویا باید در زمان پیکربندی در دسترس باشند. -
onDynamicDefinitionFunction()دادههای متغیر پویا را از شیء رویداد جریان، بهویژهresourceFieldsDefinitionRetrieval، بازیابی میکند وresourceFieldsDefinitionRetrievedActionرا برمیگرداند که دادهها را در قالب JSON قابل استفاده به عنوان خروجی برای مراحل بعدی ارائه میدهد.resourceIdباید باidیک آیتم در آرایهworkflowResourceDefinitions[]که در فایل مانیفست تنظیم شده است، مطابقت داشته باشد. onDynamicProviderFunction()متغیر پویا را از شیء رویداد جریان درe.workflow.resourceRetrieval.resourceReference.resourceIdبازیابی میکند و JSON را به عنوان خروجی برای مراحل بعدی برمیگرداند.
اسکریپت برنامهها
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;
}
مباحث مرتبط
- متغیرهای ورودی
- اعتبارسنجی یک متغیر ورودی
- متغیرهای خروجی
- تعریف منبع سفارشی
- ثبت فعالیتها و خطاها
- شیء رویداد جریان