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.
  widthCode: Determina 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,

quarta-feira, 2 de janeiro de 2019

Versão 18.12.0 Final

Introdução

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

Implementações

- Adicionado um atributo na anotação @ArchSearchFieldLookup para informar um filtro alternativo, o nome do atributo é whereJpa.

- Adicionado um atributo na anotação @ArchSearchField para formatar o conteudo, o nome do atributo é mask.

- Adicionado opção de ordenação e agrupamento na geração do PDF na tela de lista. Quando selecionado o tipo de impressção PDF é aberto um popup solicitando o agrupamento e ordenação.

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

- Alterado os prefixos de anotações @Jarch para @JArch

- Adicionado a palavra Generate nas anotações de geração de código para ficar explicito ao que se refere, exemplo @JArchLogicCrud mudou para @JArchGenerateLogicCrud, etc...

- Alterado a anotação @JArchGenerateField adicionando os atributos search e xhtml, isso vai facilitar a configuração dessa anotação porque agrupa as informações dentro desses novos atributos. Com isso os atributos relacionados com essas informações foram removidos da anotação principal.

- Removido o prefixo with dos métodos da interface fluente FieldSearch.

- Alterado a classe TaskBpm para TaskBean.

- Alterado a classe ProcessInstanceBpm para ProcessInstanceBean.


- Alterado o pacote de algumas classes no jarch-model (UserInformation, MultiTenant, ICrudEntity, etc...)

Correções

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

- Correção na anotação @ArchColumnDatatable para saber adicionar no grid do detail mesmo quando a entidade nao estiver no mesmo pacote da entidade principal.

- Correção na geração do código para os sistemas operacionais Windows e IOS, ocorria um erro na geração do código no ambiente Windows.

- Correção na geração do código para obrigar a colocar ao menos 1 campo para pesquisa.

- Removido alguns métodos depreciados em versões anteriores.


ROADMAP

- Criação de tipos de campos de agrupamentos compo por exemplo o atual ADDRESS, que corresponde a todas informações relacionado a endereço.

- Criação de templates de lógicas, como por exemplo:  Pedido, Produto, Cliente, Vendedor, etc...

- Criação de projetos como lógicas prontas por exemplo: Controle de Estoque, Contas Pagar, Contas Receber, etc...

Conclusão

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

Até mais,

quarta-feira, 5 de dezembro de 2018

Versão 18.11.0 Final

Introdução

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

Implementações

- Adicionado um hook metodo beforeFillDataModeList() para interceptação da consulta nas actions de List e FilterSelect.

- Adicionado um listener JPA para remover as máscaras antes da persistência no banco de dados.

- Alterado o APT para gerar os artefatos que eram gerados somente em tempo de compilação na pasta source do projeto. 

- Criado a classe CSS jarch-panelgrid para ser usado com o h:panelGrid, essa classe possuí a mesma configuração de margim do a:panelGrid.

- Remoção de alguns métodos depreciados.

- Criado uma nova anotação para atributos de auto-incremento, evitando o uso desnecessario de objetos específicos do banco de dados (Ex: SEQUENCE). A anotação é @JArchAutoIncrement.

- Adicionado os metodos hasMessageWarn(), hasMessageInfo(), hasMessageError() e hasMessageFatal() no JsfUtils.

- Adicionado atributos showButtomCancel e showButtomReturn no e:divDataMaster.

- Adicionado o agrupamento e ordenação no relatório da tela de lista.

- Adicionado novo composite component e:inputAddress e alterado geração do código para contemplar esse novo tipo.

- Adicionado novo método para geração do dígito verificado para Módulo 10 Modulo10.calculaDigitoVerificador()

Correções

Além das implementações descritas acima versão contempla:

- Correção na clonagem do registro quando houver um atributo com anotação @Embeddable

- Tradução de métodos para a lingua inglesa

- Acerto na geração do XHTML para o atributo required dos DataDetails (Não utilizar mais o método,  usar o literal true)

- Correção na anotação @ArchColumnDatatable para saber adicionar no grid do detail mesmo quando a entidade nao estiver no mesmo pacote da entidade principal

ROADMAP

O próxima versão do JARCH contemplará o JAVA 11

Conclusão

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

Até mais,

quarta-feira, 31 de outubro de 2018

Versão 18.10.0 Final

Introdução

Nesse post vou mostrar as principais novidades da versão 18.10.0, sendo que o carro chefe dessa versão é o desmebramento do jarch-framework em alguns módulos e algumas correções e pequenas alterações.

Desmembramento JARCH-FRAMEWORK

Vou começar mostrando os novos módulos.

jarch-framework

Esse módulo foi renomeado para jarch-crud

jarch-cep

Esse módulo contempla um serviço parap busca de CEP

jarch-jsf

Esse módulo contempla algumas classes relacionadas ao JSF e os composites componentes

jarch-jpa

Esse módulo contempla algumas classes relacionadas ao JPA

Demais Implementações e Correções

Além da criação dos módulos acima essa versão contempla:

- Correção na validação do email que criticava como um email inválido quando iniciava com números

- Remoção do beans.xml porque estava configurado para subir todas as classes elegíveis para o contexto do CDI

- Correção nos limites de transação JPA

- Alterado o modo de uso do @Repetable para usar um interface local dentro das anotações, evitando a criação de um mesmo arquivo com um "s" no final

- Ajustes nos listener para usar injeção via CDI

- Removido o autoApply = true dos conversores JPA de LocalDate, LocalDatTime e LocalTime porque a JPA 2.2 (JAVAEE 8) ja contempla a conversão desses tipos

- Correção na mensagem de erro padrão do @ArchValidRequiredOneOfManyField

- Ajustes nos filtros de condições para não mostrar os tipo MEMBER_OF, NOT_MEMBER_OF, EMPTY e NOT_EMPTY

- Ajustes nos pacotes de alguns módulos

- Acerto no DataDetail para não propagar o erro para a próxima ação de CRUD e também não permitir acionar uma ação de CRUD quando estiver no modo de edição

- Ajuste no BpmUtils.claim() que não estava gravando o usuário que assumiu a tarefa

- Alteração no CrudDataAction para permitir continuar no modo de edição após a gravação

- Removido as anotações @ArchEventManagerBeforeConsult e @ArchEventManagerAfterConsult que não era usado

ROADMAP

O próxima versão do JARCH contemplará o JAVA 11

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