Administração do sistema

Inclusão de campos dinamicamente

RT.FAQ-78280
Existem alguns cenários onde se deseja incluir campos dinamicamente em um formulário. Seriam situações onde a definição de cada campo está registrada em uma tabela. Neste casos, existe um local onde o administrador do sistema pode definir campos adicionais a serem utilizados para uma determinada entidade. Os valores destes campos deverão ser salvos em uma entidade associativa, formando uma relação de 1 para muitos com relação à entidade base.

Em tempo de desenvolvimento, no formulário onde se deseja incluir estes campos, será necessário criar um único campo UNBOUND na posição e características onde estes campos serão deverão ser inseridos.

Este bloco deverá ter dois métodos que serão responsáveis em controlar tanto a inclusão destes campos como a persistência de seus valores:

Os nomes acima deverão seguir uma nomenclatura própria onde "xxxx" deverá ser substituído pelo elemento apropriado, tal como "propriedades" (de uma atividade), "características" de uma pessoa, "atributos" de um produto, etc.

A implementação das regras deverá utilizar dois métodos auxiliares existentes na ServiceModel:

includeCustomFields(Field baseField, String SQL)


O SQL definido acima, deverá ter as seguintes solunas:

Exemplo:
       includeCustomFields(aPropriedades,
               "select tpa.id as name"
               + ", tpa.dominio as domain"
               + ", tpa.titulo as label"
               + ", tpa.descricao as hint"
               + ", pa.valor as value"
               + " from tipos_propriedades_atividades tpa"
               + " join tipos_atividades t on t.id = tpa.tipo_atividade_id"
               + " left join propriedades_atividades pa on pa.propriedade_id = tpa.id"
               + " where t.tipo_atividade = '" + aTipoAtividade + "'"
               + " order by tpa.sequencia");

saveCustomFields(Field baseField, Entity entity, String parentColumn, String refColumn, String valueColumn)

       saveCustomFields(aPropriedades, 
               new EntPropriedadesAtividades(ctx),
               "ATIVIDADE_ID", 
               "PROPRIEDADE_ID",
               "VALOR");

Ver também: