--- title: "Configurar la función Event" url: https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/configure-event-function/ description: "Construya una aplicación web que sincronice cargas y eliminaciones de archivos entre dos carpetas en Catalyst Stratus y Zoho WorkDrive a través de APIs, usando funciones de Catalyst y Event Listener" last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /es/serverless/help/functions/event-functions --- # 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 debemos asociarlo con la función Event. El [directorio de funciones](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory)`functions/WorkDrive` contiene: * El archivo principal de la función `WorkDriveSync.java` * El archivo de configuración `catalyst-config.json` * Archivos de biblioteca Java en la carpeta `lib` * Archivos de dependencias `.classpath` y `.project` Agregará código en `WorkDriveSync.java`. Puede usar cualquier IDE para configurar la función. > **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. Puede copiar directamente el código a continuación y pegarlo en `WorkDriveSync.java` ubicado en el directorio `functions/WorkDrive` y guardar el archivo. **WorkDriveSync.java** ```java import com.catalyst.Context; import com.catalyst.event.EVENT_STATUS; import com.catalyst.event.EventRequest; import com.catalyst.event.CatalystEventHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.List; import java.util.ArrayList; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.json.JSONObject; import org.json.JSONArray; import com.zc.component.object.ZCRowObject; import com.zc.component.object.ZCTable; import com.zc.component.zcql.ZCQL; import com.zc.component.object.ZCObject; import com.zc.component.object.ZCRowObject; import com.zc.component.object.ZCTable; import com.zc.auth.connectors.ZCConnection; import com.zc.component.stratus.ZCStratus; import com.zc.component.stratus.ZCBucket; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class WorkDriveSync implements CatalystEventHandler { private static final Logger LOGGER = Logger.getLogger(WorkDriveSync.class.getName()); private static final String CLIENT_ID = "{{YOUR_CLIENT_ID}}"; //Ingrese su Client ID private static final String CLIENT_SECRET = "{{YOUR_CLIENT_SECRET}}"; //Ingrese su Client Secret private static final String AUTH_URL = "https://accounts.zoho.com/oauth/v2/token"; private static final String REFRESH_URL = "https://accounts.zoho.com/oauth/v2/token"; private static final String REFRESH_TOKEN = "{{YOUR_REFRESH_TOKEN}}"; //Ingrese su Refresh Token private static final String WORKDRIVE_FOLDER_ID = "{{YOUR_WORKDRIVE_FOLDER_ID}}"; //Ingrese su WorkDrive Folder ID private static final String STRATUS_BUCKET_NAME = "{{YOUR_STRATUS_BUCKET_NAME}}"; // Ingrese el nombre de su bucket private static final String FILE_VAULT_TABLE_NAME = "FileVault"; private static final OkHttpClient okHttpClient = new OkHttpClient().newBuilder().build(); @Override public EVENT_STATUS handleEvent(EventRequest paramEventRequest, Context paramContext) throws Exception { try { JSONObject eventData = (JSONObject) paramEventRequest.getRawData(); JSONArray eventsArray = (JSONArray) eventData.get("events"); JSONObject firstEvent = (JSONObject) eventsArray.get(0); String eventType = (String) ((JSONObject) firstEvent.get("event_config")).get("api_name"); String fileName = (String) ((JSONObject) ((JSONArray) ((JSONObject) firstEvent.get("data")).get("object_details")).get(0)).get("key"); LOGGER.log(Level.INFO, "Received event: " + eventType + " for file: " + fileName); String query = "SELECT ROWID, WorkDriveFileID FROM " + FILE_VAULT_TABLE_NAME + " WHERE FileName='" + fileName + "'"; List<ZCRowObject> queryResult = ZCQL.getInstance().executeQuery(query); if (queryResult.isEmpty()) { LOGGER.log(Level.INFO, "No entry found in " + FILE_VAULT_TABLE_NAME + " for file: " + fileName); return EVENT_STATUS.SUCCESS; } ZCRowObject fileVaultEntry = queryResult.get(0); Long rowId = Long.valueOf((String) fileVaultEntry.get("ROWID")); String workDriveFileId = (String) fileVaultEntry.get("WorkDriveFileID"); LOGGER.log(Level.INFO, "Row Id: " + rowId + " , WorkDriveFileID: " + workDriveFileId); if ("stratus_object_uploaded".equals(eventType)) { handleUploadEvent(paramContext, fileName, rowId); } else if ("stratus_object_deleted".equals(eventType)) { handleDeleteEvent(paramContext, fileName, rowId, workDriveFileId); } return EVENT_STATUS.SUCCESS; } catch(Exception ex) { LOGGER.log(Level.SEVERE, "Exception in WorkDriveSync Function: ", ex); return EVENT_STATUS.FAILURE; } } private void handleUploadEvent(Context context, String fileName, Long rowId) throws Exception { ZCStratus stratus = ZCStratus.getInstance(); ZCBucket bucket = stratus.bucketInstance(STRATUS_BUCKET_NAME); LOGGER.log(Level.INFO, "Going to fetch the file " + fileName + " from the bucket " + STRATUS_BUCKET_NAME); String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()); InputStream dataStream = bucket.getObject(encodedFileName); byte[] buffer = new byte[dataStream.available()]; dataStream.read(buffer); File targetFile = new File(fileName); OutputStream outStream = new FileOutputStream(targetFile); outStream.write(buffer); outStream.close(); String accessToken = getAccessToken(); RequestBody body = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("content", fileName, RequestBody.create(MediaType.parse("application/octet-stream"), new File(fileName))) .build(); Request request = new Request.Builder() .url("https://workdrive.zoho.com/api/v1/upload?filename=" + fileName + "&override-name-exist=true&parent_id=" + WORKDRIVE_FOLDER_ID) .method("POST", body) .addHeader("Authorization", "Zoho-oauthtoken " + accessToken) .build(); Response response = okHttpClient.newCall(request).execute(); JSONObject responseJSON = new JSONObject(response.body().string()); JSONObject data = responseJSON.getJSONArray("data").getJSONObject(0); String resourceId = data.getJSONObject("attributes").getString("resource_id"); LOGGER.log(Level.INFO, "WorkDrive File ID :: " + resourceId); ZCObject object = ZCObject.getInstance(); ZCTable table = object.getTable(FILE_VAULT_TABLE_NAME); List<ZCRowObject> rowsToUpdate = new ArrayList<>(); ZCRowObject row = ZCRowObject.getInstance(); row.set("ROWID", rowId); row.set("WorkDriveFileID", resourceId); row.set("WorkDriveSync", "Uploaded"); rowsToUpdate.add(row); table.updateRows(rowsToUpdate); LOGGER.log(Level.INFO, "FileVault table updated for ROWID: " + rowId + " with WorkDriveFileID: " + resourceId); } private void handleDeleteEvent(Context context, String fileName, Long rowId, String workDriveFileId) throws Exception { JSONObject requestBody = new JSONObject(); JSONObject dataObject = new JSONObject(); JSONObject attributesObject = new JSONObject(); attributesObject.put("status", "51"); dataObject.put("attributes", attributesObject); dataObject.put("type", "files"); requestBody.put("data", dataObject); Request request = new Request.Builder() .url(String.format("https://workdrive.zoho.com/api/v1/files/%s", workDriveFileId)) .patch(RequestBody.create(MediaType.parse("application/json"), requestBody.toString())) .addHeader("Authorization", "Zoho-oauthtoken " + getAccessToken()) .addHeader("Accept", "application/vnd.api+json") .addHeader("Content-Type", "application/json") .build(); Response response = okHttpClient.newCall(request).execute(); LOGGER.log(Level.INFO, "WorkDrive Delete Response Status: " + response.code()); LOGGER.log(Level.INFO, "WorkDrive Delete Response Body: " + response.body().string()); ZCObject object = ZCObject.getInstance(); ZCTable table = object.getTable(FILE_VAULT_TABLE_NAME); table.deleteRow(rowId); LOGGER.log(Level.INFO, "FileVault table entry deleted for ROWID: " + rowId); } @SuppressWarnings("unchecked") public String getAccessToken() throws Exception { org.json.simple.JSONObject authJson = new org.json.simple.JSONObject(); org.json.simple.JSONObject connectorJson = new org.json.simple.JSONObject(); authJson.put("client_id", CLIENT_ID); authJson.put("client_secret", CLIENT_SECRET); authJson.put("auth_url", AUTH_URL); authJson.put("refresh_url", REFRESH_URL); authJson.put("refresh_token", REFRESH_TOKEN); connectorJson.put("WorkDriveConnector", authJson); return ZCConnection.getInstance(connectorJson).getConnector("WorkDriveConnector").getAccessToken(); } } ``` > **Nota:** Después de copiar y pegar este código en su archivo de función, asegúrese de proporcionar los siguientes valores en él, como se indica en los comentarios: * **[Client ID](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/register-client)** * **[Client Secret](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/register-client)** * Los enlaces de servicio de Zoho usados 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 correspondiente de su centro de datos de Zoho. Asegúrese de que todas las URLs en el código usen el mismo dominio DC para evitar errores de autenticación o API. * **[Refresh Token](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/generate-refresh-token)** * **WorkDrive Folder ID:** Puede obtener este valor abriendo la [carpeta que creó en WorkDrive anteriormente](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/create-workdrive-folder). La URL contiene el Folder ID de la carpeta de WorkDrive. Copie el ID que se muestra después de `folders/` en la URL. ![catalyst_workdrive_folderid](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/workdrive-folder-id-through-link.webp) * **Table ID:** Puede obtener el [ID de la tabla](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/java/configure-event-function/#create-a-table) en el Data Store debajo de su nombre. ![catalyst_workdrive_tableid](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_tableid.webp) La función Event está ahora configurada.