# Campo com Múltipla Escolha

Apesar do visual um pouco diferente, tem comportamento similar ao campo [checkbox](http://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/checkbox-%28%C3%BAnico%29 "Checkbox (Único)"), mas permite a escolha de mais de uma opção.

### Grupo de informações

Dentro das configurações, é possível alterar o [grupo de informação](http://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/divis%C3%A3o-e-agrupamento-dos-campos "Divisão e agrupamento dos campos") ao qual o campo foi atribuído no momento da criação.

### Nome de Apresentação

Mostra o nome de apresentação informado no momento da criação. Esse é o nome que será mostrado na tela para o usuário.

### Coluna Banco de dados (SQL)

Esse é o nome interno, usado pelo sistema, a ser criado no banco de dados do agilityflow. É uma informação técnica e esse campo é preenchido automaticamente pelo sistema.

<p class="callout warning">Na maioria dos casos, você não precisa alterar o nome sugerido pelo sistema.</p>

Diferentemente do campo "Nome de Apresentação", esse campo não fica visível para o usuário.

> Para que serve o campo Coluna Banco de dados (SQL)?

Esse campo vai ser utilizado ao criar reports e dashboards. É através dele, que poderemos extrair informações e expor usando esses recursos do sistema.

### Informações de ajuda

Nesse campo é possível incluir um texto que ajudará o usuário a preenche-lo. Abaixo, um exemplo de dois campos: um campo sem informações de ajuda e outro com esse campo configurado:

[![informacoes_ajuda.gif](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/informacoes_ajuda.gif)](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/informacoes_ajuda.gif)

---

### Origem dos Dados

Como existe uma lista de opções pré-determinadas, é necessário definir a origem dos dados.

#### Origem dos Itens

São duas as possibilidades:

**1. Lista Dinâmica** <span style="color: #3366ff;">(Utilização recomendada)</span> **:** Nessa opção, os dados têm como origem um outro formulário. Ao selecionar esse outro formulário, é necessário informar qual o campo desse formulário será exibido.

**2. Lista Estática:** O usuário insere as opções nas configurações do campo. Com isso, o usuário que acessa o formulário não pode criar novas opções. Ao criar as opções, além do nome, é possível definir a ordem em que aparecerão na lista de seleção. Outra opção, é o Id Customizado (Banco de Dados). Essa opção, normalmente não precisa ser preenchido. Entretanto, em alguns casos, esse id pode ser customizado. Isso pode ser útil, para a criação de dashboard e reports, para montar mais facilmente as *queries*.

#### **Configuração de uma <span style="color: #000000;">Lista Dinâmica</span>**

Abaixo estão descritos os campos básicos de preenchimento para definição de uma lista dinâmica.

Abra a tela de edição do campo e clique na aba **Origem dos Dados**

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-04-Apr/scaled-840-0/image-1555598725240.png)

##### **Campos para preenchimento:**

##### Origem dos dados

Defina como "Lista Dinâmica"

##### Quando os dados serão carregados?

Quando a lista é dinâmica, é possível definir algumas opções relativas ao carregamento da lista. Esse carregamento pode ocorrer de duas maneiras.

**<span style="color: #808080;">No carregamento inicial (On PageLoad):</span>** Assim que o formulário é carregado, as opções da lista de seleção também são carregados imediatamente.

<span style="color: #808080;">**Na alteração do valor de um determinado campo (On Change):** </span>As opções só serão carregadas quando um determinado campo mudar. Isso é útil, para uma lista de seleção selecionar níveis de outra lista de seleção. Ex: seleciona-se primeiro o estado e só depois, é selecionada a cidade. Esse campo Lista de Cidade, apenas é carregado quando o outro campo Lista de Estados é alterado. Para isso, é necessário também adicionar uma[ condição na base de dados](#h_50356803591550685996742).

##### Qual será a Base de dados

É o formulário que servirá de fonte para a Lista Dinâmica.

##### Campo de apresentação (Base de dados)

Essa é a informação que será apresentada para o usuário na apresentação do combo. Esse campo é referente ao formulário que foi selecionado no campo [Qual será a Base de dados](#h_695508394161550686141083).

##### Ordenar os itens pelo campo

A ordenação padrão do itens do combo é alfabética. Entretanto há casos onde queremos alterar essa ordem. Para isso, podemos utilizar um segundo campo como critério de ordenação, que não o campo de exibição. Como exemplo, vamos usar um formulário que só tem o campo nome, e os seguintes dados?

<table border="1" id="bkmrk-prioridade-alta-baix" style="border-collapse: collapse; width: 0%; height: 120px;"><tbody><tr><td style="width: 100%;">**Prioridade**</td></tr><tr><td style="width: 100%;">Alta</td></tr><tr><td style="width: 100%;">Baixa</td></tr><tr><td style="width: 100%;">Média</td></tr></tbody></table>

Ao usarmos o campo prioridade como critério de ordenação, os itens serão apresentados na ordem alfabética (Alta, Baixa e Média), quando o mais intuitivo seria apresentar a ordem como (Baixa, Média, Alta).

Para isso, podemos criar um campo chamado 'Ordem' nesse formulário, e incluir números. Dessa forma:

<table border="1" id="bkmrk-prioridade-ordem-alt" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50%;">**Prioridade**</td><td style="width: 50%;">**Ordem**</td></tr><tr><td style="width: 50%;">Alta</td><td style="width: 50%;">3</td></tr><tr><td style="width: 50%;">Baixa</td><td style="width: 50%;">2</td></tr><tr><td style="width: 50%;">Média</td><td style="width: 50%;">1</td></tr></tbody></table>

Feito isso, o campo Campo de Apresentação continua sendo o campo 'Prioridade', mas o campo selecionado para ordenação é o 'Ordem'. Com isso, os itens serão apresentados na ordem (Baixa, Média e Alta).

##### Condição na Base de Dados

Na condição, pode-se escolher um dos campos da [Base de dados](#h_695508394161550686141083) para ser usado em uma comparação por valor (É igual a, É diferente de, Conter e Não conter) ou por outro campo (É igual ao campo ou É diferente do campo) desse formulário.

<p class="callout success">O vídeo abaixo mostra a configuração da lista de seleção, mas também se aplica para o campo Campo com Múltipla Escolha. O processo de configuração e o comportamento é idêntico.</p>

<div id="bkmrk--0"><iframe allowfullscreen="allowfullscreen" data-mce-fragment="1" frameborder="0" height="425" src="https://player.vimeo.com/video/318536339" width="760"></iframe>

</div>---

###  

### Validação

Nessa parte, é possível configurar validações dos dados inseridos pelo usuário, garantindo um padrão de preenchimento.

> Como deixar um campo obrigatório?

#### Obrigatório

Caso marcado como "sim", não permite o salvamento do fomulário sem o preenchimento desse campo. Ao marcar como "sim" essa opção, são abertos duas outras opções:

##### Obrigatório mesmo que por algum motivo o campo esteja marcado como invisível?

Use essa opção para fazer um campo definido como obrigatório, deixar sua obrigatoriedade caso ele esteja [invisível](#bkmrk-%E2%A0-8).

##### Obrigatório a partir da etapa

Para os formulários com fluxo de etapas, é possível atrelar a obrigatoriedade de um campo à etapa em que se encontra o fluxo.

#### Tipo de Validação

Para o campo com múltipla escolha, é possível fazer uma validação relativo à quantidade de itens marcados.

- Selecionar no máximo X itens: define um limite máximo de itens marcados;
- Selecionar no mínimo X itens: define um limite mínimo de itens marcados;
- Selecionar exatamente X itens: define um número exato de itens marcados;

### Regras de Visibilidade e desativação

Usando essas opções, é possível tornar um campo visível, invisível, ativo ou inativo, e definir quando uma dessas ações deve ocorrer. É possível adicionar várias regras para cada campo.

#### Descrição

É um texto que ajuda a identificar a regra que se está criando. Muito útil quando existem múltiplas regras.

#### Ação

##### Ativar

Deixa o campo disponível para inserção de dados. É o estado padrão do campo.

##### Inativar

Deixa o campo indisponível para inserção de dados.

##### Visível

O campo é mostrado na tela, caso esteja inserido para tal, nas configurações de tela.

##### Invisível

O campo é não é mostrado na tela, mesmo que esteja inserido para tal, nas configurações de tela.

#### A partir da etapa / Até a etapa

Em formulários com etapas, é possível estabelecer que uma regra será aplicada em alguma(s) etapa(s). Para isso, basta selecionar as etapas nos campos "a partir da etapa" e "até a etapa", para definir em que momento do fluxo essa regra vai ser aplicada.

#### Quando

Define em que momento a ação deve acontecer.

##### Sempre

É o padrão do formulário.

##### Condicional

- Tipo de condição  
    Para fazer um validação condicional, estão disponíveis as seguintes condições:  
    
    - Se o campo: compara um campo com um valor, ou com outro campo.  
        Abaixo, uma tabela com os operadores disponíveis para as comparações:  
          
        <table border="1" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50%;">**Comparação por valor**</td><td style="width: 50%;">**Comparação por outro campo**</td></tr><tr><td style="width: 50%;">For igual a</td><td style="width: 50%;">É igual ao campo</td></tr><tr><td style="width: 50%;">For maior ou igual a</td><td style="width: 50%;">É diferente do campo</td></tr><tr><td style="width: 50%;">For menor ou igual a </td><td style="width: 50%;"> </td></tr><tr><td style="width: 50%;">For maior que</td><td style="width: 50%;"> </td></tr><tr><td style="width: 50%;">For menor que</td><td style="width: 50%;"> </td></tr><tr><td style="width: 50%;">For diferente de</td><td style="width: 50%;"> </td></tr><tr><td style="width: 50%;">Conter</td><td style="width: 50%;"> </td></tr><tr><td style="width: 50%;">Não conter</td><td style="width: 50%;"> </td></tr></tbody></table>
        
        <p class="callout success">É possível adicionar mais de um condição na mesma regra.</p>
    - Se é um novo formulário: regra será aplicada quando uma nova entrada no formulário estiver sendo criada.
    - Se é edição de formulário: regra será aplicada quando uma entrada no formulário estiver sendo alterada.

### Customização Javascript

Caso a customização desejada, não esteja disponível, ainda assim é possível programá-la utilizando javascript. Para mais detalhes, acesse o [capítulo](http://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/customiza%C3%A7%C3%A3o-javascript "Customização javascript") sobre essa opção.