Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Método
Especificação
getCardValue("nomeCampo")

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

  • nomeCampo: nome do campo do formulário. 


Tip
titleDica

Campos do tipo checkbox retornarem 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:

Code Block
languagejs
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")
Warning
titleAtenção: Depreciado

O método setAutomaticDecision encontra-se depreciado, não havendo mais suporte a partir da atualização 1.5.9 do fluig.

Recomenda-se a utilização da atividade de Serviço ou Gateway Exclusivo.

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;

Code Block
languagejs
linenumberstrue
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");
         
    }
}
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:


Code Block
languagejs
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.

    Info

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

    Code Block
    languagejs
    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.


Exemplo de inicialização de uma solicitação pelo método hAPI.startProcess enviando a atividade para um papel:

Code Block
languagejs
linenumberstrue
function beforeStateEntry(sequenceId){
	
	if (sequenceId == 5) {
		//A tarefa destino tem o mecanismo de atribuição para um papel, cujo o código é papelUser
		var users = new java.util.ArrayList();
		users.add("Pool:Role:papelUser");
		
		var formData = new java.util.HashMap();
 
		formData.put("Nome_do_Campo1", "Valor do Campo 1");
        formData.put("Nome_do_Campo2", "Valor do Campo 2");
						
		hAPI.startProcess("pool", 4, users, "Solicitação inicializada pela função hAPI", true, formData, false);
	}
	
}
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.

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

Info

Para formulário 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 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)


Warning
titleImportante!

Este método retorna o horário com a formatação BRT, sendo necessário algumas adaptações em algumas funções do javascript, como exemplo: getFullYear().

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:


Code Block
languagejs
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:


Code Block
languagejs
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.


Note
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:


Code Block
languagejs
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.

    Note
    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:


Code Block
languagejs
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 e aqui os métodos para acesso as variáveis.


Note
titleAtenção

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


Exemplo:


Code Block
languagejs
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.

    Note
    titleAtenção

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

Exemplo:


Code Block
languagejs
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)


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

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

Exemplo:


Code Block
languagejs
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);
        }; 
    }
}

Veja o exemplo (document-attach) no repositório do fluig clicando aqui.

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:


Code Block
languagejs
linenumberstrue
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:


Code Block
languagejs
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:


Code Block
languagejs
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);
    }
}

...