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