Histórico da Página
...
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 | 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:
| 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 |
:
|
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 = var prazoFormulario = hAPI.getCardValue('prazoConclusao');
if
if (prazoFormulario != undefined && prazoFormulario !=
'')
var
numeroDaSolicitacao = { 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 é 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 = 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 = var dia = arrayPrazoConclusao[0];
// Posição 0 do array é o
var
mes = 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 = var ano = arrayPrazoConclusao[2];
// Posição 2 do array é o
var
horaDoPrazo = 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();
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.
Nota | ||
---|---|---|
|
É 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.
Informações |
---|
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:
O retorno do |
mapa seria:
|
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
Nota | ||
---|---|---|
|
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
- 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 title 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.
Nota | ||
---|---|---|
|
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.
Nota title 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); } } |
...
Abaixo um exemplo de como executar o WebService de Colleague para criar um usuário no fluig após executar uma tarefa:
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 | function afterTaskComplete(colleagueId, nextSequenceId, userList) { if (nextSequenceId == 2) { //Busca o webservices de Colaborador 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.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); } } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function afterStateEntry(sequenceId){ if (sequenceId == 2) { //Servico "<url_fluig>/webdesk/ECMCardService?wsdl"cadastrado com o código "CardService" var cardServiceProvider = ServiceManager.getServiceInstance( "CardService" ); var cardServiceLocator = cardServiceProvider.instantiate( "com.totvs.technology.ecm.dm.ws.ECMCardServiceServiceLocator" ); var cardService = cardServiceLocator.getCardServicePort(); var cardFieldDtoArray = cardServiceProvider.instantiate( "com.totvs.technology.ecm.dm.ws.CardFieldDtoArray" ); //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.setItem(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:
...