Árvore de páginas

Versões comparadas

Chave

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

...

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
languagejavascript
themeEclipse
firstline1
linenumberstrue
var campoCheckbox = hAPI.getCardValue("campoCheckbox") == "on" ? true : false;
setCardValue("nomeCampo", "valor")

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

  • nomeCampo: nome do campo do formulário;
  • valor: valor a ser definido para o campo do formulário.
setAutomaticDecision(numAtiv, listaColab, "obs")

Permite definir o fluxo de saída de uma atividade de forma automática, onde:

  • numAtiv: número da atividade destino;
  • listaColab: lista (do tipo String) dos usuários que receberão a tarefa;
    • Deve ser passada a matricula dos usuários que receberão a tarefa.
    • Se a atividade destino for automática ou um evento intermediário que não possui usuário, deve ser informado "System:Auto" no lugar da matrícula.
  • obs: observação da tarefa;

    Bloco de código
    languagejs
    themeEclipse
    function beforeStateEntry(sequenceId){
    	if(sequenceId == 4){
    		var users = new java.util.ArrayList();
    		
    		//Caso a próxima atividade seja uma automática utilizar users.add("System:Auto");
    		users.add("adm"); 
    
    		hAPI.setAutomaticDecision(7, users, "Decisao tomada automaticamente pelo Fluig");
    		
    	}
    }
    Informações

    É necessário adicionar na Extensão do Processo a propriedade AutomaticTasks com a lista de todas as atividades que terão decisão delegada por desenvolvimento sob a plataforma. Exemplo: AutomaticTasks=4

    Nota

    A propriedade AutomaticTasks caracteriza uma atividade comum como uma atividade automática, esta passará a possuir o mesmo comportamento, incluindo que não irá gerar mais notificações durante sua execução.

    Aviso

    A propriedade AutomaticTasks está depreciada não havendo mais suporte a partir da versão 1.5.9 do fluig. É recomentado a utilização da atividade de serviço http://tdn.totvs.com/x/9mUmDg ou gateway exclusivo http://tdn.totvs.com/x/BoWNBw

getActiveStates()Retorna uma lista das atividades ativas do processo.
getActualThread(numEmpresa, numProcesso, numAtiv)

Retorna a thread da atividade que está ativa, lembrando que em caso de atividades paralelas, retorna 0, 1, 2 e assim sucessivamente.

  • numEmpresa: número da empresa;
  • numProcesso: número da solicitação;
  • numAtiv: número da atividade.
Exemplo de uso para esta função:

 

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function afterTaskCreate(colleagueId) {

    var nrProxAtividade = getValue("WKNextState");
    if (nrProxAtividade == "5"){ //atividade entre paralelas
 
		var data = new Date();
		var numEmpresa = getValue("WKCompany");
	
		//seta o dia, mês (Janeiro é 0) e ano
		data.setDate(20);
		data.setMonth(10);
		data.setFullYear(2010);
	   
		// Recupera o numero da solicitação
		var numProcesso = getValue("WKNumProces");
	
		// Seta o prazo para as 14:00
		hAPI.setDueDate(numProcesso, hAPI.getActualThread(numEmpresa, numProcesso, nrProxAtividade), colleagueId, data, 50400);
	}
}
setDueDate(numProcesso, numThread, "userId", dataConclusao, tempoSeg)

Permite alterar o prazo de conclusão para uma determinada atividade do processo, onde:

  • numProcesso: número da solicitação;
  • numThread: número da thread (normalmente 0, quando não se utiliza atividades paralelas);
  • userId: o usuário responsável pela tarefa;
  • dataConclusao: a nova data de conclusão;
  • tempoSeg: tempo que representa a nova hora de conclusão, calculado em segundos após a meia-noite.

Informações

