Ir al contenido

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

Download Global library.okmflow

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.

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

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_base o library_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.pdf
docLib.rename(context, "approved")

Ejemplo: nodo Scheduled que usa hasDurationElapsed para comprobar en cada ciclo:

import java.time.LocalDateTime
// On first pass, store the start time
if (context.get("taskStarted") == null) {
context.put("taskStarted", LocalDateTime.now())
}
LocalDateTime taskStarted = context.get("taskStarted")
// Move to "timeout" transition after 4 minutes
if (BaseLibrary.hasDurationElapsed("PT4M", taskStarted)) {
return "timeout"
}
return "wait"