Formulário Dinâmico

O que são Formulários Dinâmicos?

Formulários dinâmicos são telas geradas automaticamente com base na declaração de tabelas do dicionário de dados da plataforma. A grande vantagem é que não é necessário conhecimento em JavaScript ou qualquer outro código para construí-los. Basta realizar as configurações e o relacionamento no menu, e a tela estará pronta para uso.

Criando um formulário a partir de sua instância.

Criar um formulário dinâmico é uma tarefa simplificada, mas que requer a compreensão de alguns conceitos-chave. Para que um formulário funcione corretamente, é fundamental declarar uma tabela, instancia e, por fim, relacioná-la no menu. Essa sequência garante que o formulário tenha um local para armazenar os dados, que ele seja reconhecido pelo sistema e que esteja acessível para o usuário final.

Registrando uma tabela

Para registrar qualquer componente na plataforma, comece com um arquivo XML vazio e utilize a IDE (Ambiente de Desenvolvimento Integrado) para guiar a criação. A IDE oferece sugestões e validações que simplificam o processo.

Abaixo um exemplo para criar uma tabela com uma instância:

<?xml version="1.0" encoding="ISO-8859-1"?>
<metadados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../.gradle/metadados.xsd">
    <table name="TBTESTE" sequenceType="A" sequenceField="CODIGO">
        <description>Tabela atendimento</description>
        <primaryKey>
            <field name="CODIGO"/>
        </primaryKey>
        <instances>
            <instance name="TBTeste">
                <description>Atendimento</description>
            </instance>
        </instances>
        <fields>
            <field name="CODIGO" dataType="INTEIRO" allowSearch="S" visibleOnSearch="S">
                <description>Código</description>
            </field>
            <field name="DESCRICAO" dataType="TEXTO" allowSearch="S" visibleOnSearch="S" >
                <description>Descrição</description>
            </field>
            <field name="CATEGORIA_ATENDIMENTO" dataType="TEXTO" allowSearch="S" visibleOnSearch="S" >
                <description>Categoria do atendimento</description>
            </field>
            <field name="CODUSU" dataType="PESQUISA" targetInstance="Usuario" targetField="CODUSU" targetType="INTEIRO"  allowSearch="S" visibleOnSearch="S"   >
                <description>Código usuário</description>
                <expression><![CDATA[return $ctx_usuario_logado;]]></expression>
            </field>
            <field name="DATA_CRIACAO" dataType="DATA_HORA" allowSearch="S" visibleOnSearch="S" >
                <description>Data de criação</description>
                <expression><![CDATA[return $ctx_dh_atual;]]></expression>
            </field>
        </fields>
  </table>
</metadados>

A seguir, apresentamos um exemplo de estrutura XML para definir um formulário dinâmico dentro do menu referenciando a instancia da tabela criada acima:

<?xml version="1.0" encoding="ISO-8859-1"?>
<metadados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../.gradle/metadados.xsd">

    <menu id="1" description="Categorias" icon="/$ctx/assets/icon.png">
				<dynamicForm id="1" instance="TBTeste" description="Formulário dinâmico"/>
    </menu>
</metadados>

Podemos observar que a tag contém alguns atributos, que são:

  • id: O atributo id é um identificador único para cada formulário.
  • instance: O atributo instance especifica a instância de dados associada ao formulário.
  • description: O atributo description oferece uma descrição referente ao formulário. Essa descrição é usada para exibir informações sobre o formulário na tela do Sankhya.

Para obter mais informações sobre cada item do formulário, basta posicionar o cursor do mouse sobre o item desejado na IDE. A documentação correspondente será exibida automaticamente como uma dica ou pop-up.


🚧

Abaixo alguns recursos em fase de testes.

Criação de filtros

A plataforma agora oferece uma maneira eficiente de criar filtros de dados sem a necessidade de desenvolver telas específicas para essa finalidade. Essa funcionalidade agiliza o processo de busca e visualização de informações, permitindo que os usuários configurem critérios de filtragem diretamente através da definição da tabela.

Para implementar filtros, basta utilizar a tag como um elemento filho da tag

na estrutura XML de metadados. Dentro dessa tag, você pode definir um conjunto de filtros, referenciando os campos da tabela que deseja usar como critério.


<metadados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../.gradle/metadados.xsd">
	<table name="TBTESTE" sequenceType="A" sequenceField="CODIGO">
      <fields>
        .....
      </fields>
       <filters>
            <filter field="CODIGO"></filter>
            <filter field="DESCRICAO" useLikeExpression="true"></filter>
            <filter field="CATEGORIA_ATENDIMENTO" type="MULTI_SELECAO"></filter>
            <filter field="DATA_CRIACAO" type="PERIODO"></filter>
        </filters>
  </table>
</metadados>

Essa abordagem simplifica a criação de interfaces de pesquisa, garantindo que seus usuários possam encontrar rapidamente as informações de que precisam, sem complexidade de desenvolvimento.

Criação de Formulário Dinâmico hierárquico

Formulários dinâmicos hierárquicos permitem gerenciar cadastros que possuem um relacionamento de pai e filho entre seus registros. Isso é comum em sistemas para representar estruturas como categorias de produtos, centros de custo, projetos ou naturezas de operações, onde a organização dos dados é fundamental para a clareza e a rastreabilidade.

Com essa funcionalidade, a plataforma agora suporta a criação e a gestão desses tipos de cadastros diretamente por meio de Add-ons, integrando-os de forma nativa ao sistema.

<?xml version="1.0" encoding="iso-8859-1" ?>
<metadados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="../.gradle/metadados.xsd">
    <treeTable name="TC_TRTABLE" defaultMask="##.##.##" maskName="TSTMASK">
        <description><![CDATA[MinhaInstanciaTree]]></description>
        <primaryKey>
            <field name="CODIGO"/>
        </primaryKey>

        <instances>
            <instance name="MinhaInstanciaTree">
                <description><![CDATA[MinhaInstanciaTree]]></description>
            </instance>
        </instances>

        <fields>
            <field name="CODIGO" dataType="INTEIRO" allowSearch="S" visibleOnSearch="S">
                <description>CODIGO</description>
            </field>
            <field name="DESCRICAO" dataType="TEXTO" allowSearch="S" visibleOnSearch="S">
                <description>DESCRICAO</description>
            </field>
        </fields>

    </treeTable>
</metadados>


🚧

Para criar os scripts dessa tabela deve-se criar 3 campos além dos declarados no XML. Veja detalhes abaixo

O script de criação do schema da tabela hierarquica deve criar mais 3 campos que são adicionados automaticamente no Dicionário de dados.

São eles:

  • CODIGOPAI = Deve ser do tipo NUMBER(15) no oracle e INTEGER no sqlserver
  • ATIVO = CHAR(1)
  • ANALITICO CHAR(1)