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 pela variável global hAPI. Os seguintes métodos estão disponíveis através da hAPI:
Veja o exemplo em nosso repositório aqui. |
Método | Especificação | ||||
---|---|---|---|---|---|
getCardValue("nomeCampo") | Permite acessar o valor de um campo do formulário do processo, onde:
| ||||
setCardValue("nomeCampo", "valor") | Permite definir o valor de um campo do formulário do processo, onde:
| ||||
setAutomaticDecision(numAtiv, listaColab, "obs") |
Permite definir o fluxo de saída de uma atividade de forma automática, onde:
| ||||
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.
Exemplo de uso para esta função:
| ||||
setDueDate(numProcesso, numThread, "userId", dataConclusao, tempoSeg) | Permite alterar o prazo de conclusão para uma determinada atividade do processo, onde:
| ||||
transferTask(transferUsers, "obs", int numThread) | Transfere uma tarefa de um usuário para outro(s) usuário(s).
| ||||
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:
| ||||
startProcess(processId, ativDest, listaColab, "obs", completarTarefa, valoresForm, modoGestor) | Inicia uma solicitação workflow, onde:
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:
| ||||
setColleagueReplacement(userId) | Seta um usuário substituto, onde:
| ||||
setTaskComments("userId", numProcesso, numThread, "obs") | Define uma observação para uma determinada tarefa do processo, onde:
| ||||
getCardData(numProcesso) | Retorna um Mapa com todos os campos e valores do formulário da solicitação.
| ||||
getAdvancedProperty("propriedade") | Retorna o valor da propriedade avançada de um processo.
| ||||
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:
Retorno: Array de Objeto, onde a primeira posição do array é a data e a segunda a hora. Exemplo:
| ||||
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:
Retorno: Array de Objeto, onde a primeira posição do array é a data e a segunda a hora. Exemplo:
| ||||
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.
Retorno: link para movimentação da solicitação.
Exemplo:
| ||||
createAdHocTasks(workflowProcessInstanceId, sequenceId, assunto, detalhamento, listatvidadesAhoc) | Permite a criação de atividades adhoc dentro dos eventos do fluig
| ||||
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.
Exemplo:
| ||||
publishWorkflowAttachment(documento) | Permite publicar anexos workflow da solicitação no GED do fluig, onde:
Exemplo:
| ||||
attachDocument(documentId) | Permite anexar documentos do GED a solicitação workflow, onde:
Exemplo:
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:
Retorno: ProcessStateDto[]. | ||||
getChildrenInstances(processInstanceId) | Retorna uma lista com os números das solicitações filhas, onde:
Exemplo:
| ||||
getParentInstance(processInstanceId) | Retorna o número da solicitação pai, onde:
Exemplo:
| ||||
addCardChild(tableName, cardData) | Adiciona um filho no formulário pai e filho do processo, onde:
Exemplo:
| ||||
removeCardChild |
Remove uma linha de uma tabela Pai X Filho. Utilize o método removeCardChild, passando o nome da tabela (valor do atributo name) e o número da linha que deseja deletar. Exemplo: removeCardChild(tableName, 1);
|
Nos eventos existe a possibilidade de integração com serviços de dados. Tais serviços podem ser WebServices, AppServer Progress® e Dataset.
O acesso a WebServices ou AppServer Progress® deve ser previamente configurado no cadastro de Serviços. Para mais detalhes consulte em Integração com aplicativos externos, no capítulo "Acessando WebServices a partir do fluig".
Abaixo um exemplo de como executar o WebService de Colleague para criar um usuário no fluig após executar uma tarefa:
function afterTaskComplete(colleagueId, nextSequenceId, userList) { if (nextSequenceId == 2) { //Busca o webservices de Colaborador //Servico "<url_fluig>/webdesk/ECMColleagueService?wsdl" cadastrado com o código "Colleague" var colleagueServiceProvider = ServiceManager.getServiceInstance("Colleague"); var colleagueServiceLocator = colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService"); var colleagueService = colleagueServiceLocator.getColleagueServicePort(); //Cria o ColleagueDto – Verificar a lista de métodos na visualização do serviço var colleagueDto = colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ColleagueDto"); colleagueDto.setCompanyId(1); colleagueDto.setColleagueId("teste"); colleagueDto.setColleagueName("Usuario Teste"); colleagueDto.setActive(true); colleagueDto.setVolumeId("Default"); colleagueDto.setLogin("teste"); colleagueDto.setMail("[email protected]"); colleagueDto.setPasswd("teste"); colleagueDto.setAdminUser(false); colleagueDto.setEmailHtml(true); colleagueDto.setDialectId("pt_BR"); //Cria o colleagueDtoArray e adiciona var colleagueDtoArray = colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ColleagueDtoArray"); colleagueDtoArray.getItem().add(colleagueDto); var result = colleagueService.createColleague("adm", "adm", 1, colleagueDtoArray); log.info("Result: " + result); } } |
Abaixo um outro exemplo utilizando o WebService ECMCardService para alterar o valor do campo de um registro de formulário após a entrada em uma nova atividade:
function afterStateEntry(sequenceId){ if (sequenceId == 2) { //Servico "<url_fluig>/webdesk/ECMCardService?wsdl"cadastrado com o código "CardService" var cardServiceProvider = ServiceManager.getServiceInstance("01"); var cardServiceLocator = cardServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.ECMCardServiceService"); var cardService = cardServiceLocator.getCardServicePort(); var cardFieldDtoArray = cardServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.CardFieldDtoArray"); var cardField = cardServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.CardFieldDto"); //Seta valor no campo com name = 'nome' cardField.setField("nome"); cardField.setValue("Valor alterado via WS dentro de um evento workflow"); var vetCardFields = new Array(); vetCardFields.push(cardField); cardFieldDtoArray.getItem().addAll(vetCardFields); //Altera o(s) campo(s) do registro de formulário. //updateCardData(tenantId, login, senha, codRegistroForm, cardFieldDtoArray); cardService.updateCardData(1, "adm", "adm", 8, cardFieldDtoArray); } } |
Os seguintes eventos são disparados pela API de Workflow:
Evento | Descrição | Parâmetros | |
---|---|---|---|
afterCancelProcess | Ocorre após o cancelamento da solicitação. É recomendado não disparar exceções neste método, pois o cancelamento já foi realizado. |
| |
afterProcessCreate | Ocorre logo após a criação de um novo processo. |
| |
afterProcessFinish | Ocorre após finalizada a solicitação. |
| |
afterReleaseVersion | Ocorre após a liberação de uma versão do processo. |
| |
afterStateEntry | Ocorre após a entrada em uma nova atividade. Este evento não retorna erros para a tela naturalmente. Caso ocorra um erro durante a execução do afterStateEntry, ele será ignorado. Se o mesmo erro resultar no encerramento da transação (por exemplo, causando o timeout de transação ou uma exceção que force Rollback) a mensagem de transação interrompida será apresentada em tela ao invés do erro esperado. |
| |
afterStateLeave | Ocorre após a saída de uma atividade. |
| |
afterTaskComplete | Ocorre após o usuário completar uma tarefa, porém as informações de próxima tarefa e usuários destino já foram salvas. |
| |
afterTaskCreate | Ocorre após o usuário receber uma tarefa. |
| |
afterTaskSave | Ocorre após salvar as informações selecionadas pelo usuário. |
| |
beforeCancelProcess | Ocorre antes do cancelamento da solicitação. |
| |
beforeStateEntry | Ocorre antes da entrada em uma nova atividade. Dica Utilize este evento para realizar validações que ocasionalmente possam resultar no bloqueio da movimentação do processo. Para suspender a movimentação e exibir uma mensagem de alerta para o usuário, utilize o comando 'throw', conforme exemplo abaixo:
|
| |
beforeStateLeave | Ocorre antes da saída de uma atividade. |
| |
beforeTaskComplete | Ocorre antes que o usuário complete uma tarefa, porém as informações de próxima tarefa e usuários destino já foram salvas. Observação Diferente dos demais eventos do tipo before, este evento não dispara suas validações ao servidor, fazendo com que o sistema não pare a movimentação da atividade quando o mesmo lança uma exceção. |
| |
beforeTaskCreate | Ocorre antes que o usuário receba uma tarefa. |
| |
beforeTaskSave | Ocorre antes de salvar as informações selecionadas pelo usuário. |
| |
calculateAgreement | Ocorre após o cálculo do consenso (somente para atividades conjuntas) e permite alterar os dados do consenso de uma atividade. Exemplo:
|
| |
onNotify | Se refere a um evento global que ocorre após a movimentação da solicitação e antes de enviar as notificações. | Para mais detalhes consulte a página Desenvolvimento de eventos - On Notify. | |
subProcessCreated | Ocorre quando um sub-processo é criado. |
| |
validateAvailableStates | Ocorre após montada a lista de tarefas disponíveis para o usuário a partir da tarefa atual. Exemplo:
|
|
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 utilizada a seguinte lógica:
function beforeStateEntry(sequenceId) { if (sequenceId != "NUMERO_DA_ATIVIDADE_INICIAL") { var campo = hAPI.getCardValue("campo1"); } } |
<script> $("b:contains('oculto')").parent().parent().hide(); </script> |