Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar la función Event

Ahora comenzaremos a codificar la aplicación WorkDrive Sync configurando la función Event.

Nota: Necesitaremos codificar y desplegar el código de la aplicación en la consola remota de Catalyst antes de configurar el event listener en la consola de Catalyst, porque tenemos que asociarlo con 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:

copy
$
npm install axios

This will install the module.

catalyst_workdrive_npm_axios

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:

copy
$
npm install form-data

Esto instalará el módulo.

catalyst_workdrive_npm_formdata

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:

copy
$
npm install fs

Esto instalará el módulo.

catalyst_workdrive_npm_fs

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:

copy
$
npm install qs

La información sobre estos paquetes también se actualizará en el archivo package.json de la función Event.

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"
	}
}

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.

Nota: Revise el código en esta sección para asegurarse de que lo comprende completamente. Discutiremos el código de la función y del cliente después de que configure el cliente.
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}}’, //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();
}

};

View more

Nota: Después de copiar y pegar este código en su archivo de función, asegúrese de proporcionar los siguientes valores como se indica en los comentarios:
  • Client ID

  • Client Secret

  • 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.

  • Refresh Token

  • 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. catalyst_workdrive_folderid

La función Event está ahora configurada.

Última actualización 2026-03-20 21:51:56 +0530 IST

ENLACES RELACIONADOS

Event Functions