Detalle
Los eventos de recepción de señales se ejecutan cada vez que se guarda, elimina, anula o finaliza una transacción o cada vez que se adjunta o desadjunta un archivo. (Las transacciones capaces de generar un caso para captar señales son: operaciones, operaciones de tesorería y cualquier tipo de caso).
Aquellas transacciones que se asocian a un caso a través de la lista de “Transacciones Asociadas” (por ejemplo mediante la Gestión Externa) también disparan los eventos del proceso del caso al cual se encuentran asociadas.
Queda disponible en los scripting un nuevo objeto que se denomina evento y provee información del tipo de señal que se está enviando y la transacción que dió origen a ese evento.
Estos eventos pueden ser usados también para capturar la reactivación de casos.
Para permitir la reactivación de un caso es necesario configurar una actividad de fin como “Permite reactivar”.
Cuando un caso llega a una actividad de fin que permite reactivación, habilita un botón en la toolbar del caso: < Reactivar >.
Plantillas:
Se disponen de dos nuevas plantillas que permiten armar los scripting para el control de eventos de señal:
a) “Plantilla: Inicial 2 (eventos de captura de señal)” .
b) “Plantilla: Evento de reactivación” .
Modo de uso
Este es un ejemplo de proceso con eventos de señal:
Cómo ingresar un evento de tipo señal
Una vez agregado el evento intermedio, se debe hacer click a la derecha sobre éste y seleccionar el tipo de evento:
Señales de guardar, eliminar, anular, finalizar, adjuntar y desadjuntar.
Se creó una plantilla que incluye todas estas opciones. Se llama “Plantilla: Inicial 2 (eventos de captura de señal)”.
El código de la plantilla es el siguiente:
String sessionID = params.getSessionID();
DBHelper dbh = params.getDBHelper();
CasoBPMAccionVO accion = params.get("Accion");
CasoBPMTrigger evento = accion.getTriggerInfo();
CasoScriptResultado result = new CasoScriptResultado();
UtilsHLP utils = new UtilsHLP(sessionID, dbh); /* Soporte para operar con funciones básicas */
XMLManagerHLP xmlMgr = new XMLManagerHLP(sessionID, dbh); /* Soporte para operar con documentos XML */
MailManagerHLP sender = new MailManagerHLP(sessionID, dbh); /* Soporte para operar con envío de correo */
NotifierHLP notifier = new NotifierHLP(sessionID, dbh); /* Soporte operar con notificaciones internas */
CaseHLP cases = new CaseHLP(sessionID, dbh); /* Soporte operar con casos */
BPMServiceHLP bpm = new BPMServiceHLP(sessionID, dbh); /* Soporte operar con BPM */
StockHLP stock = new StockHLP(sessionID, dbh); /* Soporte operar con stock */
TransactionHLP transaction = new TransactionHLP(sessionID, dbh); /* Soporte operar con transacciones */
String dataXMLEntrada = accion.getDataXML();
String dataXMLSalida = "";
/* Se presionó el botón Guardar de una transacción existente */
if( evento.isSignalUpdate() ) {
/* Se presionó el botón Eliminar de la transacción */
} else if( evento.isSignalDelete() ) {
/* Se presionó el botón Anular de la transacción */
} else if( evento.isSignalNullify() ) {
/* Se presionó el botón Finalizar de la transacción */
} else if( evento.isSignalFinalize() ) {
/* Se presionó el botón Adjuntar de la transacción */
if( evento.isSignalAttachFile() ) {
/* Se presionó el botón Desadjuntar (por referencia) de la transacción */
} else if( evento.isSignalDeleteFileRef() ) {
} else {
accion.setOmitida();
}
result.setDataXML(dataXMLSalida);
Lo que hace, es preguntar si se accionaron todas las señales:
evento.isSignalUpdate (Guardar); evento.isSignalDelete (Borrar); evento.isSignalNullify (Anular); evento.isSignalFinalize (Finalizar).
Se puede tener un evento de señal que pregunte por todas ellas o un evento por cada una y eliminar las líneas que preguntan por las demás.
En cada caso, se debe especificar qué es lo que debe realizar el script cuando las capta.
Si no se especifica en el script qué es lo que debe hacer, se puede sacar una flecha que lo lleva a otra actividad. Entonces cada vez que se capten señales, el proceso se pasará a esa actividad.
En el proceso de ejemplo, se tiene un evento que sólo capta la señal de anulación y bifurca hacia una actividad de fin.
En otro ejemplo, luego de captar una señal hay un script que manda un mail:
if( evento.isSignalUpdate() ) {
String asunto1 = "SE UPDATEÓ UNA ORDEN DE COMPRA";
String cuerpoMail = "update ";
cuerpoMail += "hola " + accion.getTitulo() + " " + accion.getUsuarioID() + " " + accion.getUsuarioNombre() + evento.getTransaccionIDOrigen();
destinatario = "...@finnegans.com.ar";
FAFMailCentral mail = sender.getSystemMail(destinatario,asunto1 , cuerpoMail);
sender.send(mail, accion.getTransaccionID());
}
Otro ejemplo puede ser poner dicho mail en otro evento que esté unido con una flecha, entonces se disparará automáticamente.
La diferencia de esto y lo otro es que en el ejemplo de arriba, se pueden hacer distintas cosas dependiendo de la señal que capta. En cambio si se tiene el script del mail en otro evento, se accionaría indistintamente de cual señal capta.
Ejemplo: Acá se informará al autor con el mismo mail para las tres señales:
Señal de Reactivación
Para que la reactivación de un caso sea factible, éste tiene que haber llegado a una actividad de fin que esté configurada para permitir reactivación.
Cuando el caso haya llegado a esa actividad, se habilitará un nuevo botón en la toolbar.
Se creó una plantilla que contiene el código que debe tener el script de esta señal de reactivación. La plantilla se llama “Plantilla: Evento de reactivación” y el código es el siguiente:
String sessionID = params.getSessionID();
DBHelper dbh = params.getDBHelper();
CasoBPMAccionVO accion = params.get("Accion");
CasoBPMTrigger evento = accion.getTriggerInfo();
CasoScriptResultado result = new CasoScriptResultado();
UtilsHLP utils = new UtilsHLP(sessionID, dbh); /* Soporte para operar con funciones básicas */
BPMServiceHLP bpm = new BPMServiceHLP(sessionID, dbh); /* Soporte operar con BPM */
String dataXMLEntrada = accion.getDataXML();
String dataXMLSalida = "";
/* No es de tipo revivir el caso, cancelamos la acción */
if( !evento.isSignalBPMReactivate() ) {
accion.setCancelada();
}
result.setDataXML(dataXMLSalida);
En este caso se procede como las demás señales, se le puede ingresar un comportamiento determinado a realizar cuando la capta o bien sacar una flecha a partir de esa actividad que lo mande de nuevo al principio. En el ejemplo: