Árvore de páginas

Versões comparadas

Chave

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

...

Desenvolvimento de Workflow

Propriedades Extensão

As propriedades de extensão contêm informações especiais que podem alterar o comportamento padrão do processo em algum ponto. Elas devem ser utilizadas principalmente durante a fase de customização ou conter "flags" especiais que alterem alguma lógica interna (apenas em casos especiais).

...

Na imagem a seguir é possível visualizar o atributo adicionado, definindo as atividades 2 e 4 (separadas por vírgula) como atividades automáticas do processo.

Eventos do Processo

Os eventos de um processo são um conjunto de scripts carregados pela API de workflow. Tais scripts são desenvolvidos com o uso da linguagem JavaScript e chamados ao longo da execução do processo em momentos pré-determinados, como por exemplo a criação da solicitação do processo ou a entrada em uma nova atividade.

...

Para criar um novo evento do processo, clicar com o botão direito do mouse no projeto, acessar a opção New e em seguida a opção Other. No assistente aberto, selecionar a opção "Script Evento Workflow", presente na pasta Fluig, e clicar no botão Next. Na nova tela selecionar qual o evento que será criado e relacionar ele a um processo já existente. Para finalizar, clicar no botão Finish:

 


Acompanhamento de eventos

A partir do Fluig 1.4.9, é possível acompanhar a execução dos eventos através do componente de loading. Com este acompanhamento, é possível apresentar mensagens para o usuário tomar conhecimento das rotinas que estão sendo executadas quando a solicitação é avançada. Essa ferramenta também pode ser muito útil para o desenvolvedor identificar pontos de baixa performance nos desenvolvimentos realizados sob a plataforma.

hAPI

Em todos os eventos do processo é possível obter informações da API de Workflow. Cada evento possui acesso ao handle da API de workflow através da variável global hAPI. Os seguintes métodos estão disponíveis através da hAPI:

...

Nota

Importante: Não é possível capturar (hAPI.getCardValue) ou adicionar (hAPI.setCardValue) dados no formulário na inicialização do processo, sendo possível somente a partir da segunda tarefa.

Para isso pode ser utilizado a seguinte lógica:

Bloco de código
themeEclipse
languagejavascript
firstline1
linenumberstrue
function beforeStateEntry(sequenceId) {
	if (sequenceId  != "NUMERO_DA_ATIVIDADE_INICIAL") {
		var campo = hAPI.getCardValue("campo1");
	}
}

Customização do Processo

Com o uso de eventos, o Fluig permite que um processo seja customizado possibilitando a execução de ações definidas pelo usuário, tais como:

...

Deck of Cards
effectDuration0.5
idsamples
historyfalse
effectTypefade
Card
defaulttrue
id1
labelExemplo 1

Para validar se o usuário está completando uma atividade corretamente, basta utilizar o evento beforeTaskSave e retornar alguma mensagem caso queira disparar um erro. Por exemplo, segue parte de um código de customização para um processo:

Bloco de código
themeEclipse
languagejavascript
firstline1
linenumberstrue
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
	var ativAtual = getValue("WKNumState");
	var process = parseInt(globalVars.get("process"));
	
	var resp1 = hAPI.getCardValue("resp1_H");
	var eficacia1 = hAPI.getCardValue("eficaz1");  
	var controle1 = hAPI.getCardValue("controle1");
	var eficaz = true;

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

	if (ativAtual == 7 && nextSequenceId == 12) {
		if (resp1 != "" && eficacia1 != "1" && eficacia1 != "2") {
			if (verificaUsuario(users, resp1)) {
				users.add(resp1);
			}
		}

		hAPI.setAutomaticDecision(8, users, "Decisao tomada automaticamente pelo Fluig.");
	
	} else if (ativAtual == 9 && nextSequenceId == 13) {
		if (resp1 != "" && eficacia1 == "2" && controle1 == ""){
			eficaz = false;
		}

		if (eficaz) {
			var codGrupo = buscaGrupo(process, "Qualidade");
			users.add("Pool:Group:" + codGrupo);
			hAPI.setAutomaticDecision(6, users , "Decisao tomada automaticamente pelo Fluig.");
		}
	}
}
Card
id2
labelExemplo 2