Recomendamos a utilização deste método no evento afterTaskCreate, pois será executado logo após a criação da tarefa. Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function afterTaskCreate(colleagueId) {
	var atividade = getValue('WKCurrentState');
	// Atividade de sequência 5 é a da tarefa criada e que vou alterar o prazo de conclusão
	if (atividade == 5) {
		// Recuperando a data informada no campo do formulário
		var prazoFormulario = hAPI.getCardValue('prazoConclusao');
		if (prazoFormulario != undefined && prazoFormulario != '') {
			var numeroDaSolicitacao = getValue('WKNumProces');
			var threadDaSolicitacao = 0; // Normalmente 0, quando não for atividade paralela
			var responsavelPelaTarefa = colleagueId;
			
			/* Nesse caso o formato da data salva pelo formulário no exemplo é DD/MM/AAAA, mas isso pode variar de acordo com a formatação utilizada, 
               mudando assim as posições das informações dentro do array */
			
			/* Extrai os dados da data do formulário para um array, para posteriormente transformar em data do Javascript */
			var arrayPrazoConclusao = prazoFormulario.split("/");
			var dia = arrayPrazoConclusao[0]; // Posição 0 do array é o dia
			var mes = arrayPrazoConclusao[1] - 1; // Posição 1 do array é o mês (Subtraímos 1 porque na data do Javascript o mês vai de 0 a 11)
			var ano = arrayPrazoConclusao[2]; // Posição 2 do array é o ano
			
			var horaDoPrazo = (24*60*60) - 1; /* A hora é em milisegundos, e esse cálculo tem resultado de 23:59:59, ou seja, 
            o prazo de conclusão vai ser até o último segundo do dia informado no formulário */
        	
			// Cria a data no Javascript
			var dataDoPrazo = new Date();
			dataDoPrazo.setDate(dia);
			dataDoPrazo.setMonth(mes);
			dataDoPrazo.setFullYear(ano);
			
			// Altera o prazo de conclusão
        	hAPI.setDueDate(numeroDaSolicitacao, threadDaSolicitacao, responsavelPelaTarefa, dataDoPrazo, horaDoPrazo); 
		}
	}	
}
transferTask(transferUsers, "obs", int numThread)

Transfere uma tarefa de um usuário para outro(s) usuário(s).

  • transferUsers: lista (do tipo String) de usuários;
  • obs: a observação;
  • numThread: sequência da thread, em caso de atividades paralelas.
transferTask(transferUsers, "obs")

Transfere uma tarefa de um usuário para outro(s) usuário(s). Este método não pode ser usado em processos com atividades paralelas:

  • transferUsers: lista (do tipo String) de usuários;
  • obs: a observação.
startProcess(processId, ativDest, listaColab, "obs", completarTarefa, valoresForm, modoGestor)

Inicia uma solicitação workflow, onde:

  • processId: código do processo;
  • ativDest: código da atividade de destino;
  • listaColab: lista (do tipo String) de usuários;
  • obs: texto da observação;
  • completarTarefa: indica se deve completar a tarefa (true) ou apenas salvar (false);
  • valoresForm: um Mapa com os valores do formulário do processo;
  • modoGestor: indica que o usuário iniciará a solicitação como gestor (true) ou que o usuário iniciará a solicitação apenas como solicitante (false).

Retorna um mapa com informações da solicitação criada. Entre elas, o iProcess que é o número da solicitação criada.

setColleagueReplacement(userId)

Seta um usuário substituto, onde:

  • userId: código do usuário substituto.
setTaskComments("userId", numProcesso,  numThread, "obs")

Define uma observação para uma determinada tarefa do processo, onde:

  • userId: usuário responsável pela tarefa;
  • numProcesso: número da solicitação de processo;
  • numThread: é o número da thread (normalmente 0, quando não se utiliza atividades paralelas);
  • obs: a observação.
Nota
titleAtenção

É recomendado utilizar em eventos do tipo 'after', pois o comentário será criado no histórico da solicitação, então é necessário que já exista uma movimentação do processo para atribuir este comentário.

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
getAdvancedProperty("propriedade")

Retorna o valor da propriedade avançada de um processo.

  • propriedade: nome da propriedade avançada. 
calculateDeadLineHours(data, segundos, prazo, periodId)

Calcula um prazo a partir de uma data com base no expediente e feriados cadastrados no produto passando o prazo em horas:

  • data: data inicial (tipo Date);
  • segundos: quantidade de segundos após a meia noite;
  • prazo: prazo que será aplicado em horas (tipo int);
  • periodId: código de expediente.  

Retorno: Array de Objeto, onde a primeira posição do array é a data e a segunda a hora.

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function afterTaskCreate(colleagueId) {
   	var data = new Date();

   	//Calcula o prazo
   	var obj = hAPI.calculateDeadLineHours(data, 50000, 2, "Default");
	var dt = obj[0];
	var segundos = obj[1];

   	//Recupera o numero da solicitação
   	var processo = getValue("WKNumProces");

   	//Altera o prazo do processo
	hAPI.setDueDate(processo,0,colleagueId, dt, segundos);
}
calculateDeadLineTime(data, segundos, prazo, periodId)

