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