カスタム リソースを使用して複雑なデータを表す

このガイドでは、Google Workspace フローのカスタム リソースを定義する方法について説明します。

カスタム リソースは、複数の変数をグループ化するために定義できるカスタム データ構造です。たとえば、CRM リードを作成するには、メールアドレス、住所、名前を含むカスタム リソースを渡します。

カスタム リソースを定義する方法は次の 2 つです。

  • 参照として: カスタム リソースを参照として出力する場合は、完全なカスタム リソース オブジェクトではなく、ID でカスタム リソースを返します。これにより、フロー ステップ間で転送されるデータが削減され、パフォーマンスが向上します。データでセカンダリ ルックアップが必要な場合、その ID を返すと、ルックアップの実行に役立ちます。
  • 値として: 実行中にデータを取得する必要がある場合、またはカスタム リソースが小さく、機密データが含まれていない場合は、この方法を使用します。

カスタム リソースを参照として出力する

カスタム リソースを参照として出力することで、完全なカスタム リソース オブジェクトではなく、ID でカスタム リソースを返すことができます。カスタム リソースが大きい場合や複雑な場合は、ID のみを渡すことで、フロー ステップ間で転送されるデータが減り、パフォーマンスが向上します。

カスタム リソースを参照として出力するには、ステップのマニフェスト ファイルとコードを編集します。

マニフェスト ファイルを編集する

マニフェスト ファイルで:

  1. workflowResourceDefinitions を指定し、idfields[] 配列、providerFunction を割り当てます。workflowResourceDefinitions は、カスタム リソースのデータ型とコンテンツを定義する構造体です。

  2. fields[] 配列内で、カスタム リソースを構成する個々のフィールド(この例では field_1field_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[] で、出力変数の動的セットを返す出力変数を指定します。出力変数には、プロパティ resourceType を持つ dataType が含まれます。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())を実装します。ステップのイベント オブジェクトの JSON ペイロードである入力 e を受け取り、そこからカスタム リソース ID を設定します。

    Apps Script

    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. ID でカスタム リソースを取得して返すには、onExecuteResourceFunction() に示すように、returnOutputVariablesAction として返します。

    Apps Script

    function onExecuteResourceFunction(e) {
      var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
      return {
        "hostAppAction": {
          "workflowAction": {
            "returnOutputVariablesAction": {
              "variableValues": [{
                "variableId": "resource_data",
                "variableData": {
                  "resourceReferences" : [ resource_id ]
                }
              }]
            }
          }
        }
      };
    }
    

完全な例を次に示します。

Apps Script

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 では、ステップの出力を定義します。

カスタム リソースを値として出力するには、ステップのマニフェスト ファイルとコードを編集します。

マニフェスト ファイルを編集する

マニフェスト ファイルで:

  1. workflowResourceDefinitions を指定して ID を割り当てます。workflowResourceDefinitions は、カスタム リソースのデータ型とコンテンツを定義する構造です。workflowResourceDefinitions 内で、カスタム リソースを構成する個々のフィールド(この例では field_1field_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 として抽象化されています。

Apps Script

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 ]
            }
          }]
        }
      }
    }
  };
}