คู่มือนี้อธิบายวิธีกำหนดทรัพยากรที่กำหนดเองสำหรับ Google Workspace Studio
ทรัพยากรที่กำหนดเองคือโครงสร้างข้อมูลที่กำหนดเองซึ่งคุณกำหนดขึ้นเพื่อจัดกลุ่มตัวแปรหลายรายการเข้าด้วยกัน เมื่อเอาต์พุตของขั้นตอนมีโครงสร้างแบบคงที่ ให้แสดงเอาต์พุตนั้นด้วยทรัพยากรที่กำหนดเอง ตัวอย่างเช่น หากต้องการสร้างโอกาสในการขายใน CRM เอาต์พุตของคุณต้องมีตัวแปรหลายรายการ ดังนี้
- ที่อยู่อีเมล
- ที่อยู่
- ชื่อ
หากต้องการให้มีข้อมูลทั้งหมดที่จำเป็นในการสร้างโอกาสในการขายใน CRM ให้ออกเอาต์พุตเป็นทรัพยากรที่กำหนดเองซึ่งมีอีเมล ที่อยู่ และชื่อ
ออกเอาต์พุตเป็นทรัพยากรที่กำหนดเองเพื่อใช้เป็นข้อมูลอ้างอิง
การออกเอาต์พุตเป็นทรัพยากรที่กำหนดเองเพื่อใช้เป็นข้อมูลอ้างอิงจะช่วยให้คุณแสดงผลทรัพยากรที่กำหนดเองตามรหัสแทนที่จะเป็นออบเจ็กต์ทรัพยากรที่กำหนดเองแบบเต็ม หากทรัพยากรที่กำหนดเองมีขนาดใหญ่หรือซับซ้อน การส่งเฉพาะรหัสจะช่วยปรับปรุงประสิทธิภาพโดยลดข้อมูลที่โอนระหว่างขั้นตอนต่างๆ
หากต้องการออกเอาต์พุตเป็นทรัพยากรที่กำหนดเองเพื่อใช้เป็นข้อมูลอ้างอิง ให้แก้ไขไฟล์ Manifest และโค้ดของขั้นตอน
แก้ไขไฟล์ Manifest
ในไฟล์ Manifest ให้ทำดังนี้
ระบุ
workflowResourceDefinitionsแล้วกำหนดid, อาร์เรย์fields[]และproviderFunctionให้กับworkflowResourceDefinitionsworkflowResourceDefinitionsคือโครงสร้างที่กำหนดประเภทข้อมูลและเนื้อหาของทรัพยากรที่กำหนดเองภายในอาร์เรย์
fields[]ให้ระบุฟิลด์แต่ละรายการที่ประกอบขึ้นเป็นทรัพยากรที่กำหนดเอง ในตัวอย่างนี้คือfield_1และfield_2ค่าของ
providerFunctionต้องตรงกับชื่อฟังก์ชันในโค้ดของขั้นตอนproviderFunctionจะดึงเนื้อหาทรัพยากรที่กำหนดเองจริงเมื่อจำเป็นJSON
{ "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ต้องเป็นSINGLEJSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
ต่อไปนี้คือไฟล์ Manifest ที่สมบูรณ์ซึ่งกำหนดทรัพยากรที่กำหนดเอง
JSON
{
"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ซึ่งเป็น เพย์โหลด JSON ของออบเจ็กต์เหตุการณ์ของขั้นตอน และ ตั้งค่ารหัสทรัพยากรที่กำหนดเองจากอินพุตดังกล่าวApps Script
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 หรือการอ่านฐานข้อมูล
หากต้องการดึงและแสดงผลทรัพยากรที่กำหนดเองตามรหัส ให้แสดงผลเป็น
returnOutputVariablesActionดังที่แสดงในonExecuteResourceFunction()Apps Script
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(); }
ต่อไปนี้คือตัวอย่างที่สมบูรณ์
Apps Script
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();
}
หัวข้อที่เกี่ยวข้อง
- ตัวแปรอินพุต
- ตรวจสอบตัวแปรอินพุต
- ตัวแปรเอาต์พุต
- บันทึกกิจกรรมและข้อผิดพลาด
- ออบเจ็กต์เหตุการณ์ของ Workspace Studio