本指南介绍了如何为 Google Workspace Flows 定义自定义资源。
自定义资源是您可以定义的自定义数据结构,用于将多个变量分组在一起。例如,如需创建 CRM 潜在客户,请传递包含电子邮件地址、街道地址和名称的自定义资源。
您可以通过以下两种方式定义自定义资源:
- 作为引用:当您将自定义资源作为引用输出时,您会按 ID 返回自定义资源,而不是返回完整的自定义资源对象。这可以通过减少流步骤之间传输的数据来提高性能。当数据需要进行二次查找时,返回其 ID 对于执行这些查找非常有用。
- 作为值:如果必须在执行期间检索数据,或者自定义资源较小且不包含敏感数据,请使用此方法。
以引用的形式输出自定义资源
通过将自定义资源作为引用输出,您可以按 ID 返回自定义资源,而不是返回完整的自定义资源对象。如果自定义资源较大或较复杂,则仅传递 ID 可减少流程步骤之间的数据传输,从而提高性能。
如需将自定义资源作为参考输出,请修改相应步骤的清单文件和代码。
修改清单文件
在清单文件中:
指定一个
workflowResourceDefinitions并为其分配一个id、一个fields[]数组和一个providerFunction。workflowResourceDefinitions是一种结构,用于定义自定义资源的数据类型和内容。在
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的值必须为SINGLE。JSON
"outputs": [{ "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } }]
以下是定义自定义资源的完整清单文件:
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"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 载荷,并从中设置自定义资源 ID。Apps 脚本
function onMessageResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; var field_1 = ...; var field_2 = ...; return { "hostAppAction": { "workflowAction": { "resourceRetrievedAction": { "resourceJson": JSON.stringify({ "field_1": field_1, "field_2": field_2, }) } } } }; }提供程序函数必须通过适当的机制(例如调用 API 或读取数据库)检索自定义资源的值,然后返回该值。
如需按自定义资源的 ID 检索并返回该资源,请将其作为
returnOutputVariablesAction返回,如onExecuteResourceFunction()中所示。Apps 脚本
function onExecuteResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; return { "hostAppAction": { "workflowAction": { "returnOutputVariablesAction": { "variableValues": [{ "variableId": "resource_data", "variableData": { "resourceReferences" : [ resource_id ] } }] } } } }; }
以下是完整的示例:
Apps 脚本
function onMessageResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
var field_1 = ...;
var field_2 = ...;
return {
"hostAppAction": {
"workflowAction": {
"resourceRetrievedAction": {
"resourceJson": JSON.stringify({
"field_1": field_1,
"field_2": field_2,
})
}
}
}
};
}
function onExecuteResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceReferences" : [ resource_id ]
}
}]
}
}
}
};
}
将自定义资源作为值输出
将自定义资源作为引用输出时,您会按 ID 返回自定义资源,而不是返回完整的自定义资源对象。如果您需要传递整个资源对象,可以使用 resourceValues。
在 resourceValues 中,您可以定义某个步骤的输出。
如需将自定义资源作为值输出,请修改相应步骤的清单文件和代码。
修改清单文件
在清单文件中:
指定
workflowResourceDefinitions并为其分配 ID。workflowResourceDefinitions是一种结构,用于定义自定义资源的数据类型和内容。在workflowResourceDefinitions中,您可以指定构成自定义资源的各个字段,在本例中为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": "onExecuteResourceAsValuesFunction" } ] }在
outputs[]中,指定一个返回resourceValues的输出变量。cardinality的值必须为SINGLE。JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceValues": { "value1": "value one" } } } ] }
以下是定义自定义资源的完整清单文件:
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceValues": {
"value1": "value one"
}
}
}
],
"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": "onExecuteResourceAsValuesFunction"
}
]
}
}
}
修改代码
在应用代码中,实现 providerFunction(在本示例中称为 onExecuteResourceAsValuesFunction()),该方法会以 JSON 格式定义并返回自定义资源,在此处抽象为 resourceJSON:
Apps 脚本
function onExecuteResourceAsValuesFunction() {
var field_1 = "value 1";
var field_2 = "value 2";
var resourceJSON = JSON.stringify({
"field_1": field_1,
"field_2": field_2,
});
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceValues" : [ resourceJSON ]
}
}]
}
}
}
};
}