# Choice

O **Choice** permite que fluxos sigam diferentes caminhos dentro de um pipeline. Ele faz parte de um conjunto de conectores que ajudam na organização das integrações.

Os parâmetros de configuração não estarão disponíveis se o conector não estiver conectado a outros conectores no pipeline. Depois de conectá-lo corretamente, clique no ponto de conexão e, em seguida, no ícone de engrenagem para acessar os parâmetros, conforme mostrado no detalhe da imagem abaixo:

![](https://3268428548-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSKBJ6ZiEWBU93x170HH4%2Fuploads%2FOk62cFNnXAg1wPDmPe5O%2Funknown.png?alt=media\&token=0b670ac4-b93f-45e1-9fd0-417f3caefa96)

## Parâmetros

Configure o conector utilizando os parâmetros abaixo. Os campos que suportam expressões **Double Braces** estão marcados na coluna **Suporta DB.**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo</th><th>Suporta DB</th><th>Default</th></tr></thead><tbody><tr><td>Label</td><td>Define o nome do caminho. Deve ser um nome único que pode se repetir no pipeline.</td><td>String</td><td>❌</td><td>N/A</td></tr><tr><td>Type</td><td>Define a estrutura dos diferentes caminhos que o fluxo deve seguir (When ou Otherwise). Leia a seção <strong>Type</strong> para saber mais.</td><td>String</td><td>❌</td><td>When</td></tr><tr><td>Type Rule</td><td>Define o tipo de linguagem (Double Braces, JSON Path ou Simple) que será usado para declarar a condição (sempre que <strong>When</strong> for escolhido no parâmetro Type). Leia a seção <strong>Type Rule</strong> para saber mais.</td><td>String</td><td>❌</td><td>JSON Path</td></tr><tr><td>Condition</td><td>Declara a condição usada para definir se o caminho deve ser executado. Quando as condições previamente definidas gerarem conflito ou sobreposição, apenas uma delas será executada (sempre que <strong>When</strong> for escolhido no parâmetro Type).</td><td>String</td><td>✅ (se o Type Rule Double Braces estiver selecionado)</td><td>$</td></tr></tbody></table>

### Type

Para trabalhar com este conector, é necessário entender os dois tipos de estrutura usados para criar caminhos dentro de um **Choice**:

**When** Define uma condição específica que direciona o fluxo para uma nova linha de execução. Pelo menos uma condição **When** deve ser declarada.

**Otherwise** Executa o fluxo quando nenhuma das condições **When** é atendida. Nenhuma condição adicional é necessária para esse caminho.

### Type Rule

Ao configurar um conector **Choice**, você pode selecionar o **type rule**. Isso permite escolher a linguagem que melhor se adequa à sua condição: **Double Braces**, **JSON Path** ou **Simple expressions**.

#### Double Braces

Permite escrever condições de ramificação usando expressões Double Braces, uma sintaxe criada exclusivamente para ser usada na Plataforma de Integração Digibee.&#x20;

É a opção mais poderosa, pois suporta funções integradas, referências de etapas anteriores e dados de carga útil. Cada expressão Double Braces usada em uma ramificação Choice deve retornar um valor booleano (`true` ou `false`).

**Operações suportadas para Double Braces**

<table data-full-width="true"><thead><tr><th>Feature</th><th></th><th>Exemplo</th></tr></thead><tbody><tr><td><a href="../../double-braces/double-braces-functions/conditional-functions"><strong>Funções condicionais</strong></a></td><td>Funções que comparam valores e retornam booleanos.</td><td><code>EQUALTO</code>, <code>GREATERTHAN</code>, <code>ISNULL</code>, etc</td></tr><tr><td><strong>Referências de Previous Steps</strong></td><td>Acessa dados de qualquer etapa anterior do fluxo.</td><td><code>step.stepName.response.field</code></td></tr><tr><td><strong>Acesso aos dados de payload</strong></td><td>Acesso direto aos dados de entrada do fluxo.</td><td><code>$.data.field</code></td></tr><tr><td><strong>Operadores lógicos</strong></td><td>Lógica padrão de Double Braces para regras complexas.</td><td><code>AND</code>(condition1, condition2)</td></tr></tbody></table>

#### JSON Path

Define expressões que percorrem um componente JSON para alcançar um subconjunto de dados. Sempre que você usa **Choice**, será feita uma correspondência para a execução do caminho.

Imagine que, no caminho anterior ao **Choice**, o fluxo de dados possui a seguinte saída:

```
{
    "city" : "New York"
}
```

A seguinte condição declarada como **When** valida o caminho que o fluxo deve seguir:

```
$.[?(@.city == 'New York')]
```

**Outras opções para JSON Path**

<table data-full-width="true"><thead><tr><th>JSON Path</th><th>Descrição</th></tr></thead><tbody><tr><td><strong>$</strong></td><td>A raiz do objeto ou array.</td></tr><tr><td><strong>.property</strong></td><td>Seleciona um objeto específico dentro do objeto relacionado.</td></tr><tr><td><strong>['property']</strong></td><td>Seleciona uma propriedade específica no objeto relacionado. Use apenas aspas simples ao redor do nome da propriedade. Dica: utilize essa forma se o nome da propriedade tiver caracteres especiais, como espaços, ou começar com caracteres diferentes de A..Za..z_.</td></tr><tr><td><strong>[n]</strong></td><td>Seleciona o n-ésimo elemento de um array. Os índices começam em 0.</td></tr><tr><td><strong>[index1,index2,…]</strong></td><td>Seleciona elementos do array com índices específicos e retorna uma lista.</td></tr><tr><td><strong>..property</strong></td><td>Busca recursivamente por um nome de propriedade específico e retorna um array com todos os valores encontrados. Sempre retorna uma lista, mesmo que apenas uma propriedade seja encontrada.</td></tr><tr><td><strong>*</strong></td><td>Wildcard que seleciona todos os elementos de um objeto ou array, independentemente de nomes ou índices. Exemplo: <code>address.*</code> significa todas as propriedades do objeto address e <code>book[*]</code> significa todos os itens dentro do array book.</td></tr><tr><td><strong>[start:end] / [start:]</strong></td><td>Seleciona elementos de um array a partir de um índice inicial até um índice final (opcional). Se o final for omitido, seleciona todos os elementos até o final do array. Retorna uma lista.</td></tr><tr><td><strong>[:n]</strong></td><td>Seleciona os primeiros n elementos do array. Retorna uma lista.</td></tr><tr><td><strong>[-n:]</strong></td><td>Seleciona os últimos n elementos do array. Retorna uma lista.</td></tr><tr><td><strong>[?(expression)]</strong></td><td>Expressão de filtro. Seleciona todos os elementos em um objeto ou array que correspondem ao filtro especificado. Retorna uma lista.</td></tr><tr><td><strong>[(expression)]</strong></td><td>Expressões de script podem ser usadas no lugar de nomes de propriedades ou índices. Exemplo: <code>[(@.length-1)]</code> seleciona o último item de um array. Aqui, length refere-se ao tamanho atual do array.</td></tr><tr><td><strong>@</strong></td><td>Usado em expressões de filtro para fazer referência ao nó atual sendo processado.</td></tr><tr><td><strong>==</strong></td><td>Igual a. 1 e ‘1’ são considerados o mesmo resultado. Os valores de cadeia devem ser colocados entre aspas simples (e não entre aspas duplas): <code>[?(@.color==‘red’)]</code>.</td></tr><tr><td><strong>!=</strong></td><td>Diferente de. Valores string devem estar entre aspas simples.</td></tr><tr><td><strong>></strong></td><td>Maior que.</td></tr><tr><td><strong>>=</strong></td><td>Maior ou igual a.</td></tr><tr><td><strong>&#x3C;</strong></td><td>Menor que.</td></tr><tr><td><strong>&#x3C;=</strong></td><td>Menor ou igual a.</td></tr><tr><td><strong>=~</strong></td><td>Compatível com RegEx de JavaScript. Exemplo: <code>[?(@.description =~ /cat.*/i)]</code> corresponde a itens cuja descrição começa com "cat" (case-insensitive).</td></tr><tr><td><strong>!</strong></td><td>Usado para negar um filtro. Exemplo: <code>[?(!@.isbn)]</code> corresponde a itens que não possuem a propriedade isbn.</td></tr><tr><td><strong>&#x26;&#x26;</strong></td><td>Operador lógico AND. Exemplo: <code>[?(@.category=='fiction' &#x26;&#x26; @.price &#x3C; 10)]</code></td></tr></tbody></table>

Leia [este artigo sobre **JSON Path**](https://goessner.net/articles/JsonPath/) para saber mais sobre o tema.

#### Simple

É basicamente uma linguagem pequena e simples para avaliar expressões e predicados, sem exigir novas dependências ou conhecimento de JSON Path.

Imagine que, no caminho anterior ao **Choice**, o fluxo de dados possui a seguinte saída:

```
{
    "city" : "New York"
}
```

A condição declarada como **When** que valida o caminho que o fluxo deve seguir é:

```
#{city} == 'New York'
```

**Outras opções para a declaração Simple**

| Simple | Description                                                                              |
| ------ | ---------------------------------------------------------------------------------------- |
| ==     | Igual a                                                                                  |
| =\~    | Igual a, case-insensitive ao comparar strings                                            |
| >      | Maior que                                                                                |
| >=     | Maior ou igual a                                                                         |
| <      | Menor que                                                                                |
| !=     | Diferente                                                                                |
| !=\~   | Diferente, case-insensitive ao comparar strings                                          |
| regex  | Valida se uma string corresponde ao RegEx especificado. Exemplo: `#{city} regex 'New.*'` |
| &&     | Operador lógico AND. Exemplo: `#{city} == 'New York' && #{state} == 'NY'`                |
| \|\|   | Lógico OR operador. Exemplo: `#{city} == 'New York' \|\| #{state} == 'CA'`               |

**Exemplo:**

<figure><img src="https://content.gitbook.com/content/SKBJ6ZiEWBU93x170HH4/blobs/gezm0FDJV4yr8Iq4DgKT/choice%20example%20nov%2023.png" alt=""><figcaption></figcaption></figure>
