Gestão do fluxo de trabalho
Desenvolvimento de scripts de integração nos fluxos de trabalho
WFMS.TD-0431
Descrição
Os fluxo de trabalho podem interagir diretamente com os dados do sistema. Cada estágio pode gerar alterações nos dados como podem depender do que estiver informados neles.
Este documento tem informações sobre como isso pode ser feito.
Fluxo normal
Dentro dos fluxos de trabalho, os seguintes eventos poderão ser configurados:
- Alterações no registro de base
- Entrada do fluxo em um determinado estágio
- Tempo de estágio expirado
- Início de apontamento
- Término de apontamento
Os scripts poderão ser desenvolvidos em qualquer uma das linguagens suportadas pelo Eligo. Por padrão, o Eligo suporta TSL (Telescope Script Engine) e Groovy.
A linguagem é definida por um "shebang" na primeira linha do script:
- #!TSL: Para script escrito para o Telescope Script Engine.
- #!Groovy: Para script escrito em Groovy.
No caso do script não ter um "shebang", o sistema assume TSL.
Os scripts recebem as seguintes variáveis no contexto:
- ctx: Informações da sessão.
- rec: Registro do fluxo em controle (entidade ESTAGIOS_REGISTROS).
- registro: O registro ao qual o fluxo está vinculado.
- registro_id: O ID do registro ao qual o fluxo está vinculado.
- estagio: Objeto que representa as definições do estágio do registro dentro do fluxo.
- fluxo: Objeto com as definições do fluxo de trabalho.
- eventoOrigem: String contendo os textos "FLUXO" no caso da mudança de estágio ser originada pela ação do usuário no painel de controle do fluxo ou "REGISTRO" no caso da mudança de fluxo ser causada por mudança de informações dentro do próprio registro base, ou null para o caso da mudança ser disparada por alguma outra rotina desconhecida.
Alterações no registro base
Quando alterações dos dados de um registro base podem alterar o seu fluxo, será necessário descrever isso através do campo "Script estágio" configurado no fluxo.
O objetivo deste script deve ser basicamente definir o estágio do fluxo que está sendo alterado.
Esse script deve evitar alterar o registro base. Quando isso for necessário, deve-se ter muito cuidado de não alterar algum atributo que possa provocar uma nova troca de estágio ou alguma outra condição que crie um laço infinito.
EXEMPLO:
Digamos que o registro base tenha uma data de cancelamento e sempre que essa data de cancelamento for preenchida, o fluxo deve passar automaticamente para o estágio CANCELADO:
- !Groovy
if (registro.getDataCancelamento().isModified() && registro.getDataCancelamento().isNotNull()) {
rec.setEstagioId(800246288); // Id do estágio CANCELADO
}
Para evitar recursão, deve-se utilizar a variável de context eventoOrigem.
Entrada do fluxo em determinado estágio
Sempre que houver a mudança de estágio de um fluxo, o sistema executa o script indicado na entrada para esse estágio.
O objetivo deste script é atualizar os dados do registro base de acordo com o seu fluxo.
EXEMPLO:
Digamos que quando um fluxo passar para o estágio CANCELADO, seja necessário informar uma data de cancelamento no registro base:
- !TSL
upd atividades
set data_cancelamento = '[SYSDATE]'
where id = ${registro.id}
and data_cancelamento is null;
Para evitar recursão, deve-se utilizar a variável de context eventoOrigem.