این راهنما نحوه تعریف منابع سفارشی برای Google Workspace Studio را توضیح میدهد.
منابع سفارشی، ساختارهای داده سفارشی هستند که میتوانید برای گروهبندی چندین متغیر با هم تعریف کنید. وقتی خروجی یک مرحله ساختار ثابتی دارد، آن را با یک منبع سفارشی نمایش دهید. برای مثال، برای ایجاد یک سرنخ CRM، خروجی شما به چندین متغیر نیاز دارد:
- آدرس ایمیل
- آدرس خیابان
- نام
برای اطمینان از وجود تمام دادههای مورد نیاز برای ایجاد سرنخ CRM، یک منبع سفارشی حاوی آدرس ایمیل، آدرس خیابان و نام را خروجی دهید.
خروجی یک منبع سفارشی به عنوان مرجع
با خروجی دادن یک منبع سفارشی به عنوان مرجع، میتوانید منبع سفارشی را به جای کل شیء منبع سفارشی، با شناسهاش برگردانید. اگر یک منبع سفارشی بزرگ یا پیچیده باشد، ارسال فقط شناسه با کاهش دادههای منتقل شده بین مراحل، عملکرد را بهبود میبخشد.
برای خروجی گرفتن از یک منبع سفارشی به عنوان مرجع، فایل و کد مانیفست مربوط به هر مرحله را ویرایش کنید.
فایل مانیفست را ویرایش کنید
در فایل مانیفست:
یک
workflowResourceDefinitionsمشخص کنید و یکid، یک آرایهfields[]و یکproviderFunctionبه آن اختصاص دهید.workflowResourceDefinitionsساختاری است که انواع دادهها و محتوای منبع سفارشی را تعریف میکند.درون آرایه
fields[]، فیلدهای منفردی که منبع سفارشی را تشکیل میدهند، مشخص میکنید که در این مثالfield_1وfield_2نامیده میشوند.مقدار
providerFunctionباید با نام تابع در کد مرحله مطابقت داشته باشد.providerFunctionدر صورت نیاز، محتوای منبع سفارشی واقعی را بازیابی میکند.جیسون
{ "workflowResourceDefinitions": [ { "id": "resource_id", "name": "Custom Resource", "fields": [ { "selector": "field_1", "name": "Field 1", "dataType": { "basicType": "STRING" } }, { "selector": "field_2", "name": "Field 2", "dataType": { "basicType": "STRING" } } ], "providerFunction": "onMessageResourceFunction" } ] }در
outputs[]، یک متغیر خروجی مشخص کنید که مجموعهای پویا از متغیرهای خروجی را برمیگرداند. متغیر خروجی دارای یکdataTypeبا ویژگیresourceTypeاست. مقدارcardinalityبایدSINGLEباشد.جیسون
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
در اینجا یک فایل مانیفست کامل وجود دارد که یک منبع سفارشی را تعریف میکند:
جیسون
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Custom Resource (as reference)",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceDataReference",
"state": "ACTIVE",
"name": "Custom Resource (as reference)",
"description": "Output a custom resource as a reference",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_id"
}
}
}
],
"onConfigFunction": "onConfigResourceFunction",
"onExecuteFunction": "onExecuteResourceFunction"
}
}
],
"workflowResourceDefinitions": [
{
"id": "resource_id",
"name": "Custom Resource",
"fields": [
{
"selector": "field_1",
"name": "Field 1",
"dataType": {
"basicType": "STRING"
}
},
{
"selector": "field_2",
"name": "Field 2",
"dataType": {
"basicType": "STRING"
}
}
],
"providerFunction": "onMessageResourceFunction"
}
]
}
}
}
کد را ویرایش کنید
در کد برنامه:
تابع
providerFunctionکه در این مثالonMessageResourceFunction()نامیده میشود، پیادهسازی کنید. این تابع در صورت نیاز، محتوای منابع سفارشی را بازیابی میکند. این تابع ورودیeرا که همان شیء رویداد مرحله (step) از نوع JSON است، دریافت میکند و از آن، شناسه منبع سفارشی را تنظیم میکند.اسکریپت برنامهها
function onMessageResourceFunction(e) { console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e)); var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; let fieldValue_1; let fieldValue_2; // Using a if-condition to mock a database call. if (resource_id == "sample_resource_reference_id") { fieldValue_1 = AddOnsResponseService.newVariableData() .addStringValue("value1"); fieldValue_2 = AddOnsResponseService.newVariableData() .addStringValue("value2"); } else { fieldValue_1 = AddOnsResponseService.newVariableData() .addStringValue("field_1 value not found"); fieldValue_2 = AddOnsResponseService.newVariableData() .addStringValue("field_2 value not found"); } let resourceData = AddOnsResponseService.newResourceData() .addVariableData("field_1", fieldValue_1) .addVariableData("field_2", fieldValue_2) let workflowAction = AddOnsResponseService.newResourceRetrievedAction() .setResourceData(resourceData) let hostAppAction = AddOnsResponseService.newHostAppAction() .setWorkflowAction(workflowAction); return AddOnsResponseService.newRenderActionBuilder() .setHostAppAction(hostAppAction) .build(); }تابع ارائه دهنده باید مقدار منبع سفارشی را با بازیابی آن با یک مکانیسم مناسب، مانند فراخوانی یک API یا خواندن یک پایگاه داده، برگرداند.
برای بازیابی و بازگرداندن یک منبع سفارشی بر اساس شناسه (ID)، آن را به صورت
returnOutputVariablesActionبرگردانید، همانطور که درonExecuteResourceFunction()نشان داده شده است.اسکریپت برنامهها
function onExecuteResourceFunction(e) { console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e)); let outputVariables = AddOnsResponseService.newVariableData() .addResourceReference("sample_resource_reference_id"); let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction() .addVariableData("resource_data", outputVariables); let hostAppAction = AddOnsResponseService.newHostAppAction() .setWorkflowAction(workflowAction); return AddOnsResponseService.newRenderActionBuilder() .setHostAppAction(hostAppAction) .build(); }
اینم یه مثال کامل:
اسکریپت برنامهها
function onConfigResourceFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextParagraph()
.setText("This is the Custom Resource Demo card")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onMessageResourceFunction(e) {
console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e));
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
let fieldValue_1;
let fieldValue_2;
// Using a if-condition to mock a database call.
if (resource_id == "sample_resource_reference_id") {
fieldValue_1 = AddOnsResponseService.newVariableData()
.addStringValue("value1");
fieldValue_2 = AddOnsResponseService.newVariableData()
.addStringValue("value2");
} else {
fieldValue_1 = AddOnsResponseService.newVariableData()
.addStringValue("field_1 value not found");
fieldValue_2 = AddOnsResponseService.newVariableData()
.addStringValue("field_2 value not found");
}
let resourceData = AddOnsResponseService.newResourceData()
.addVariableData("field_1", fieldValue_1)
.addVariableData("field_2", fieldValue_2)
let workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(resourceData)
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
function onExecuteResourceFunction(e) {
console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e));
let outputVariables = AddOnsResponseService.newVariableData()
.addResourceReference("sample_resource_reference_id");
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.addVariableData("resource_data", outputVariables);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
مباحث مرتبط
- متغیرهای ورودی
- اعتبارسنجی یک متغیر ورودی
- متغیرهای خروجی
- ثبت فعالیتها و خطاها
- اشیاء رویداد استودیوی فضای کاری