Try / Catch
Try / Catch
Sección titulada «Try / Catch»Tipo: try-catch · Paquete: Core Activities v1.0.8
Ejecuta un bloque de actividades y, si alguna falla, en vez de detener toda la ejecución, salta a un bloque alternativo donde puedes reaccionar: registrar el error, notificar, o seguir un plan B. Es la herramienta clave para que tu automatización sea robusta ante los problemas que sabes que pueden ocurrir (una página que no carga, un archivo que no existe, un sistema que a veces falla).
Tiene tres bloques: try (lo que intentas), catch (qué hacer si falla) y finally (lo que se ejecuta siempre, pase lo que pase).
Cómo funciona
Sección titulada «Cómo funciona»- Ejecuta las actividades de
try. - Si todas tienen éxito, omite el
catch. - Si alguna falla, detiene el
tryen ese punto, guarda el error enerrorVariable(si la definiste) —un objetoZoanErrorcon el detalle de la excepción— y ejecuta el bloquecatch. - Al final, siempre ejecuta
finally—tanto si hubo error como si no— ideal para liberar recursos (cerrar un navegador, una conexión).
Tras el catch, la ejecución continúa normalmente con lo que venga después del Try/Catch: el error quedó “atrapado”. Detalles que conviene saber:
- Un
catchvacío también atrapa el error: el flujo sigue como si nada. Úsalo solo si de verdad quieres ignorar el fallo, y deja al menos un Log. - Un error dentro del
catcho delfinallyno lo atrapa este mismo Try/Catch: sube al siguiente que lo contenga, o hace fallar la ejecución. - Para volver a lanzar el error después de registrarlo, usa Throw con
message = error.MessageyerrorType = error.Type.
Parámetros requeridos
Sección titulada «Parámetros requeridos»Ninguno. (El único bloque obligatorio es el sub-flujo try.)
Parámetros opcionales
Sección titulada «Parámetros opcionales»| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
errorVariable | string | — | Nombre de la variable que recibe el error capturado, de tipo ZoanError. En el catch accede a .Message, .Type, .Source y .StackTrace. No hace falta declararla; si la declaraste como texto (string), recibe solo el mensaje. |
Sub-flujos
Sección titulada «Sub-flujos»try requerido
Sección titulada «try requerido»Actividades a intentar. Si una falla, el resto del try no se ejecuta.
catch opcional
Sección titulada «catch opcional»Actividades que se ejecutan solo si algo en el try falló.
finally opcional
Sección titulada «finally opcional»Actividades que se ejecutan siempre, haya fallado o no el try. También si alguien termina la ejecución (Terminar en Zoan Cloud, el Designer o el Agent): el finally tiene 10 segundos para cerrar lo abierto, así que es el lugar para cerrar la aplicación o el navegador. Si no alcanza a terminar en ese tiempo, queda una advertencia en el log y la ejecución termina igual.
Esta actividad no devuelve ningún valor. El error capturado queda en la variable de errorVariable:
| Propiedad | Contenido |
|---|---|
.Message | El mensaje del error. |
.Type | El tipo: el errorType de un Throw (PlaybookException por defecto, BusinessRuleException para errores de negocio) o el nombre de la excepción del sistema (TimeoutException, HttpRequestException…). |
.Source | El componente donde se originó. |
.StackTrace | La traza, para diagnóstico. |
Si el error viene de un playbook o proceso invocado, ZoanError muestra el error original, no el envoltorio de la invocación.
Ejemplo
Sección titulada «Ejemplo»Intentar leer un Excel; si falla, registrar el error y seguir; y cerrar el libro pase lo que pase:
Try / Catch errorVariable = error ├─ try: │ Excel Open path = asset("datos.xlsx") → output: libro │ Excel Read Range excel = libro range = "A1:D100" → output: tabla ├─ catch: │ Log level = error message = "No se pudo leer el Excel (" + error.Type + "): " + error.Message │ Set Variable name = tabla value = newDataTable() // valor por defecto └─ finally: Excel Close excel = libroErrores comunes
Sección titulada «Errores comunes»| Mensaje | Causa y solución |
|---|---|
El bloque Finally no terminó después de que se terminó la ejecución: … | Advertencia: se terminó la ejecución y el finally no acabó en 10 segundos (o falló). Deja en el finally solo cierres rápidos. |
| El error se «pierde» | El catch está vacío y no hay errorVariable: el fallo queda atrapado sin rastro. Registra el error con un Log o vuelve a lanzarlo con Throw. |