Automatizações de registros
Regras de automatização de informações
AUTREG.FAQ-72405
A automatização de registros é composta por uma expressão que define um ou mais registros que devem ser automaticamente criados sob determinadas condições.
A condição está sempre relacionada a uma determinada entidade. Toda vez que esta entidade sofrer alguma modificação, a expressão é verificada e os respectivos registros atualizados.
Com a automatização de registros é possível disparar processos que não seriam possíveis através do comportamento padrão que o sistema oferece.
Exemplos:
- Criar um projeto e/ou atividade toda a vez que um determinado tipo de orçamento seja aprovado.
- Criar um título previsto a receber toda a vez que um determinado tipo de atividade seja concluída.
- Garantir que cada cliente que faça um pedido no sistema tenha um usuário de acesso ao mesmo.
Criando regras de automatização
As regras de automatização devem ser cadastradas em Regras de automatizações de registros.
Nas regras, existem 3 campos que são os principais:
- Entidade: É a entidade para a qual os registros serão criados.
- Contexto: É a entidade que dispara a automatização.
- Expressão: Expressão que determina os registros que deverão ser criados a partir do contexto. A expressão é informada por um comando SQL que recebe um único parâmetro (representado pelo texto "?" dentro da expressão) e que retorna os dados do(s) registro(s) desejado(s). Note que esta expressão deve conter as condições necessárias que definem quando esta automatização deva ser executada, ou seja, a expressão WHERE deve conter tudo o que foi necessário para decidir quando cabe ou não a geração dos mesmos.
O SQL deve retornar linhas com os atributos dos registros que devem ser criados. Qualquer atributo pode ser informado. Note que todas as regras relacionada a entidade serão executadas da mesma forma que seriam no caso de uma manutenção direta através de alguma interface.
Além dos atributos, TODAS as expressões terão de incluir uma coluna a mais com o nome "_CHAVE" (não esqueça de incluir o "_" na frente). Esta coluna será utilizada para identificar o mesmo registro nos eventos de alteração.
Para entender melhor, digamos que a automatização da inclusão de uma determinada tabela tenha criado 2 registros em uma segunda tabela e que a expressão tenha gerado as chaves de identificação X-21 e X-22. Neste momento, o sistema mantém uma memória indicando o ID dos registros criados pela automatização e estas chaves. Mais tarde, se ocorrer uma alteração do mesmo registro na primeira tabela, a expressão é novamente verificada. Caso ela retorne novamente 2 registros mas com chaves X-21 e X-28, por exemplo, o registro criado originalmente com a chave X-21 será alterado, o criado com a chave X-22 será excluído e um novo registro com a chave X-28 será inserido.
Opcionalmente, a expressão poderá incluir uma coluna "_MENSAGEM" que, caso exista, irá gerar uma mensagem na interface para o usuário final na forma:
- ${mensagem} inserido!
- ${mensagem} alterado!
- ${mensagem} excluído!
Exemplos:
- Título de royalty para marca ACME alterado!
- Tarefa de análise de crédito para o cliente ABC inserido!
- Título de comissão a receber para o contrato 78954 excluído!
Buscando valores atuais na expressão
Em cenários onde a automatização permite a alteração de registros criados automaticamente anteriormente e que exigem que a expressão utilize o valor atual de um atributo, será necessário incluir um "left join" do registro de contexto com o respectivo registro automatizado conforme a combinação regra/chave e outro "left join" para o registro propriamente dito.
Exemplo:
Digamos que existe uma regra de automatização que cria uma tarefa (atividade) para cada item de uma ordem de um pedido de venda e cujo tempo estimado é arbitrado por uma expressão na inclusão apenas. Depois disso, alterações no pedido/item não devem alterar o tempo estimado. Para fazer isso, será necessário com que a expressão considere o valor atual da atividade e utilize uma função tipo "coalesce(valor_atual, novo_valor)". Neste caso, sempre que o registro já existir, então o valor atual será utilizado.
Exemplo:
select ...
, ...
, ped.id || '-' || item.produto_id as _chave
from pedidos ped
join itens_pedidos item on item.pedido_id = ped.id
left join registros_automatizados ra on ra.automatizacao_id = 99999
and chave = ped.id || '-' || item.produto_id
left join atividades ativ_atual on ativ_atual.id = registro_id
where ped.id = ?
...
Gerando registros mestre-detalhe
Muitas vezes, a automatização exige que criemos vários registros em diferentes entidades que sejam dependentes entre si, como relações mestre-detalhe. Nestes casos, será necessário proceder da seguinte forma:
- Cada uma das entidades deverá ser resolvida por uma regra separada.
- A execução das regras deverá obedecer uma sequencia lógica.
- Muitas regras deverão originadas a partir da execução de outra regra (execução em cascata). Ou seja, o contexto de uma regra será a entidade de outra com contexto menor.