sábado, 2 de fevereiro de 2019

Composite Componente JSF - Lookup

Introdução

Nesse post vou mostrar como utilizar o composite componente do JARCH para busca avançada de registro, o componente identificado como e:lookup foi criado para essa finalidade

e:lookup

Para a utilização desde componente é preciso duas etapas:
  1º - A Entidade deve estar anotada com @JArchLookup para declarar o campo de pesquisa rápida (por exemplo um código), e o campo de descrição, conforme exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@Entity
@JArchLookup(codeAttribute = "codigo", descriptionAttribute = "descricao")
public class ProdutoEntity ...
 @Id
 @Column(name = "id_produto")
 private Long id;

 @Column(name = "cd_produto")
 private String codigo;

 @Column(name = "ds_produto"
 private String descricao;
...

  2º - Se a entidade for uma extensão de BaseEntity do JARCH, será criado automaticamente na compilação uma classe que estende BaseFilterSelectAction. Se a entidade não for uma extensão do BaseEntity do JARCH é necessário a criação dessa Action conforme o exemplo abaixo:
1
2
3
4
@JArchViewScoped
@Generated(value = "com.arch.apt.generate.implicit.EntityProcessor", date = "10/09/2018 17:56:14")
public class ProdutoFilterSelectAction extends BaseFilterSelectAction<ProdutoEntity> {
}


Vamos começar a declaração desse componente na página, bastando somente colocar o código a seguir:

1
2
3
4
5
<e:lookup labelUnique="#{a:bundle('label.codigo')}"
          value="#{relatorioProdutoAction.produtoEntity}"
          actionFilterSelect="#{produtoFilterSelectionAction}"
          createExtensionInternal="true"
/>

O atributo value é onde a entidade consultada será armazenada.
O atributo actionFilterSelect é a action da extensão da        classe BaseFilterSelectAction do JARCH.
O atributo createExtensionInternal diz se vai ser criado um popup automático ou manual.

O componente na página fica assim:
Para fazer uma pesquisa, basta colocar o código, ou clicar no botão com a lupa para abrir o popup, conforme a seguir:
Ao pesquisar clicar em pesquisar, será feita uma busca no banco de dados na tabela da entidade e retornará no grid para a escolha, conforme abaixo:

Ao selecionar um registro clicando no Check da 1º coluna do registro, é retornado a pagina com o registro escolhido, conforme abaixo:

Este componente tem mais alguns atributos adicionais, segue os mais relevantes
  hideCode: Esconde o inputText código.
  widthCodeDetermina o tamanho do inputText código.
  hideDescription: Esconde o inputText descrição.
  styleDescription: Coloca um estilo no inputText descrição.
  header: Descrição do cabeçalho do popup.
  visible: Deixa o componente visível.
  update: Atualiza algum componente externo.
  process: Componente que será forçado a atualização do conteúdo.
  required: Determina se o campo é obrigatório.
  listener: Executa uma ação do ManagedBean.

Conclusão

Nesse post vimos como se utiliza o componente e:lookup, suas configurações e alguns atributos.

Até mais,

Algumas Validações com Extensão BeanValidation no JARCH

Introdução

Nos posts anteriores analisamos uma série de eventos, nesse post vou concentrar nos eventos de validação dos atributos da entidade. Por exemplo, antes de persistir a entidade no banco de dados validar se o campo é obrigatório, se o CPF / CNPJ é válido, se o cep é válido, etc..

@JArchValidCep
Valida se o Cep informado no atributo é válido
1
2
 @JArchValidCep
 private String cep;

@JArchValidCnpj
Valida se o CNPJ informado no atributo é válido
1
2
 @JArchValidCnpj
 private String cnpj;

@JArchValidCnpjBase
Valida se o CNPJ Base informado no atributo é válido
1
2
 @JArchValidCnpjBase
 private String cnpjBase;

@JArchValidCpf
Valida se o CPF informado no atributo é válido
1
2
 @JArchValidCpf
 private String cpf;

@JArchValidCpfCnpj
Valida se o CPF ou CNPJ informado no atributo é válido
1
2
 @JArchValidCpfCnpj
 private String cpfCnpj;

@JArchValidCurrency
Valida se o conteúdo informado no atributo é um valor monetário válido
1
2
 @JArchValidCurrency
 private Double valor;

@JArchValidInteger
Valida se o conteúdo informado no atributo é um valor inteiro válido
1
2
 @JArchValidInteger
 private Integer quantidade;

@JArchValidDdd
Valida se o DDD informado no atributo se enquadra em um DDD válido (10...999)
1
2
 @JArchValidDdd
 private String ddd;

@JArchValidPhone
Valida se o Telefone informado no atributo se enquadra em um telefone válido ((XXX)XXXX-XXXX ou (XXX)XXXXX-XXXX)
1
2
 @JArchValidPhone
 private String telefone;

@JArchValidEmail
Valida se o e-mail informado no atributo é válido
1
2
 @JArchValidEmail
 private String email;


@JArchValidPassword
Valida se a Senha informado no atributo se enquadra no level selecionado (LOW, MEDIUM, HIGH)
1
2
 @JArchValidPassword(level = LevelPasswordType.HIGH)
 private String senha;

@JArchValidRequired
Valida se o campo é obrigatório, as demais acima não validam se o campo deve estar preenchido, somente válida se tiver conteúdo.
1
2
 @JArchValidRequired
 private String nome;
para uma mensagem personalizada com um nome para o atributo
1
2
 @ArchValidRequired("label.sobreNomeResumido")
 private String sobreNome;

@JArchValidRequiredOneOfManyField
Verifica se pelo menos um dos campos está preenchido
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@Entity
@ArchValidRequiredOneOfManyField(fields = {"rg", "Cpf"}, message = "message.campoRgOuCpfEObrigatorio")
public class PessoaEntity extends CrudMultiTenantEntity {
 
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO, generator = "PessoaIdSequence")
 @Column(name = "id_pessoa")
 private Long id;

 @Column(name = "nr_rg", length = 10)
 private String rg;

 @Column(name = "nr_cpf", length = 11)
 private SiglaType cpf;
}

