Introdução ao UIFactory: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
 
Linha 43: Linha 43:




== Grid ==
== Grids ==


O UIFactory tem métodos para auxiliar na criação e manipulação de Grids. Esses métodos são explicados junto com a documentação sobre [[Grid]].
O UIFactory tem métodos para auxiliar na criação e manipulação de Grids. Esses métodos são explicados junto com a documentação sobre [[Grid]].

Edição atual tal como às 19h48min de 21 de julho de 2021

O UIFactory é uma classe estática do BIS quer facilita a criação e integração dos componentes do Vaadin baseando na estrutura do framework do BIS.

Há duas maneiras diferentes de utilizar a UIFactory:

  • Métodos Estáticos - Os métodos estáticos do UIFactory tem funções variadas se resumem à tarefas simples como uma "macro". Têm a finalidade de criar ou configurar um componente do Vaadin para ser colocado na tela. Muitas vezes são linhas que se repetem para definir o padrão visual do BIS. Ao utilizar um método estático do UIFactory deixamos o código mais legível e centralizamos essas configurações.
  • Instanciando a UIFactory - Ao instanciar uma UIFactory com um VO, a UIFactory consegue disponibilizar diversos métodos para integrar o VO aos componentes do Vaadin. Permite criar blocos de tela "padrão" da aplicação. Por exemplo, cria campos já interligados aos atributos do VO (fazendo um BIND entre campo do Vaadin e atributo do VO), criar campos de filtros, gerar o BISMO a partir do conteúdo dos campos de filtro, etc.


Métodos Estáticos

Campos Genéricos

createField*

O método createField*(...) cria campos do Vaadin em que sejam possíveis exibir a informação de um determinado atributo. Por isso recebem a classe do VO e a informação do atributo, além de outros parâmetros de configuração do padrão visual do BIS.


Criação dos Campos
Note que este método avalia o BISMetaAnnotation do atributo e o type para gerar e configurar o campo. Os campos gerados seguem uma convenção padrão de campo mais comum para o tipo de dados encontrado. No entanto, é possível forçar um tipo diferente de campo para o mesmo atributo de um VO utilizando os outros métodos que tem o prefixo createField_. Cada método gera um tipo de campo diferente e tem suporte à BISMetaAnnotations específicas.


Apenas Geram os Campos
Os métodos createField*() tem apenas a função de gerar os campos. E embora recebam uma classe de VO, o atributo e algumas vezes um BISDataFormatter, esses atributos são utilizados apenas para configurações visuais e atributos específicos do campo. Como tamanho máximo, obrigatoriedade, etc. Este métodos não fazem nenhum Bind entre uma instância do VO nem forçam a formatação do BISDataFormatter ao sair do campo.


applyBISDataFormatter()

Este método inclui um listener no evento onBlur() do componente que aplica um BISDataFormatter sempre que o usuário deixar o campo. Desta forma é possível manter o conteúdo de um Field formatado mesmo que o usuário coloque as informações "de qualquer jeito". Por exemplo, para manter valores com determinada precisão de casas decimais, para aplicar pontuação em um CPF/CNPJ, etc.


Não utilize junto com métodos de Bind, createVOField*() ou createMOField*()
Os métodos de Bind, createVOField e createMOField já aplicam regra para reformatação internamente. Utilizar este método em campos que já foram passados/criados por alguns desses métodos aumentará o processamento ao perder o foco, ou em alguns casos terminar em loop eterno.


bind*

Os métodos de BIND permitem que um campo do Vaadin seja "conectado" em um atributo do VO diretamente. Desta forma quando o Bind é feito, o valor do VO é sincronizado no campo da tela. E sempre que o usuário alterar o valor no campo, este será automaticamente processado e atribuído no VO. Assim o VO está sempre com os dados que o usuário digitou.


