お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

Event関数の設定

ここから、Event関数を設定してWorkDrive Syncアプリのコーディングを開始します。

注意: Catalystコンソールでイベントリスナーを設定する前に、アプリケーションコードをCatalystリモートコンソールにコーディングしてデプロイする必要があります。これは、イベントリスナーをEvent関数に関連付ける必要があるためです。

関数ディレクトリ functions/workdrivesyncには以下が含まれています:

  • index.jsメイン関数ファイル
  • catalyst-config.json設定ファイル
  • Nodeモジュール
  • package.jsonおよびpackage-lock.json依存関係ファイル

任意のIDEを使用して関数を設定できます。

Node.js用パッケージのインストール

Node.js Event関数には、axiosform-datafsの3つのパッケージをインストールする必要があります。

axios

axiosは、PromiseベースのHTTPクライアントで、WorkDrive APIエンドポイントにファイルを投稿するための非同期HTTPリクエストの送信に使用します。

axiosをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:

copy
$
npm install axios

モジュールがインストールされます。

catalyst_workdrive_npm_axios

form-data

form-dataは、イベントリスナーから送信されたイベントデータからファイルを読み取った後、WorkDriveにファイルをアップロードするために使用します。

form-dataをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:

copy
$
npm install form-data

モジュールがインストールされます。

catalyst_workdrive_npm_formdata

fs

fsモジュールは、物理ファイルシステムにアクセスし、イベントデータからファイルを取得するための読み取りストリームを作成することを可能にします。

fsをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:

copy
$
npm install fs

モジュールがインストールされます。

catalyst_workdrive_npm_fs

qs

qsモジュールは、APIやクエリパラメータを通じて送受信するデータを扱う際に、URLクエリ文字列の解析と文字列化を支援します。

qsをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:

copy
$
npm install qs

これらのパッケージの情報は、Event関数のpackage.jsonファイルにも更新されます。

copy
{
	"name": "workdrivesync",
	"version": "1.0.0",
	"main": "index.js",
	"author": "emma@zylker.com",
	"dependencies": {
		"axios": "^1.13.1",
		"form-data": "^4.0.4",
		"fs": "^0.0.1-security",
		"qs": "^6.14.0",
		"zcatalyst-sdk-node": "latest"
	}
}

これで関数ファイルにコードを追加できます。

以下のコードをコピーして、functions/workdrivesyncディレクトリにあるindex.jsに貼り付けて、ファイルを保存してください。

注意: このセクションのコードを十分に理解するため、必ず内容を確認してください。関数とクライアントのコードについては、クライアントの設定後に説明します。
index.js
copy
const catalyst = require('zcatalyst-sdk-node');
const axios = require('axios').default;
const FormData = require('form-data');
const fs = require('fs');

const credentials = { WorkDriveConnector: { client_id: ‘{{YOUR_CLIENT_ID}}’, // Client IDを入力してください client_secret: ‘{{YOUR_CLIENT_SECRET}}’, // Client Secretを入力してください auth_url: ‘https://accounts.zoho.com/oauth/v2/token', refresh_url: ‘https://accounts.zoho.com/oauth/v2/token', refresh_token: ‘{{YOUR_REFRESH_TOKEN}}’ // Refresh Tokenを入力してください } }

const FOLDERID = ‘5m0kq28f2efdbc2464a37866cec7d6580cb47’; // WorkDriveフォルダIDを入力してください

module.exports = async (event, context) => {

try {

	const eventData = event.getRawData().events[0];
	const eventType = eventData.event_config.api_name;
	const fileName = eventData.data.object_details[0].key;

	const app = catalyst.initialize(context);
	const query = `SELECT ROWID, WorkDriveFileID FROM FileVault where FileName='${fileName}'`;
	const queryResult = await app.zcql().executeZCQLQuery(query);
	console.log(queryResult);
	const ROWID = queryResult[0].FileVault.ROWID;

	const accessToken = await app.connection(credentials).getConnector('WorkDriveConnector').getAccessToken();

	if (eventType === "stratus_object_uploaded") {

		const stratus = app.stratus();
		const bucket = stratus.bucket("file-vault-demo"); // バケット名に置き換えてください

		let fileStream = await bucket.getObject(fileName);
		const chunks = [];
		for await (const chunk of fileStream) {
			chunks.push(chunk);
		}
		const buffer = Buffer.concat(chunks);

		fs.writeFileSync(__dirname + '/' + fileName, buffer);
		var data = new FormData();
		data.append('content', fs.createReadStream(__dirname + '/' + fileName));

		const config = {
			method: 'POST',
			url: `https://workdrive.zoho.com/api/v1/upload?filename=${fileName}&override-name-exist=true&parent_id=${FOLDERID}`, headers: { 'Authorization': `Zoho-oauthtoken ${accessToken}`, ...data.getHeaders() }, data: data
		};

		const response = await axios(config);
		console.log(response);

		const WorkDriveSync = 'Uploaded';
		const body = response.data;
		const WorkDriveFileID = body.data[0].attributes.resource_id;
		const catalystTable = app.datastore().table('FileVault');
		await catalystTable.updateRow({
			WorkDriveFileID,
			WorkDriveSync,
			ROWID
		});

	} else if (eventType === "stratus_object_deleted") {
		const WorkDriveFileID = queryResult[0].FileVault.WorkDriveFileID;

		const config = {
			method: "PATCH",
			url: `https://workdrive.zoho.com/api/v1/files/${WorkDriveFileID}`, headers: { Authorization: `Zoho-oauthtoken ${accessToken}`, Accept: "application/vnd.api+json", }, data: JSON.stringify({
				data: {
					attributes: {
						status: "51",
					},
					type: "files",
				},
			}),
		};

		console.log(config);

		await axios(config);

		const table = app.datastore().table("FileVault");
		await table.deleteRow(ROWID);
	}

	context.closeWithSuccess();

} catch (err) {
	console.log(err);
	context.closeWithFailure();
}

};

View more

注意: このコードを関数ファイルにコピー&ペーストした後、コメントで示されている以下の値を必ず入力してください:
  • Client ID

  • Client Secret

  • このコードで使用されているZohoサービスリンク(例:accounts.zoho.com、workdrive.zoho.comなど)はデータセンター(DC)固有です。.comを対応するZohoデータセンタードメインに置き換えてください。認証やAPIエラーを避けるため、コード内のすべてのURLが同じDCドメインを使用していることを確認してください。

  • Refresh Token

  • WorkDriveフォルダID: この値は、先ほどWorkDriveで作成したフォルダを開くことで取得できます。URLにはWorkDriveフォルダのフォルダIDが含まれています。URLのfolders/の後に表示されるIDをコピーしてください。 catalyst_workdrive_folderid

Event関数の設定が完了しました。

最終更新日 2026-02-23 18:09:41 +0530 IST

関連リンク

Event Functions