Calcula um prazo a partir de uma data com base no expediente e feriados cadastrados no produto passando o prazo em minutos:

  • data: data inicial (tipo Date);
  • segundos: quantidade de segundos após a meia noite;
  • prazo: prazo que será aplicado em minutos (tipo int);
  • periodId: código de expediente.

Retorno: Array de Objeto, onde a primeira posição do array é a data e a segunda a hora.

 Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function afterTaskCreate(colleagueId) {
	var data = new Date();
	//Calcula o prazo
	var obj = hAPI.calculateDeadLineTime(data, 50000, 120, "Default");
	var dt = obj[0];
	var segundos = obj[1];

	//Recupera o numero da solicitação
	var processo = getValue("WKNumProces");

	// Altera o prazo do processo
	hAPI.setDueDate(processo,0,colleagueId, dt, segundos);
}
getUserTaskLink(numAtiv)

Permite buscar o link para movimentação de uma determinada atividade, e utilizá-lo para enviar um e-mail com template personalizado, por exemplo.

  • numAtiv: número da atividade
Retorno: link para movimentação da solicitação.

 

Nota
titleAtenção

Este método não retorna link para atividades que ainda não foram criadas, ou seja, não pode ser utilizado em eventos como afterTaskComplete(colleagueId,nextSequenceId,userList) para obter o link da atividade com "nextSequenceId".

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function afterTaskCreate(colleagueId) {
	var sequenceId = getValue("WKCurrentState");
	if (sequenceId == 2) {
		var destinatarios = new java.util.ArrayList();
		destinatarios.add(colleagueId);
 
		var parametros = new java.util.HashMap();
		parametros.put("WDK_CompanyId", getValue("WKCompany"));
		parametros.put("WDK_TaskLink", hAPI.getUserTaskLink(sequenceId));
 
		notifier.notify(getValue("WKUser"), "tplCustomizado", parametros, destinatarios, "text/html");	
	}
}
createAdHocTasks(workflowProcessInstanceId, sequenceId, assunto, detalhamento, listatvidadesAhoc)

Permite a criação de atividades adhoc dentro dos eventos do fluig

  • workflowProcessInstanceId: número da solicitação workflow no qual se deseja criar as tarefas;
  • sequenceId: código de sequencia da atividade de SubprocessoAdhoc;
  • Assunto: assunto da listagem das tarefas que será repassado ao formulário de atividade ad-hoc;
  • Detalhe: texto com o detalhamento das atividades em questão. Esse texto também será repassado para o formulário da atividade ad-hoc;
  • listaAtividadesAdhoc: é a lista de atividades contento o que, quando e quem executará as tarefas ad-hoc.

Nota
titleAtenção

Certifique-se que o sequenceId é a sequência da atividade ad-hoc. Normalmente esta atividade contém o símbolo do sub-processo comum acompanhado do identificador "~", conforme exemplo abaixo :

A sequência pode ser consultada a partir do plugin fluig Designer verificando o campo código ao visualizar as propriedades da atividade de subprocesso ad-hoc.

 

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeStateEntry(sequenceId){
	//lista das tarefas
	var adHocTasks = new Array();
	// variavel com o código da solicitação do processo.
    var process = getValue("WKNumProces");
    
    //criando uma tarefa
    var task = { name:"nome da tarefas", responsible:"adm", dueDate:"10/10/2014"};
    //adicionando a tarefa criada para a lista de tarefas
    adHocTasks.push(task);
	
    
    // process    = numero da solicitacao 
    // sequenceId = codigo processstate da atividade que tem o processo ad-hoc
    // meeting    = nome do assunto em questao
    // detalhe    = detalhamento do assunto
    // adHocTasks   lista te tarefas
   
    hAPI.createAdHocTasks(process, sequenceId, "Assunto das tarefas", "Detalhamento do assunto ", adHocTasks);
	 
	
}
listAttachments()

Retorna a lista de anexos do processo.

DocumentDto[ ]

Veja aqui os paramêtros do objeto DocumentDto.

Nota
titleAtenção

O formulário do processo não é retornado, apenas anexos do tipo GED e Workflow.

 

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
	var attachments = hAPI.listAttachments();
	var hasAttachment = false;

	for (var i = 0; i < attachments.size(); i++) {
		var attachment = attachments.get(i);
		if (attachment.getDocumentDescription() == "fluig.pdf") {
			hasAttachment = true;
		}
	}

	if (!hasAttachment) {
		throw "Attachment not found!";
	}
}
publishWorkflowAttachment(documento)

