このガイドでは、Google Workspace フローのカスタム リソースを定義する方法について説明します。
カスタム リソースは、複数の変数をグループ化するために定義できるカスタム データ構造です。たとえば、CRM リードを作成するには、メールアドレス、住所、名前を含むカスタム リソースを渡します。
カスタム リソースを定義する方法は次の 2 つです。
- 参照として: カスタム リソースを参照として出力する場合は、完全なカスタム リソース オブジェクトではなく、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[]で、出力変数の動的セットを返す出力変数を指定します。出力変数には、プロパティ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"
}
]
}
}
}
コードを編集
アプリケーション コードで、次の操作を行います。
必要に応じてカスタム リソース コンテンツを取得する
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, }) } } } }; }プロバイダ関数は、API の呼び出しやデータベースの読み取りなどの適切なメカニズムでカスタム リソースの値を取得し、その値を返す必要があります。
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 では、ステップの出力を定義します。
カスタム リソースを値として出力するには、ステップのマニフェスト ファイルとコードを編集します。
マニフェスト ファイルを編集する
マニフェスト ファイルで:
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 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 ]
}
}]
}
}
}
};
}