Árvore de páginas

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

 

Nota

Icon

El código para el mecanismo debe seguir la especificación de estandarización conforme al documento Formularios Fluig.

 

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.

 

Atención

Icon

Si ocurre cualquier error de sintaxis o en la ejecución del mecanismo, este se abortara y, consecuentemente, no devolverá ningún responsable para la próxima tarea/actividad del proceso. Es importante que toda la implementación pase por un tratamiento de errores y protección de ejecución. Una buena práctica es utilizar las cláusulas try catch.

 

 

Nota

Icon

Ningún mensaje de error se puede emitir al usuario durante su ejecución, pues estos mecanismos se pueden invocar sin que exista la interacción con el usuario, como por ejemplo, las llamadas al webservice ECMWorkflowEngineService por medio de las integraciones externas.

 

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 

  • long companyId
  • private String colleagueId
ColleaguePK 
userTenantId long 
colleagueName String
mail 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.