Event関数の設定
ここから、Event関数を設定してWorkDrive Syncアプリのコーディングを開始します。
関数ディレクトリ functions/workdrivesyncには以下が含まれています:
- index.jsメイン関数ファイル
- catalyst-config.json設定ファイル
- Nodeモジュール
- package.jsonおよびpackage-lock.json依存関係ファイル
任意のIDEを使用して関数を設定できます。
Node.js用パッケージのインストール
Node.js Event関数には、axios、form-data、fsの3つのパッケージをインストールする必要があります。
axios
axiosは、PromiseベースのHTTPクライアントで、WorkDrive APIエンドポイントにファイルを投稿するための非同期HTTPリクエストの送信に使用します。
axiosをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:
モジュールがインストールされます。
form-data
form-dataは、イベントリスナーから送信されたイベントデータからファイルを読み取った後、WorkDriveにファイルをアップロードするために使用します。
form-dataをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:
モジュールがインストールされます。
fs
fsモジュールは、物理ファイルシステムにアクセスし、イベントデータからファイルを取得するための読み取りストリームを作成することを可能にします。
fsをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:
モジュールがインストールされます。
qs
qsモジュールは、APIやクエリパラメータを通じて送受信するデータを扱う際に、URLクエリ文字列の解析と文字列化を支援します。
qsをインストールするには、Node関数のディレクトリ(functions/workdrivesync)に移動して、以下のコマンドを実行します:
これらのパッケージの情報は、Event関数のpackage.jsonファイルにも更新されます。
{
"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に貼り付けて、ファイルを保存してください。
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();
}
};
-
このコードで使用されているZohoサービスリンク(例:accounts.zoho.com、workdrive.zoho.comなど)はデータセンター(DC)固有です。.comを対応するZohoデータセンタードメインに置き換えてください。認証やAPIエラーを避けるため、コード内のすべてのURLが同じDCドメインを使用していることを確認してください。
-
WorkDriveフォルダID: この値は、先ほどWorkDriveで作成したフォルダを開くことで取得できます。URLにはWorkDriveフォルダのフォルダIDが含まれています。URLのfolders/の後に表示されるIDをコピーしてください。

Event関数の設定が完了しました。
最終更新日 2026-02-23 18:09:41 +0530 IST


