Introdução ao Business Rules Engine
Tags: salesforce, omnistudio, lowcode, businessrulesengine
Published: 2024-01-18 17:50:11

Este conjunto de componentes, objetos e serviços é utilizado para desenhar regras de negócio que irão compor processos de negócio automatizados em um fluxo de trabalho. O _Business Rule Engine_ (BRE) é capaz de fazer cálculos e pesquisas complexas.

O _BRE_ está disponível para o _Flow_ e o _Omnistudio_ nas nuvens de _Industries_. Também é possível integrar _APIs_ com fluxos de trabalhos criados a partir de ferramentas de terceiros ou customizadas, como códigos _Apex_. O fluxo de trabalho criado passa os dados necessários para acionar o _BRE_ e este retorna os dados para o fluxo.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1neuruyilfefyh5tj4l.png)

Os componentes chave do BRE são:
- _Expressions sets_;
- _Lookup tables_;
    - _Decision matrices_;
    - _Decision tables_.

## Como o _BRE_ interage com as ferramentas de fluxo de trabalho?
- _Flow_
Os componentes do _BRE_ (_decision matrices_, _decision tables_ e _expression sets_) estão disponíveis através de componentes de ação no _Flow_. As _decision tables_ podem ser acionadas a partir de um _expression set_ ou diretamente através do _Flow_.
- _OmniStudio_
Os _Expression Sets_ e _Decision matrices_ estão disponíveis através de elementos de ação nas _Integration Procedures_ e _Omniscripts_.
- Ferramentas customizadas ou de terceiros
Podemos utilizar as _Connect APIs_ para acionar as _Expression sets_ e as _Lookup tables_ através dos fluxos de trabalhos criados com estas ferramentas.

## _Expression Set_
Consiste num fluxo lógico, dividido em diversos passos, construído com variáveis, constantes, condições, cálculos, pesquisas, etc.

Os dados de entrada e de saída são em formato _JSON_. Assim como a ferramenta _Flow_, podemos criar diversas versões do mesmo _Expression Set_. Ao criar uma nova versão, devemos informar a data e hora de início e o _Rank_. Duas versões diferentes podem estar ativas, e o fluxo que será acionado será com o de maior data e hora de início e maior _Rank_.

- **Variáveis e constantes:** são usadas para armazenar valores dinâmicos no fluxo. Ele pode ser usado para armazenar informações dos valores de entrada e saída, além de valores que precisam passar de uma etapa a outra no mesmo fluxo;
- **Variáveis de objeto:** para trabalhar com valores dos campos de um objeto _Salesforce_, devemos configurar _aliases_ para os objetos e os campos. Eles estão disponíveis para criação no menu de configuração e podem ser categorizados;
- **Tipos de dados:** os tipos de dados que podem ser utilizados em um _expression set_ podem ser
    - _Text_;
    - _Number_;
    - _Percent_;
    - _Currency_;
    - _Date_;
    - _Date & Time_;
    - _Boolean_;
- _Operadores e funções:_ podemos utilizar operadores lógicos, de comparação, matemáticos e de _string_, além de funções de data e numéricas.

## _Decision Explainer_
Podemos utilizar este serviço para mostrar ao usuário explicações de cada etapa do _Expression Set_, e para armazenar _logs_ de ação.

As mensagens explicativas devem ser configuradas como _templates_, no menu de configurações (_Explainability templates_). Por sua vez, os _templates_ devem ser adicionadas em cada etapa desejada do seu _Expression Set_.

Quando você utiliza o simulador do _Expression Set_ para os testes, você poderá ver as mensagens na opção _Concise View_.

## _Decision Matrix_
Com base no(s) valor(es) de entrada, recebemos o valor de saída correspondente da linha da tabela. Ela é útil para implementar regras complexas de uma maneira sistemática e de fácil leitura. Os dados de entrada e saída são no formato _JSON_.

## _Decision Table_
Com base no(s) valor(es) de entrada, recebemos o(s) valor(es) de saída. Os valores de saída podem ser com base com os valores especificados na tabela, ou com base nos registros do Salesforce.

Na criação de uma _decision table_, devemos escolher o objeto de origem, e até quatro objetos relacionados ao objeto de origem. Os objetos relacionados devem estar até três níveis adjacentes do objeto de origem.

Fonte: [Documentação oficial: Business Rule Engine](https://help.salesforce.com/s/articleView?id=sf.business_rules_engine.htm&type=5)