Para fazer com que uma decisão seja tomada automaticamente, os seguintes procedimentos devem ser executados:

  1. Adicionar na Extensão do Processo a propriedade AutomaticTasks com a lista de todas as atividades que terão decisão delegada via customização. Exemplo: AutomaticTasks=3,6,10.
  2. Implementar o evento beforeStateEntry e executar o método "setAutomaticDecision" da hAPI, passando como parâmetros a próxima atividade, o próximo usuário (ou lista de usuários) e uma observação.

 

Bloco de código
themeEclipse
languagejavascript
firstline1
linenumberstrue
function beforeStateEntry(sequenceId) {    
	var userList = new java.util.ArrayList();
	userList.add("adm");
	hAPI.setAutomaticDecision(6, userList, "Decisao tomada automaticamente pelo Fluig.");
}
Informações

As atividades com decisão automática também podem ser criadas via editor de processo.

Card
id3
labelExemplo 3

Para iniciar uma nova solicitação de um outro processo ao finalizar uma solicitação pode ser executados os seguintes procedimentos:

  1. Cadastrar um serviço no Fluig em que a URL seja o WSDL do serviço ECMWorkflowEngineService.
  2. Implementar o evento afterProcessFinish utilizando o exemplo abaixo. Sendo ‘process2’ o novo processo a ser inicializado

Tratamento de Exceções

As exceções podem ser tratadas nos seguintes eventos: beforeStateEntry, beforeTaskSave e beforeCancelProcess. O tratamento de exceção no evento beforeStateEntry pode ser utilizado na inicialização de solicitações, pois ele impede que a solicitação seja iniciada. O tratamento de exceção no evento beforeTaskSave pode ser utilizado somente se a solicitação já estiver inicializada.

...

Bloco de código
themeEclipse
languagejavascript
firstline1
linenumberstrue
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
	if (getValue("WKUserComment") == null || getValue("WKUserComment") == "") {
		throw "A observação deve ser preenchida";
	}	
}

function beforeCancelProcess(colleagueId, processId) {
	if (getValue("WKUserComment") == null || getValue("WKUserComment") == "") {
		throw "A observação deve ser preenchida";
	}	
}

Mecanismo de Atribuição

Os mecanismos de atribuição são instrumentos utilizados durante um processo de workflow que permitem criar, segundo um critério estabelecido pelo próprio mecanismo, uma lista de possíveis usuários para uma atividade. Esta lista pode ser utilizada em dois momentos:

...

Deck of Cards
startHiddenfalse
effectDuration0.5
idmecatrib
historyfalse
effectTypefade
Card
defaulttrue
id1
label1º Passo

 

Para criar um novo mecanismo de atribuição customizado, clicar com o botão direito do mouse no projeto do Fluig, acessar a opção New e então a opção Other. No assistente aberto, selecionar a opção "Mecanismo customizado Fluig" presente na pasta Fluig e clicar no botão Next:

 

Card
id2
label2º Passo

 

O assistente Novo Mecanismo Fluig é aberto. Informar o Código e uma descrição e clicar no botão Finish:

 

Card
id3
label3º Passo (Implementação)

 

O arquivo JavaScript do mecanismo de atribuição é adicionado ao projeto na pasta mechanisms e aberto para edição.

O script de customização de mecanismo de atribuição recebe como parâmetro o código do processo e o usuário corrente. Este script deve retornar uma lista dos usuários que podem assumir a tarefa. Abaixo, exemplo de implementação:

Bloco de código
themeEclipse
languagejavascript
firstline1
linenumberstrue
function resolve(process, colleague) {
	var userList = new java.util.ArrayList();

	var groupId = colleague.getGroupId();

	var c1 = DatasetFactory.createConstraint("cdArea", groupId, groupId, ConstraintType.MUST); 
	var constraints = new Array(c1);
	
	var dataset = DatasetFactory.getDataset("dsResponsaveisArea", null, constraints, null);
	
	for (var i = 0; i < dataset.rowsCount; i++) {
		userList.add(dataset.getValue(i, "cdUsuarioResp"));
	}
	
	return userList;
}
Informações

É possível acessar Datasets e Serviços cadastrados no Fluig na customização do mecanismo de atribuição.

Card
id4
labelÚltimo Passo (Exportação)


Por fim, o mecanismo de atribuição customizado deve ser exportado para o servidor do Fluig e ao realizar a exportação deve ser informado obrigatoriamente seu código e nome, e opcionalmente uma descrição:

 

 

Parâmetros Workflow para Customização de Formulários

Para processos que possuem uma definição de formulário definida são passados alguns parâmetros com informações sobre o processo para serem utilizados nos eventos da definição de formulário, conforme abaixo:

...