# 📜 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.