Conclusão

Essas são apenas algumas anotações de validação do JARCH. Sem adicionar codificação com essas anotações é possível efetuar diversos tipos de validações complicadas. É uma forma poderosa e fácil de validar o conteudo sem usar codificação adicional.

Até mais,

Versão 19.1.1 Final

Introdução

Nesse post vou mostrar as principais novidades da versão 19.1.1, algumas correções e pequenas alterações.

Implementações

- Adicionado opção adicional no joinFetch da API de JPQL para passar um ListAttribute.

- Adicionado div no template principal para permitir colocar um logo na barra superior.
- Adicionado a geração automatica do JArchSearchField de intervalo para os tipos data/hora e números (valores).
- Adicionado APT para verificar se o @JArchSearchFieldLookup esta com o attribute e whereJpa sem preenchimento.
- Colocado a opção de EntityGraphType na anotacao @JArchEntityGraphSearchList.

Alterações

Além das implementações descritas acima foram feitas algumas alterações:

- Ajuste no ReflectionUtils getFieldCollection para fazer busca da herança recursiva até chegar em Object.
- Removido método depreciado getEntitdade() do BaseDataAction.
- Removido o atributo de ação dinâmica title.

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no componente e:inputTextEmail quando digitado email inválido e o campo passava pela anotacao @JArchValidEmail.
- Correção no DataDetail para nao duplicar o registro no alteração quando já foi adicionado o id na inclusão.
- Adicionado leitura do subatributo no dialogSelect para evitar a criacao de um getter.

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão 19.1.0 Final

Introdução

Nesse post vou mostrar as principais novidades da versão 19.1.0, algumas correções e pequenas alterações.

Implementações

- Adicionado atributo tenant na anotação @ArchColumnDataTable.
Adicionado o atributo tenant nas anotações de campo de pesquisa para que seja possível mostrar somente se for do tenant do atual.
- Adicionado novos eventos CDI @JArchEventSearchBefore, @JArchEventSearchAfter, @JArchEventSearchClearBefore e @JArchEventSearchClearAfter para interceptar a pesquisa (antes e depois) e a limpeza do filtro (antes e depois).

Alterações

Além das implementações descritas acima foram feitas algumas alterações:

- Ajuste no alinhamento dos componentes no filterSearch.
- Removido métodos depreciados em JsfUtils.
- Removido metodos depreciados em ISearch e Search.
- Removido a geração do código do FilterSelection depreciado.
- Alterado nome do módulo jarch-bpmn para jarch-bpm.
- Alterado nome do módulo jarch-utils para jarch-util.
- Alterado todos os converters JSF para o pacote br.com.jarch.jsf.converter.
- Ajuste na captura de exceções para mostrar todos os erros da pilha.
- Renomeado todas as anotações que começavam com @Arch para @JArch.
- Removido método depreciado em BaseFilterSelection.
- Ajustado nome do método addValueArchWhereJpa para addValueWhereJpa.
- Ajuste na geração do código FilterSelect para gerar no projeto web.

Correções

Além das alterações descritas acima esta versão contempla algumas correções:

- Correção no carregamento da Task nas actions de lista e dados, em uma manutenção anterior foi feito uma refatoração e não estava preenchendo corretamente o isStartedWorkflow().
- Correção no nome dos pacotes de quase todos os módulos.

Conclusão

Essa versão contempla algumas melhorias e correções. É recomendável a atualização para essa nova versão.

Até mais,

Versão 23.3.0-Final

      Introdução Nesse post vou mostrar as principais novidades da versão 23.3.0, algumas correções e pequenas alterações. Alterações Além d...