Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Índice
outlinetrue
exclude.*ndice
stylenone

 


Objetivo

O objetivo deste guia é orientar como construir um script com a finalidade de resolver os responsáveis por uma tarefa do processo workflow e/ou gestor de processo.

...

Informações
titleNota

O código para o mecanismo deve seguir a especificação de padronização conforme o documento Nomenclatura e Estrutura de Formulários.

 


Com isto, será criada a função básica que deve ser implementada: 

Bloco de código
languagejs
linenumberstrue
function resolve(process,colleague){

	var userList = null; /* Para adicionar novos usuários, deve ser um ArrayList, conforme exemplos a seguir */

	return userList;

}

...


A função acima não retorna nenhum usuário. Sua execução não possibilitará escolher ninguém, por isto, esta função deve ser complementada.

...

Informações
titleNota

Nenhuma mensagem de erro pode ser emitida ao usuário durante sua execução, pois estes mecanismos podem ser invocados sem que haja a interação com o usuário, como por exemplo, as chamadas ao webservice ECMWorkflowEngineService por meio das integrações externas.

 


Retornando uma Listagem de Usuários

...

Bloco de código
languagejs
linenumberstrue
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 hAPI

Nota
titleAtenção

A utilização da hAPI só está disponível a partir da Atualização 1.5.12

...

Os seguintes métodos são recomendados para utilização:

MétodoEspecificação
getCardValue("nomeCampo")

Permite acessar o valor de um campo do formulário do processo, onde:

  • nomeCampo: nome do campo do formulário.
 


Dica
titleDica

Campos do tipo checkbox retornam os valores on para marcado ou "" (vazio) para não marcado. Para trabalhar de uma maneira mais fácil, é possível transformá-los em booleanos.

Exemplo:

Bloco de código
languagejs
themeEclipse
firstline1
linenumberstrue
var campoCheckbox = hAPI.getCardValue("campoCheckbox") == "on" ? true : false;
getCardData(numProcesso)

Retorna um Mapa com todos os campos e valores do formulário da solicitação.

  • numProcesso: número da solicitação de processo.

 


Informações

Para formulários pai e filho, os campos são identificados da seguinte forma: campo1___1, sendo campo1 o nome atribuído ao campo através da tag name do campo HTML + ___ (3 underlines) + número sequencial do registro.

 


Por exemplo, em um formulário de nota fiscal com os seguintes campos:

  • Formulário pai:
    • Número da Nota - numNota;
  • Formulário filho:
    • Código do item - codItem;
    • Descrição do item - desItem;
    • Quantidade do item - qtdItem;

O retorno do Mapa seria:

  • numNota = 99999
  • codItem___1 = 91
  • desItem___1 = Caneta
  • qtdItem___1 = 100
  • codItem___2 = 92
  • desItem___2 = Lápis
  • qtdItem___2 = 200
  • codItem___3 = 93
  • desItem___3 = Borracha
  • qtdItem___3 = 150
Nota

A hAPI dispõe de outro métodos, que são abordados na documentação de Desenvolvimento de Workflow. Contudo apenas os métodos mencionados acima são recomendados para o desenvolvimento de Mecanismos de atribuição.

 


Exibindo usuários conforme campo selecionado

...

Bloco de código
languagejs
linenumberstrue
function resolve(process, colleague) {
	var userList = new java.util.ArrayList();
	var setor = hAPI.getCardValue("setor");
	//Criando constraints para retornar os usuário do grupo
	var cGrupo = DatasetFactory.createConstraint("colleagueGroupPK.groupId",
			setor, setor, ConstraintType.MUST);	
	var constraintsGroup = new Array(cGrupo);
	//Chamando dataset "colleagueGroup" para retornar os usuários
	var colleagues = DatasetFactory.getDataset("colleagueGroup", null,
			constraintsGroup, null);
	
	for (var i = 0; i < colleagues.values.length; i++) {
		//Adicionando usuário como opção de responsável
		userList.add(colleagues.getValue(i, "colleagueGroupPK.colleagueId"));
	}
	return userList;
}


Utilizando parâmetros

É disponibilizada a variável "WKIsTransfer" nos "WKParams" que retorna se a movimentação é uma transferência ou não. É possível bloquear o usuário de transferir uma atividade, através deste parâmetro.


Bloco de código
linenumberstrue
function beforeTaskCreate(colleagueId) {
	var isTransfer = getValue("WKIsTransfer");

	if (isTransfer !== null) {
		if (JSON.parse(isTransfer)) {
			throw "Não é permitido transferir a atividade!";
		}
	}
}


Utilizando Datasets

É possível realizar a consulta a um Dataset da Plataforma (interno, formulários ou customizado), a fim, de elaborar o resultado final dos usuários que poderão ser listados para escolha da execução da próxima atividade. Este procedimento pode ser realizado conforme o exemplo a seguir:

Bloco de código
languagejs
linenumberstrue
function resolve(process,colleague){

	var userList = new java.util.ArrayList();

	//-- CONSULTA A UM 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 UM DATASET, DE PAPEIS 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;

}

...


No exemplo acima, para que o(s) Grupo(s) seja(m) listado(s) é necessária a inclusão do prefixo "Pool:Group:" concatenado ao código deste Grupo. Com isto, ao selecionar o grupo a atividade é atribuída ao Grupo e uma pessoa deste deverá assumi-la. Da mesma forma ocorre para o(s) Papel(éis) Workflow, porém o prefixo deve ser "Pool:Role:" mais o código do Papel. 


Utilizando Serviços / Webservices

...

Bloco de código
languagejs
linenumberstrue
function resolve(process,colleague){

	var userList = new java.util.ArrayList();

	//-- CHAMADA A UM SERVICO DE INTEGRACAO FLUIG, COM UM WEBSERVICE ESPECIFICADO
	var biblioteca = ServiceManager.getService('ECMColleagueService').getBean();
	var endpoint = biblioteca.instantiate('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;

}

 


Em que os parâmetros "process" e "colleague" se referem, respectivamente, aos objetos WorkflowProcess process e Colleague colleague. 


WorkflowProcess
ParâmetroTipo

workflowProcessPK

  • long companyId
  • int processInstanceId
WorkflowProcessPK
processIdString
versionInteger
requesterIdString
activeBoolean
attachmentSeqId Integer
sourceProcess Integer
sourceThreadSequence Integer
UUIDString
Colleague
ParâmetroTipo

colleaguePK 

  • long companyId
  • private String colleagueId
ColleaguePK 
userTenantIdlong 
colleagueNameString
mailString
loginString
passwdString
activeBoolean 
adminUserBoolean 
groupIdString

 


O exemplo acima utilizou o webservice ECMColleagueService da própria plataforma e o Serviço foi criado utilizando a API Axis.