Histórico da Página
Índice | ||||||
---|---|---|---|---|---|---|
|
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:
Informações |
---|
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:
|
|
6666
| ||||||||
setCardValue("nomeCampo", "valor") | Permite definir o valor de um campo do formulário do processo, onde:
|
Permite definir o valor de um campo do formulário do processo, onde:
nomeCampo:
|
setAutomaticDecision(numAtiv, listaColab, "obs") |
|
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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); } } |
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.
|
|
Recomendamos a utilização deste método no evento afterTaskCreate, pois será executado logo após a criação da tarefa. Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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); } } } |
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.
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.
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.
Seta um usuário substituto, onde:
- userId: código do usuário substituto.
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.
Atençã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.
Retorna um Mapa com todos os campos e valores do formulário da solicitação.
- numProcesso: número da solicitação de processo.
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
Retorna o valor da propriedade avançada de um processo.
- propriedade: nome da propriedade avançada.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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); } |
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
Atençã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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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" ); } } |
Permite a criação de atividades adhoc dentro dos eventos do fluig
Atençã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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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); } |
Retorna a lista de anexos do processo.
DocumentDto[ ]
Veja aqui os paramêtros do objeto DocumentDto.
Atenção
O formulário do processo não é retornado, apenas anexos do tipo GED e Workflow.
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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!" ; } } |
Permite publicar anexos workflow da solicitação no GED do fluig, onde:
documento: anexo workflow a ser publicado no GED.Atenção
É obrigatório informar o id da pasta destino do documento através do método setParentDocumentId, conforme o exemplo abaixo.
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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:
1 2 3 4 5 6 7 8 9 10 | 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[].
Retorna uma lista com os números das solicitações filhas, onde:
- processInstanceId: número da solicitação pai.
Exemplo:
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 ); } } } |
Retorna o número da solicitação pai, onde:
- processInstanceId: número da solicitação filha.
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); } } |
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:
1 2 3 4 5 6 7 8 9 | 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); } } |
...
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:
| |||||||||||||||||||||
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);
|
Painel | ||
---|---|---|
| ||
Nos eventos existe a possibilidade de integração com serviços de dados. Tais serviços podem ser WebServices, AppServer Progress® e Dataset.
...
Abaixo um exemplo de como executar o WebService de Colleague para criar um usuário no fluig após executar uma tarefa:usuário no fluig após executar uma tarefa:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function |
function
afterTaskComplete(colleagueId, nextSequenceId, userList) |
if
(nextSequenceId == 2) {
//Busca o webservices de Colaborador
var
colleagueServiceProvider = { 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 = var colleagueServiceLocator = colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService"); |
var
colleagueService = var colleagueService = colleagueServiceLocator.getColleagueServicePort(); |
//Cria o ColleagueDto – Verificar a lista de métodos na visualização do |
var
colleagueDto = 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(" |
teste@empresa.com"); |
colleagueDto.setPasswd("teste"); |
colleagueDto.setAdminUser(false); |
colleagueDto.setEmailHtml(true); |
colleagueDto.setDialectId( |
"pt_BR"
);
"pt_BR"); //Cria o colleagueDtoArray e |
var
colleagueDtoArray = adiciona var colleagueDtoArray = colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ColleagueDtoArray"); |
colleagueDtoArray.getItem().add(colleagueDto); |
var
result = 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:
Bloco de código |
---|
|
|
| ||
function |
function
afterStateEntry(sequenceId){ |
if
if (sequenceId == 2) |
{ //Servico "<url_fluig>/webdesk/ECMCardService?wsdl"cadastrado com o código "CardService" |
var
cardServiceProvider = var cardServiceProvider = ServiceManager.getServiceInstance(" |
01"); |
var
cardServiceLocator = var cardServiceLocator = cardServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws. |
ECMCardServiceService"); |
var
cardService = var cardService = cardServiceLocator.getCardServicePort(); |
var
cardFieldDtoArray = var cardFieldDtoArray = cardServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.CardFieldDtoArray"); |
var
cardField = 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
var vetCardFields = new Array(); |
vetCardFields.push(cardField); |
cardFieldDtoArray.setItemcardFieldDtoArray.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: |
|
|
|
|
|
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 - |
Ocorre quando um processo é "setado" na API.
Observação
A propriedade WKCompletTask não deve ser utilizada neste evento, pois quando ele é executado o produto ainda não tem a informação se atividade foi ou não completada.
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: |
|
|
|
|
|
function
|
|
|
|
|
// stateList atual:
|
var
stateArray =
new
Array();
if
(iCurrentState == 1) {
|
|
}
|
|
|
|
|
return
|
|
|
- Não é necessário criar todos os eventos do processo – apenas aqueles nos quais se tem interesse.
- Todos os eventos são executados de forma persistente.
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:
1Bloco de código |
---|
|
|
|
| |
function |
beforeStateEntry(sequenceId) |
if
(sequenceId !=
{ if (sequenceId != "NUMERO_DA_ATIVIDADE_INICIAL") |
var
campo = { var campo = hAPI.getCardValue("campo1"); |
}
}
}
} |
HTML |
---|
<script>
$("b:contains('oculto')").parent().parent().hide();
</script> |