Представление сложных данных с помощью пользовательского ресурса

В этом руководстве объясняется, как определять пользовательские ресурсы для Google Workspace Flows.

Пользовательские ресурсы — это пользовательские структуры данных, которые можно определить для группировки нескольких переменных. Например, чтобы создать лид CRM, передайте пользовательский ресурс, содержащий адрес электронной почты, почтовый адрес и имя.

Существует два способа определения пользовательских ресурсов:

  • В качестве ссылки: при выводе пользовательского ресурса в качестве ссылки вы возвращаете его идентификатор, а не полный объект пользовательского ресурса. Это повышает производительность за счёт сокращения объёма данных, передаваемых между этапами потока. Если данные требуют вторичного поиска, возврат идентификатора полезен для выполнения такого поиска.
  • В качестве значения: используйте этот метод, когда данные необходимо извлечь во время выполнения или когда пользовательский ресурс небольшой и не содержит конфиденциальных данных.

Вывести пользовательский ресурс в качестве ссылки

Выводя пользовательский ресурс в качестве ссылки, вы можете вернуть пользовательский ресурс по его идентификатору, а не по полному объекту. Если пользовательский ресурс большой или сложный, передача только идентификатора повышает производительность за счёт сокращения объёма данных, передаваемых между этапами потока.

Чтобы вывести пользовательский ресурс в качестве ссылки, отредактируйте файл манифеста и код шага.

Редактировать файл манифеста

В файле манифеста:

  1. Укажите workflowResourceDefinitions и назначьте ему id , массив fields[] и функцию providerFunction . workflowResourceDefinitions — это структура, которая определяет типы данных и содержимое пользовательского ресурса.

  2. В массиве fields[] вы указываете отдельные поля, составляющие пользовательский ресурс, в этом примере называемые field_1 и field_2 .

  3. Значение 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"
            }
        ]
    }
    
  4. В 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"
                }
            ]
        }
    }
}

Изменить код

В коде приложения:

  1. Реализуйте функцию 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,
              })
            }
          }
        }
      };
    }
    
  2. Функция поставщика должна возвращать значение пользовательского ресурса, извлекая его с помощью соответствующего механизма, например, вызывая API или читая базу данных.

  3. Чтобы извлечь и вернуть пользовательский ресурс по его идентификатору, верните его как 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 ​​вы определяете выходные данные шага.

Чтобы вывести пользовательский ресурс как значение, отредактируйте файл манифеста и код шага.

Редактировать файл манифеста

В файле манифеста:

  1. Укажите workflowResourceDefinitions и присвойте ему идентификатор. workflowResourceDefinitions — это структура, определяющая типы данных и содержимое настраиваемого ресурса. В workflowResourceDefinitions указываются отдельные поля, составляющие настраиваемый ресурс, в данном примере называемые field_1 и field_2 .

  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"
            }
        ]
    }
    
  3. В 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 ]
            }
          }]
        }
      }
    }
  };
}