# Regras de negócio (Automação)

As regras de negócio são regras condicionais que podem executar diversas ações. Essas regras de negócio devem ser sempre associadas a um formulário, e sua criação deve ser feita nas configurações do formulário desejado.

### Criando as regras

Antes de mais nada, é necessário definir um nome para a regra. Esse é o nome que será apresentado depois, na construção da linha do tempo. As regras de automação, podem ter 3 partes.

#### Condicional (se)

É onde podemos testar uma ou várias condições. Essas condições referem-se a comparações de um valor com um campo. É possível adicionar as seguintes condições:

- Se: é uma comparação simples;
- Caso Contrário: é o que vai ocorrer, caso a condição "Se" não se satisfaça;
- Se/Caso Contrário: é uma possibilidade de se colocar uma segunda condição;

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-03-Mar/scaled-840-0/image-1551490277395.png)

No exemplo acima, queremos dar um tratamento quando o campo 'Tipo de Entrega' for igual a 'Correios', outro quando for 'Mensageiro' e outro para todos os demais valores do campo.

#### Criar Formulário

A criação do formulário é o preenchimento do campos do formulário de destino com os valores do formulario de origem (onde a regra está sendo criada) ou com valores pré-definidos.

Esses valores pré-definidos, em casos de campos de textos, podem ser fixados quando se define a regra de criação do formulário. Já os campo de seleção, como lista de seleção, a lista aberta com escolha única (radio), a pesquisa com auto completar, e etc, podem ser atribuídos de outros campos que possuem as mesmas opções, ou selecionados de maneira fixa.

#### Query SQL (Fonte de Dados)

Usando essa opção, é possível fazer uma query sql em qualquer tabela do agilityflow e atribuir o resultado à uma variável, e usar o valor nas comparações e nos mapeamentos de formulários.

Ao criar a query, será preciso definir o nome da variável e da query. O nome da variável, será usado posteriormente para identificar o valor nas condições e mapeamentos.

A query, segue os padrões das queries utilizadas em outros pontos do agilityflow, e os detalhes podem ser vistos [aqui](http://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/programa%C3%A7%C3%A3o-em-sql-%28query%29 "Programação em SQL (Query)"). Uma diferença, é que o conteúdo da primeira linha e da primeira coluna (resultado da query) é atribuído à uma variável. Outra diferença, é que nessa query é obrigatório o uso do parâmetro "top 1".

No exemplo abaixo, existe um query que verifica a existência do usuário e, dependendo do resultado, toma uma ou outra ação:

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-05-May/scaled-840-0/image-1557843298418.png)

<p class="callout warning">É necessário colocar a execução da query antes do teste da variável na estrutura condicional (se).</p>

#### Programação customizada

Uma forma de se customizar ainda mais o agilityflow é incluir programação em alguns pontos. A programação customizada permite que seja incluído qualquer código em C#, dando uma enorme flexibilidade de ações.

### Momento de execução das regras

As regras precisam ser executadas em um determinado momento. Os momentos são esses:

- No carregamento inicial do formulário (OnPageLoad)
- Ao clicar no botão 'Salvar'
- Ao clicar no botão 'Deletar'
- Ao alterar o campo

### Configuração da timeline

É quando as regras serão executadas. A timeline (linha do tempo) é uma ordem de acontecimentos onde as regras podem ser incluídas. Para o momento de alteração de campo, a timeline só tem um espaço. Para os demais momentos, são 3 espaços para a inclusão de regras:

- Antes de validar se o preenchimento dos campos está correto
- Depois de validar o preenchimento dos campos e Antes de salvar no banco de dados
- Depois de salvar no banco de dados

#### Reordenar as regras

Uma vez posicionada, as regras podem ser reordenadas. Basta clicar no ícone ![](http://wiki.agilityflow.io/uploads/images/gallery/2019-03-Mar/scaled-840-0/image-1552335541995.png) e arrastar para a posição desejada.

#### Inativar uma regra

Para inativar uma regra, clique no menu à direita, e selecione a opção 'inativar nessa timeline'.

[![inativar_regra.gif](http://wiki.agilityflow.io/uploads/images/gallery/2019-03-Mar/inativar_regra.gif)](http://wiki.agilityflow.io/uploads/images/gallery/2019-03-Mar/inativar_regra.gif)

Feito isso, a regra recebe uma tarja vermelha com a indicação 'inativo'.