Árvore de páginas

Versões comparadas

Chave

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

...

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 desenvolvimento personalizado sob a plataforma ou conter "flags" especiais que alterem alguma lógica interna (apenas em casos especiais).

...

Neste exemplo iremos criar atividades automáticas personalizadasdesenvolvidas sob a plataforma.

 

 

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.

...

Nota
titleImportante!

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 utilizada 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");
	}
}

...

Desenvolvimento de processo sob a plataforma

Com o uso de eventos, o fluig permite que um processo seja pesonalizado desenvolvido sob a plataforma, possibilitando a execução de ações definidas pelo usuário, tais como:

...

Existem algumas propriedades que contém informações referentes à solicitação que podem ser utilizadas na personalização no desenvolvimento do processo sob a plataforma, são elas:

ParâmetroDescrição
WKDefCódigo do processo.
WKVersDefVersão do processo.
WKNumProcesNúmero da solicitação de processo.
WKNumStateNúmero da atividade.
WKCompanyNúmero da empresa.
WKUserCódigo do usuário corrente.
WKUserCommentComentário feito pelo usuário na atividade ou no cancelamento da solicitação.
WKCompletTaskSe a tarefa foi completada (true/false).
WKNextStateNúmero da próxima atividade (destino).
WKCardIdCódigo do formulário do processo.
WKFormIdCódigo da definição de formulário do processo.
WKIdentityCompanyIdentificador da empresa selecionada para Experiências de uso TOTVS.
WKMobileIdentifica se a ação foi realizada através de um dispositivo mobile.
WKIsServiceIdentifica se a solicitação de cancelamento foi realizada através de um serviço. Esta variável só pode ser consultada nos eventos beforeCancelProcess e afterCancelProcess.
WKUserLocaleIdentifica o idioma corrente do usuário.

...

Além dessas propriedades já alimentadas pela plataforma, é possível criar propriedades personalizadas desenvolvidas sob a plataforma que podem ser utilizadas nos eventos. O produto disponibiliza a variável globalVars, que é um mapa de dados (Map<String, String>) e estará disponível em todos os eventos.

...

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 desenvolvimento de personalização para um processo sob a plataforma:

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 personalizaçãodesenvolvimento sob a plataforma. 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 podem 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.

Bloco de código
themeEclipse
languagejs
firstline1
linenumberstrue
function afterProcessFinish(processId) {
	
	// Servico <url_fluig>/webdesk/ECMWorkflowEngineService?wsdl
	// Busca o webservice cadastrado com o código "WorkflowEngineService"
	var workflowEngineServiceProvider = ServiceManager.getServiceInstance("WorkflowEngineService");
	var workflowEngineServiceLocator = workflowEngineServiceProvider.instantiate("com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService");
	var workflowEngineService = workflowEngineServiceLocator.getWorkflowEngineServicePort();
 
	// Cria o ProcessAttachmentDtoArray
	var processAttachmentDtoArray = workflowEngineServiceProvider.instantiate("com.totvs.technology.ecm.workflow.ws.ProcessAttachmentDtoArray");

	// Cria o ObjectFactory
	var objectFactory = workflowEngineServiceProvider.instantiate("com.totvs.technology.ecm.workflow.ws.ObjectFactory");
	
	// Cria um String[][]
	var cardData = objectFactory.createStringArrayArray();
	
	// Cria uma solicitação
	workflowEngineService.simpleStartProcess("adm", "adm", 1, "process2", "Comment", processAttachmentDtoArray, cardData);	
}
Informações

Existem outros métodos parar iniciar uma solicitação, consulte-os aqui.

Lembre-se de consultar a classe ObjectFactory do serviço, essa classe possui diversos métodos para criar instância de objetos necessários para utilização do serviço.

...

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

 

Para criar um novo mecanismo de atribuição personalizadodesenvolvido sob a plataforma, 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 personalização de mecanismo de atribuição desenvolvido sob a plataforma 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 personalização no desenvolvimento do mecanismo de atribuição sob a plataforma.

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


Por fim, o mecanismo de atribuição personalizado desenvolvido sob a plataforma 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

...

desenvolvimento de formulários sob a plataforma

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

...