Configurar la función Event
Ahora comenzaremos a codificar la aplicación WorkDrive Sync configurando la función Event.
El directorio de funciones functions/workdrivesync contiene:
- El archivo principal de función index.js
- El archivo de configuración catalyst-config.json
- Módulos de Node
- Archivos de dependencia package.json y package-lock.json
Puede usar cualquier IDE para configurar la función.
Instalar paquetes para Node.js
La función Event de Node.js requiere la instalación de tres paquetes: axios, form-data, y fs.
axios
axios es un cliente HTTP basado en promesas que usaremos para enviar solicitudes HTTP asíncronas al endpoint de la API de WorkDrive para publicar archivos.
Para instalar axios, navegue al directorio de la función Node (functions/workdrivesync) y ejecute el siguiente comando:
This will install the module.
form-data
Usaremos form-data para cargar el archivo a WorkDrive, después de leerlo de los datos del evento enviados por el event listener.
Para instalar form-data, navegue al directorio de la función Node (functions/workdrivesync) y ejecute el siguiente comando:
Esto instalará el módulo.
fs
El módulo fs nos permite acceder al sistema de archivos físico y crear un flujo de lectura para obtener el archivo de los datos del evento.
Para instalar fs, navegue al directorio de la función Node (functions/workdrivesync) y ejecute el siguiente comando:
Esto instalará el módulo.
qs
El módulo qs ayuda con el análisis y la serialización de cadenas de consulta de URL al trabajar con APIs o datos que necesitan ser enviados o recibidos a través de parámetros de consulta.
Para instalar qs, navegue al directorio de la función Node (functions/workdrivesync) y ejecute el siguiente comando:
La información sobre estos paquetes también se actualizará en el archivo package.json de la función Event.
{
"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"
}
}
Ahora puede agregar el código en el archivo de la función.
Copie el código a continuación y péguelo en index.js ubicado en el directorio functions/workdrivesync y guarde el archivo.
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}}’, //Ingrese su Client ID
client_secret: ‘{{YOUR_CLIENT_SECRET}}’, //Ingrese su 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}}’ //Ingrese su Refresh Token
}
}
const FOLDERID = ‘5m0kq28f2efdbc2464a37866cec7d6580cb47’; //Ingrese su ID de carpeta de WorkDrive
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"); // Reemplace con el nombre de su bucket
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();
}
};
-
Los enlaces de servicios de Zoho utilizados en este código (por ejemplo, accounts.zoho.com, workdrive.zoho.com, etc.) son específicos del Centro de Datos (DC). Reemplace .com con el dominio de su centro de datos de Zoho correspondiente. Asegúrese de que todas las URLs en el código usen el mismo dominio del DC para evitar errores de autenticación o API.
-
ID de carpeta de WorkDrive: Puede obtener este valor abriendo la carpeta que creó en WorkDrive anteriormente. La URL contiene el ID de carpeta de la carpeta de WorkDrive. Copie el ID que se muestra después de folders/ en la URL.

La función Event está ahora configurada.
Última actualización 2026-03-20 21:51:56 +0530 IST