BISDataFormatter
O Bind permite utilizar a estrutura do BISDataFormatter para formatar e validar os dados. Quando o dado informado pelo usuário não é válido, é exibido no campo a mensagem de erro e o valor do VO não é alterado. Uma vez que o valor é inválido, fica impossível converter para o objeto do Java.

Por isso, sempre antes de confirmar uma "tela", é necessário confirmar se todos os campos têm valor válido, pois o usuário pode ter informado algum valor errado e este não estar atualizado no VO.


Há 2 métodos de Bind estáticos. Um é genérico, permite associar qualquer campo criado à qualquer Bean do java. O outro é específico para BISVO. A diferença entre um e outro é que algumas informações sobre o atributo são tirados diretamente da BISMetaAnnotation. Simplificando o código e mantendo centralizadas as configurações do atributo.


Grids

O UIFactory tem métodos para auxiliar na criação e manipulação de Grids. Esses métodos são explicados junto com a documentação sobre Grid.

Automação pelo UIFactory

Ao instanciar o UIFactory, é possível utiliza-lo para automatizar diversas funcionalidades das "telas" do sistema.

Para instanciar é necessário passar um VO, ou pelo menos a classe do VO e posteriormente definir a instância do VO pelo método setVO().

Ao fazer isso o UIFactory oferecerá vários métodos para automatizar sua manipulação.

Manipulação do VO

createVOField*()

Os métodos createVOField() criam campos utilizando os métodos estáticos de createField*(). No entanto já é feito o bind entre o campo e o VO atribuído na instância do UIFactory.

Todo campo criado por este método é registrado dentro do UIFactory para manipulações futuras.


createVOField_Custom()

Este método permite que um componente criado manualmente (fora do UIFactory), seja vinculado à um atributo de um VO. Ao chamar este método e passar o componente criado, o componente ficará registrado e passará a ser manipulado igualmente pelo UIFactory como os campos criados internamente.


getVOField()

Uma vez criado o campo pelos métodos createVOField*(), o campo pode ser recuperado pelo UIFactory através do método getVOField() passando o caminho do atributo do VO. Evitando assim que os todos os campos precisem ter uma referência de classe para ser encontrado por diferentes partes do sistema. Será necessário, no caso, apenas que a instância da UIFactory esteja disponível.


reloadVOField()

Este método faz com que os valores do VO seja recarregado no campo correspondente.


reloadVOField_All()

Este método copia o valor do VO para todos os campos registrados no UIFactory de uma única vez.

Automatização do BISMO

O UIFactory permite criar campos baseado nos atributos do VO para realizar filtros e buscas. Em geral essa funcionalidade é utilizada para aplicação de filtros em telas de listagem com Grid.


createMOField*()

Este métodos criam campos para serem utilizados na aplicação de filtros do atributo. Os campos retornados devem ser exibidos no layout da janela para entrada de dados do usuário.

Todos os campos criados por este método ficam registrados no UIFactory, e seus valores serão utilizados para a criação do BISMO do método createBISMO().


createMOField_Custom()

Este método permite que um campo seja feito manualmente pelo desenvolvedor, e ainda assim ser registrado como um campo de filtro para o BISMO.

Ao utilizar este método é necessário passar um listener, que será chamado para que o conteúdo desse campo gere o filtro necessário no BISMO. O listener é chamado toda vez que o método createBISMO() for chamado para recuperar o BISMO.


createBISMO()

Este método cria um BISMO já populado com os filtros utilizando os valores dos campos de MO. Esse BISMO pode ser utilizado para solicitação direta no banco de dados dos objetos correspondentes.


baseBISMO

O Base BISMO é um BISMO que pode ser colocado como base do BISMO criado pelo createBISMO(). Ou seja, é possível colocar um BISMO que servirá de base para o BISMO criado pelo createBISMO(). Esse BISMO de base é clonado toda vez, e colocados os filtros adicionais gerados pelos conteúdos dos combos.

Esse recurso é funcional quando queremos que um filtro esteja sempre ativo na listagem, como por exemplo esconder itens que não são excluídos, mas estão desabilitados.