Índice
Objetivo
El objetivo de esta guía es orientar como construir un script con la finalidad de resolver los responsables por una tarea del proceso workflow y/o gestor de proceso.
Prerrequisitos
- Conocimiento del lenguaje Javascript;
- Conocimiento sobre la construcción de flujos de proceso Workflow Fluig;
- Conceptos sobre la utilización de Datasets Fluig;
- Entendimiento sobre servicios de la Web, Webservices, SOAP y XML;
- Familiaridad con la herramienta de desarrollo, TOTVS Developer Studio o Eclipse;
- Instalación del Fluig Studio.
Construyendo un Mecanismo Personalizado
En algunas situaciones es necesario utilizar lógicas más complejas y específicas sobre quien será(n) el(los) responsable(s) por la ejecución de la actividad en la solicitud de proceso workflow. Para eso, existe el "Mecanismo de Atribución Personalizado".
Para iniciar su construcción, se debe, en un proyecto existente, hacer clic en la carpeta mechanisms y acceder el menú Archivo > Nuevo > Otros... (accesible por las teclas de atajo CTRL+N, o hacer clic con el botón derecho del mouse sobre la carpeta, y seguir por el menú suspendido), expandir el grupo (carpeta) Fluig, seleccionar la opción Mecanismo Personalizado Fluig y hacer clic en el botón Avanzar. En la pantalla siguiente, indicar el Código (obligatorio y no se puede alterar después) en el campo respectivo y su Descripción (opcional) igualmente, y, finalmente, hacer clic en el botón Concluir.
Con eso, se creará la función básica que se debe implementar:
function resolve(process,colleague){ var userList = null; return userList; }
La función anterior no retorna ningún usuario. Su ejecución no permitirá elegir a nadie, por eso, esta función debe ser complementada.
La función debe retornar una lista, del tipo ArrayList con las matrículas de los usuarios. La matrícula no es necesariamente igual al login de este usuario. La matrícula corresponde al valor existente en el campo del mismo nombre en el registro de este usuario y a la columna colleaguePK.colleagueId del Dataset colleague.
Retornando una Lista de Usuarios
Un ejemplo de retorno de una relación fija de usuarios se presenta a seguir:
function resolve(process,colleague){ var userList = new java.util.ArrayList(); userList.add('matricula_1'); userList.add('matricula_2'); userList.add('matricula_3'); return userList; }
Utilizando Datasets
Es posible realizar la consulta a un Dataset de la Plataforma (interno, formularios o personalizado), a fin de elaborar el resultado final de los usuarios que se podrán listar para la elección de la ejecución de la próxima actividad. Este procedimiento se puede realizar conforme al ejemplo a seguir:
function resolve(process,colleague){ var userList = new java.util.ArrayList(); //-- CONSULTA A UN DATASET, DE GRUPO DE USUARIOS FLUIG var dtsGroup = DatasetFactory.getDataset('group',null,null,null); for(var g = 0; g < dtsGroup.values.length; g++){ userList.add( 'Pool:Group:'+dtsGroup.getValue(g.toString(),"groupPK.groupId") ); } //-- CONSULTA A UN DATASET, DE PAPELES DE USUARIOS FLUIG var dtsRole = DatasetFactory.getDataset('workflowRole',null,null,null); for each(papel in dtsRole.values){ userList.add( 'Pool:Role:'+papel["workflowRolePK.roleId"] ); } return userList; }
En el ejemplo anterior, para que el(los) Grupo(s) se liste(n) es necesaria la inclusión del prefijo "Pool:Group:" concatenado al código de este Grupo. Con esto, al seleccionar el grupo, la actividad se atribuye al Grupo y una persona de este deberá asumirla. De la misma forma ocurre para el(s) Papel(es) Workflow, pero el prefijo debe ser "Pool:Role:" más el código del Papel.
Utilizando Servicios / Webservices
La construcción de un mecanismo aun posibilita la utilización de un Servicio de Integración Fluig, que podrá consumir un webservice del tipo SOAP o del tipo Progress para obtener los responsables, de acuerdo con una regla de negocio provista por el ERP, por ejemplo. Este método puede seguir el modelo a continuación:
function resolve(process,colleague){ var userList = new java.util.ArrayList(); //-- LLAMADA A UN SERVICIO DE INTEGRACIÓN FLUIG, CON UN WEBSERVICE ESPECIFICADO var biblioteca = ServiceManager.getService('ECMColleagueService').getBean(); var punto = biblioteca. instanciar ('com.totvs.technology.ecm. foundation.ws. ECMColleagueServiceServiceLocator'); var = webservice endpoint. getColleagueServicePort (); var usuariosDtoArray = webservice.getSummaryColleagues(1); for each(usuario in usuariosDtoArray.getItem()){ userList.add( usuario.getColleagueId().toString() ); } return userList; }
En que los parámetros "process" y "colleague" se refieren, respectivamente, a los objetos WorkflowProcess process y Colleague colleague.
WorkflowProcess | |
---|---|
Parámetro | Tipo |
companyId | long |
processInstanceId | int |
processId | String |
Versión | Integer |
requesterId | String |
active | Boolean |
attachmentSeqId | Integer |
sourceProcess | Integer |
sourceThreadSequence | Integer |
uuid | String |
Colleague | |
---|---|
Parámetro | Tipo |
colleaguePK
|
ColleaguePK |
userTenantId | long |
colleagueName | String |
String | |
login | String |
passwd | String |
active | Boolean |
adminUser | Boolean |
groupId | String |
El ejemplo anterior utilizó el webservice ECMColleagueService de la propia plataforma y el Servicio fue creado utilizando la API Axis, estándar del TOTVS ECM 3.0.