Panduan ini menjelaskan cara menentukan resource kustom untuk Google Workspace Studio.
Resource kustom adalah struktur data kustom yang dapat Anda tentukan untuk mengelompokkan beberapa variabel. Jika output langkah memiliki struktur statis, tampilkan dengan resource kustom. Misalnya, untuk membuat prospek CRM, output Anda memerlukan beberapa variabel:
- Alamat email
- Alamat
- Nama
Untuk memastikan keberadaan semua data yang diperlukan untuk membuat prospek CRM, keluarkan resource kustom yang berisi alamat email, alamat jalan, dan nama.
Menampilkan resource kustom sebagai referensi
Dengan menampilkan resource kustom sebagai referensi, Anda dapat menampilkan resource kustom berdasarkan ID-nya, bukan objek resource kustom lengkap. Jika resource kustom berukuran besar atau kompleks, meneruskan hanya ID akan meningkatkan performa dengan mengurangi data yang ditransfer antar-langkah.
Untuk menampilkan resource kustom sebagai referensi, edit file manifes dan kode langkah.
Mengedit file manifes
Dalam file manifes:
Tentukan
workflowResourceDefinitionsdan tetapkanid, arrayfields[], danproviderFunction.workflowResourceDefinitionsadalah struktur yang menentukan jenis data dan konten resource kustom.Dalam array
fields[], Anda menentukan masing-masing kolom yang membentuk resource kustom, dalam contoh ini disebutfield_1danfield_2.Nilai
providerFunctionharus cocok dengan nama fungsi dalam kode langkah.providerFunctionmengambil konten resource kustom yang sebenarnya jika diperlukan.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" } ] }Di
outputs[], tentukan variabel output yang menampilkan kumpulan variabel output dinamis. Variabel output memilikidataTypedengan propertiresourceType. NilaicardinalityharusSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
Berikut adalah file manifes lengkap yang menentukan resource kustom:
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"
}
]
}
}
}
Edit kode
Dalam kode aplikasi:
Terapkan
providerFunction, yang disebutonMessageResourceFunction()dalam contoh ini, yang mengambil konten resource kustom saat diperlukan. Tindakan ini mengambil inputeyang merupakan payload JSON objek peristiwa langkah, dan dari sana menetapkan ID resource kustom.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(); }Fungsi penyedia harus menampilkan nilai resource kustom dengan mengambilnya menggunakan mekanisme yang sesuai, seperti memanggil API atau membaca database.
Untuk mengambil dan menampilkan resource kustom berdasarkan ID-nya, tampilkan sebagai
returnOutputVariablesAction, seperti yang ditunjukkan dalamonExecuteResourceFunction().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(); }
Berikut contoh lengkapnya:
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();
}
Topik terkait
- Variabel input
- Memvalidasi variabel input
- Variabel output
- Mencatat aktivitas dan error
- Objek peristiwa Workspace Studio