Permite publicar anexos workflow da solicitação no GED do fluig, onde:

  • documento: anexo workflow a ser publicado no GED.

Nota
titleAtenção

É obrigatório informar o id da pasta destino do documento através do método setParentDocumentId, conforme o exemplo abaixo.

 

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeStateEntry(sequenceId){
	if (sequenceId == 4) {
		var calendar = java.util.Calendar.getInstance().getTime();
		var docs = hAPI.listAttachments();
		for (var i = 0; i < docs.size(); i++) {
			var doc = docs.get(i);
			
			if (doc.getDocumentType() != "7") {
				continue;
			}
			
			doc.setParentDocumentId(27);
			doc.setVersionDescription("Processo: " + getValue("WKNumProces"));
			doc.setExpires(false);
			doc.setCreateDate(calendar);
			doc.setInheritSecurity(true);
			doc.setTopicId(1);
			doc.setUserNotify(false);
			doc.setValidationStartDate(calendar);
			doc.setVersionOption("0");
			doc.setUpdateIsoProperties(true);
			
			hAPI.publishWorkflowAttachment(doc);
		}
	}
}

attachDocument(documentId)

Âncora
attachDocumentDocs
attachDocumentDocs

Permite anexar documentos do GED a solicitação workflow, onde:

  • documentId: código do documento a ser anexado a solicitação.

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeStateEntry(sequenceId) {
	var docList = [44, 46, 135];
	
	if (sequenceId == 2) {
		for (var i = 0; i < docList.length; i++) {
			var docId = docList[i];
			hAPI.attachDocument(docId);
		};	
	}
}

getAvailableStatesDetail(companyId, userId, processId, processInstanceId, threadSequence)

Retorna detalhes das atividades disponíveis para seleção.

Parâmetros:

  • companyId: código da empresa;
  • userId: id do usuário;
  • processId: código do processo;
  • processInstanceId: número da solicitação;
  • threadSequence: indica se existe atividade paralela no processo. Se não existir o valor é 0 (zero), caso exista, este valor pode ser de 1 a infinito, dependendo da quantidade de atividade paralelas existentes no processo.

Retorno: ProcessStateDto[].

getChildrenInstances(processInstanceId)

Retorna uma lista com os números das solicitações filhas, onde:

  • processInstanceId: número da solicitação pai.

Exemplo:

Bloco de código
languagejs
themeEclipse
firstline1
function beforeStateEntry(sequenceId){
if (sequenceId == 5) {
    var numProcess = getValue("WKNumProces");

    // Busca a Lista com o número da solicitação dos filhos
    var childrenProcess = hAPI.getChildrenInstances(numProcess);

    for (var i = 0; i < childrenProcess.size(); i++) {
    	// Busca os dados do formulário da solicitação filha
    	var childCardData = hAPI.getCardData(childrenProcess.get(i));

    	// Replica um dado do formulário da solicitação filha para o formulário da solicitação pai
    	var obs = childCardData.get("obs");
    	hAPI.setCardValue("obs", obs );
    	}
	}
}


getParentInstance(processInstanceId)

Retorna o número da solicitação pai, onde:

  • processInstanceId: número da solicitação filha.

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeStateEntry(sequenceId) {
    if (sequenceId == 2) {
        var numProcess = getValue("WKNumProces");
    
        // Busca o número da solicitação pai
        var parentProcess = hAPI.getParentInstance(numProcess);
 
        // Busca os dados do formulário da solicitação pai
        var parentCardData = hAPI.getCardData(parentProcess);
 
        // Replica um dado do formulário da solicitação pai para o formulário da solicitação filha
        var cnpj = parentCardData.get("cnpj");
        hAPI.setCardValue("cnpj", cnpj);
    } 
}
addCardChild(tableName, cardData)

Adiciona um filho no formulário pai e filho do processo, onde:

  • tableName: nome da tabela filha onde será criado o filho;
  • cardData: mapa com os campos do filho e seus valores.

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function beforeStateEntry(sequenceId) {
	if (sequenceId == 4) {
		var childData = new java.util.HashMap();
		childData.put("matricula", "0041");
		childData.put("nome", "João Silva");
		childData.put("cpf", "44455889987");
		hAPI.addCardChild("funcionarios", childData);
	}
}

...