Global library
Una biblioteca de flujo de trabajo compartida que ofrece clases de utilidad comunes disponibles para cualquier flujo de trabajo del sistema. Despliéguela una vez por instancia de OpenKM; otros flujos de trabajo cargan sus nodos mediante un nodo Library e invocan sus métodos directamente en sus scripts. Contiene dos nodos de biblioteca: library_global_base (utilidades generales) y library_global_document (operaciones sobre documentos).
Resumen
Sección titulada «Resumen»Download Global library.okmflow
Diagrama
Sección titulada «Diagrama»
Nodos de biblioteca
Sección titulada «Nodos de biblioteca»library_global_base
Sección titulada «library_global_base»Define la clase BaseLibrary. Vincule este nodo al nombre BaseLibrary en la configuración de su nodo Library. Ofrece registro, acceso al contexto, webservices de OpenKM, serialización JSON y comprobación de duración.
| Método | Valor de retorno | Descripción |
|---|---|---|
| logInfo(String component, String message) | void | Escribe una entrada INFO en el fichero de registro del flujo de trabajo a través de FileLogger. |
component: etiqueta que identifica al llamante (por ejemplo, "MyWorkflow").
message: texto a registrar.
| Método | Valor de retorno | Descripción |
|---|---|---|
| logError(String component, String message, Exception e) | void | Escribe una entrada ERROR incluyendo la pila de llamadas completa a través de StackTraceUtils. El parámetro de excepción es opcional (se acepta null). |
component: etiqueta que identifica al llamante.
message: descripción del error.
e: excepción a incluir en la entrada del registro. Pase null si no aplica.
| Método | Valor de retorno | Descripción |
|---|---|---|
| getWebservices() | OKMWebservices | Devuelve la instancia compartida de OKMWebservices a través de WebservicesHelper.getInstance(). Úselo para interactuar con el repositorio de OpenKM (documentos, carpetas, metadatos, etc.). |
| getContextValue(Map<String,Object> context, String key) | Object | Devuelve el valor almacenado bajo key en el map de contexto del flujo de trabajo. |
context: el map de contexto del flujo de trabajo (la variable context en los scripts).
key: nombre de la variable de contexto.
| Método | Valor de retorno | Descripción |
|---|---|---|
| setContextValue(Map<String,Object> context, String key, Object value) | void | Almacena value bajo key en el map de contexto del flujo de trabajo. |
context: el map de contexto del flujo de trabajo.
key: nombre de la variable de contexto.
value: valor a almacenar.
| Método | Valor de retorno | Descripción |
|---|---|---|
| getInitiatorId(Map<String,Object> context) | String | Devuelve el Id de usuario de la persona que inició el proceso de flujo de trabajo (lee el Actor initiator del contexto). |
context: el map de contexto del flujo de trabajo.
| Método | Valor de retorno | Descripción |
|---|---|---|
| getProcessInstanceId(Map<String,Object> context) | long | Devuelve el Id numérico de la instancia de proceso actual (lee processInstance del contexto). |
context: el map de contexto del flujo de trabajo.
| Método | Valor de retorno | Descripción |
|---|---|---|
| convertToJson(Object obj) | String | Serializa obj a una cadena JSON usando el ObjectMapper de Jackson. Lanza JsonProcessingException en caso de fallo. |
obj: cualquier objeto Java/Groovy a serializar.
| Método | Valor de retorno | Descripción |
|---|---|---|
| convertFromJson(String jsonString, Class targetClass) | Object | Deserializa una cadena JSON en una instancia de targetClass. Las propiedades desconocidas del JSON se ignoran silenciosamente (FAIL_ON_UNKNOWN_PROPERTIES = false). Lanza una excepción si el JSON no es válido o hay una discrepancia de clase. |
jsonString: cadena JSON a deserializar.
targetClass: clase Java de destino (por ejemplo, MyDTO.class).
| Método | Valor de retorno | Descripción |
|---|---|---|
| hasDurationElapsed(String durationString, LocalDateTime startTime) | boolean | Devuelve true si el tiempo transcurrido desde startTime es mayor o igual que la duración ISO 8601 indicada en durationString. Se usa habitualmente en nodos Scheduled para comprobar si ha pasado tiempo suficiente. |
durationString: cadena de duración ISO 8601 (por ejemplo, "PT4M" para 4 minutos, "P1D" para 1 día).
startTime: LocalDateTime de referencia almacenado previamente en el contexto.
library_global_document
Sección titulada «library_global_document»Ofrece operaciones específicas de documentos. Vincule este nodo al nombre docLib en la configuración de su nodo Library. Depende de BaseLibrary: el nodo Library para library_global_base debe estar configurado en el mismo flujo de trabajo.
| Método | Valor de retorno | Descripción |
|---|---|---|
| rename(Map<String,Object> context, String newName) | void | Renombra el documento del flujo de trabajo siguiendo la convención prefix-newName.ext. Lee el UUID del documento de la clave de contexto "uuid", resuelve el nombre de fichero actual, extrae el prefijo (la parte anterior al primer -) y llama a ws.document.rename() con el nuevo nombre compuesto. |
context: el map de contexto del flujo de trabajo. Debe contener la clave "uuid" con el UUID del documento.
newName: el nuevo sufijo a colocar tras el separador de prefijo (por ejemplo, "approved" produce DOC-001-approved.pdf).
Cómo usarla
Sección titulada «Cómo usarla»Añada un nodo Library por cada nodo de biblioteca que desee usar. En cada nodo, configure:
- Library workflow name:
Global library - Library node name: el nodo a cargar (
library_global_baseolibrary_global_document) - Binding variable: el nombre usado para llamar a sus métodos en los scripts (por ejemplo,
BaseLibrary,docLib)
Ejemplo: script de un nodo Action que usa ambos nodos de biblioteca:
// Library node 1 configured as: Global library / library_global_base → BaseLibrary// Library node 2 configured as: Global library / library_global_document → docLib
BaseLibrary.logInfo("MyWorkflow", "Starting document processing")
long piId = BaseLibrary.getProcessInstanceId(context)String initiator = BaseLibrary.getInitiatorId(context)BaseLibrary.logInfo("MyWorkflow", "Process ${piId} started by ${initiator}")
// Rename document: prefix-approved.pdfdocLib.rename(context, "approved")Ejemplo: nodo Scheduled que usa hasDurationElapsed para comprobar en cada ciclo:
import java.time.LocalDateTime
// On first pass, store the start timeif (context.get("taskStarted") == null) { context.put("taskStarted", LocalDateTime.now())}
LocalDateTime taskStarted = context.get("taskStarted")
// Move to "timeout" transition after 4 minutesif (BaseLibrary.hasDurationElapsed("PT4M", taskStarted)) { return "timeout"}return "wait"