# 📜 Formulários Dinâmicos (Dynamic Forms)
Guia para criar formulários dinâmicos que se adaptam conforme os dados, usando o dicionário de dados.
Os **Formulários Dinâmicos** são uma das funcionalidades mais poderosas do Add-on Studio. Eles permitem criar telas de cadastro completas, com campos, abas e relacionamentos, **sem escrever uma única linha de código de interface** (como JavaScript ou HTML).
A tela é gerada automaticamente com base na definição da sua tabela no dicionário de dados.
***
### 🏗️ Como Funciona?
A criação de um formulário dinâmico envolve três passos principais, todos no dicionário de dados XML:
1. **Definir a Tabela (`
`)**: Criar a estrutura da tabela que armazenará os dados.
2. **Declarar a Instância (``)**: Dar um "nome lógico" à sua tabela para que o sistema a reconheça.
3. **Criar o Formulário no Menu (``)**: Adicionar um item de menu que aponta para a sua instância, criando a tela.
***
### 🛠️ Passo a Passo: Criando um Formulário
Vamos criar um formulário de "Atendimento" como exemplo para um add-on fictício chamado "Super Gestão" (prefixo `SGT_`).
#### Passo 1: Defina a Tabela e a Instância
Primeiro, crie um arquivo XML (ex: `SGT_TBTESTE.xml`) para definir a tabela `SGT_TBTESTE` e sua instância `SGT_Teste`.
```xml
Tabela de Atendimentos do Add-on
Atendimento
Usuário Responsável
Data de Criação
```
> **Nota**: Este exemplo assume que o [Auto DDL](./02_autoddl) está habilitado. Se não estiver, você precisará criar a tabela manualmente via `dbscript`.
#### Passo 2: Adicione o Formulário ao Menu
Agora, crie outro arquivo XML (ex: `SGT_MENU.xml`) para adicionar o formulário ao menu do sistema.
```xml
```
**Atributos da tag``:**
| Atributo | Descrição | Exemplo |
| :------------ | :---------------------------------------------------------------------------- | :------------------------- |
| `id` | Identificador único para o item de menu. Use um prefixo. | `SGT_FORM_TESTE` |
| `instance` | **O mais importante**: o nome da instância que este formulário irá gerenciar. | `SGT_Teste` |
| `description` | O texto que aparecerá no menu para o usuário. | `Cadastro de Atendimentos` |
Após o deploy (`./gradlew deployAddon`), um novo menu "Super Gestão" aparecerá no sistema com o item "Cadastro de Atendimentos".
***
### ✨ Boas Práticas
* **Separe os Arquivos**: Mantenha a definição da tabela em um arquivo e a do menu em outro. Isso organiza o projeto.
* **Use um Prefixo Único**: Sempre use um prefixo exclusivo (ex: `SGT_`) nos nomes de tabelas, instâncias e IDs de menu para evitar conflitos.
* **Aproveite as Expressões**: Use expressões (``) para preencher campos com valores padrão, como o usuário logado (`$ctx_usuario_logado`) ou a data atual (`$ctx_dh_atual`).
### 🚫 Anti-Patterns (O que evitar)
* **Uso do Prefixo`AD_`** : Não use o prefixo `AD_`. Ele é genérico e pode levar a conflitos. Crie um prefixo único para seu projeto.
* **Instância sem Tabela**: Declarar um `` para uma `instance` que não foi definida em nenhuma ``.
* **Tudo em um Arquivo**: Colocar a definição da tabela e do menu no mesmo arquivo XML. Embora funcione, é uma má prática de organização.
* **Nomes Conflitantes**: Usar nomes de instâncias ou tabelas que já existem no Sankhya (ex: `Produto`, `Parceiro`). Isso causará erros graves.