В этом руководстве объясняется, как определять пользовательские ресурсы для Google Workspace Flows.
Пользовательские ресурсы — это пользовательские структуры данных, которые можно определить для группировки нескольких переменных. Например, чтобы создать лид CRM, передайте пользовательский ресурс, содержащий адрес электронной почты, почтовый адрес и имя.
Существует два способа определения пользовательских ресурсов:
- В качестве ссылки: при выводе пользовательского ресурса в качестве ссылки вы возвращаете его идентификатор, а не полный объект пользовательского ресурса. Это повышает производительность за счёт сокращения объёма данных, передаваемых между этапами потока. Если данные требуют вторичного поиска, возврат идентификатора полезен для выполнения такого поиска.
- В качестве значения: используйте этот метод, когда данные необходимо извлечь во время выполнения или когда пользовательский ресурс небольшой и не содержит конфиденциальных данных.
Вывести пользовательский ресурс в качестве ссылки
Выводя пользовательский ресурс в качестве ссылки, вы можете вернуть пользовательский ресурс по его идентификатору, а не по полному объекту. Если пользовательский ресурс большой или сложный, передача только идентификатора повышает производительность за счёт сокращения объёма данных, передаваемых между этапами потока.
Чтобы вывести пользовательский ресурс в качестве ссылки, отредактируйте файл манифеста и код шага.
Редактировать файл манифеста
В файле манифеста:
Укажите
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-объекта события шага, и устанавливает на их основе идентификатор пользовательского ресурса.Скрипт приложений
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 или читая базу данных.
Чтобы извлечь и вернуть пользовательский ресурс по его идентификатору, верните его как
returnOutputVariablesAction, как показано вonExecuteResourceFunction().Скрипт приложений
function onExecuteResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; return { "hostAppAction": { "workflowAction": { "returnOutputVariablesAction": { "variableValues": [{ "variableId": "resource_data", "variableData": { "resourceReferences" : [ resource_id ] } }] } } } }; }
Вот полный пример:
Скрипт приложений
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 ]
}
}]
}
}
}
};
}
Вывести пользовательский ресурс как значение
При выводе пользовательского ресурса в качестве ссылки вы возвращаете сам пользовательский ресурс по его идентификатору, а не полный объект пользовательского ресурса. Если вам нужно передать весь объект ресурса, это можно сделать с помощью resourceValues .
В resourceValues вы определяете выходные данные шага.
Чтобы вывести пользовательский ресурс как значение, отредактируйте файл манифеста и код шага.
Редактировать файл манифеста
В файле манифеста:
Укажите
workflowResourceDefinitionsи присвойте ему идентификатор.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 :
Скрипт приложений
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 ]
}
}]
}
}
}
};
}
Похожие темы
- Входные переменные
- Проверить входную переменную
- Выходные переменные
- Журнал активности и ошибок
- Объект события потока