sexta-feira, 3 de maio de 2019

Versão 19.4.0 - Final

Introdução

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

Implementações

Segue abaixo as implementações dessa versão:

- Adicionado alguns métodos na API de testes para facilitar o teste com selenium para os componentes e:lookup e e:dialogSelect
- Adicionado opção de passar a action no @FilterSearchLookupField para quando utilizar mais de um campo apontando pra mesma classEntity
- Adicionado retorno de uma mensagem mais intuitiva que não foi possível localizar o método de download com assinatura correta
- Adicionado atributo states no e:inputAddress para aceitar uma collection para os estados, transformando o componente em um combo no lugar de um input

Alterações

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

- Adicionado a propriedade styleClass no e:inputTextMoney 
- Alterado o e:divListDatatable para aceitar ocultar os campos de totalizadores
- Alterado o padding de 40px para 20px na classe CSS .content
- Alterado assinatura dos métodos de chamada a ações dinâmicas do ICrudListAction e CrudListAction
- Alterado para executar a validação do BeanValidation antes dos Observers
- Alterado o EmailUtils para ValidEmailUtils para ficar mais claro sua utilização
- Alterado a API de relatório para imprimir SIM ou NÃO quando o tipo do campo for Boolean
- Ajustes nos tempos defaults da API de teste

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Corrigido EventChangedField para ignorar atributos que são LAZY e não está carregado
- Corrigido ReportList para verificar se a coluna é um field ou um getter
- Corrigido método de download para verificar também o tipo IIdentity
- Removido os campos de ENUMERADOS na tela de lista, antes da impressão nas colunas de ordenação e agrupamento
- Corrigido a tela de filtros para limpar checkbox quando o atributo whereJpa estiver preenchido
- Corrigido o filtro da lista quando o tipo do campo igual a CPF que estava mostrando condições erradas
- Correções ortográficas no bundle 
Conclusão

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

Até mais,

segunda-feira, 1 de abril de 2019

Versão 19.3.0 - Final

Introdução

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

Implementações

Segue abaixo as implementações dessa versão:

- Adicionado os métodos isFiredCancel(), isFiredReturn(), isFiredSave() e isFiredDynamic() para saber qual ação foi chamada dentro da action de dados
- Implementado opção para adicionar um botão de ação para não finalizar a task, adicionando o atributo labelButtonDontSaveTask
- Criado a interface IIdentity e adicionado no processo de passagem da lista para o dados usando essa interface no TransferListToData, essa implementação foi necessário devido a possibilidade da tela de lista carregar um bean no lugar de uma entity
- Adicionado atributo converterJsf no @JArchSearchFieldCombobox para passar o conversor JSF
- Adicionado e:bundleParams para possibilitar passar 1 parametro pelo JSF
- Adicionado dois eventos novos, @JArchEventBeforeChangeField e @JArchEventBeforeChangeField para interceptar os eventos de antes/depois alteração de uma campo na entidade
- Adicionado novo evento @JArchEventLoadDynamic para interceptar a abertura de um CRUD via ação dinâmica
- Adicionado opção de bloqueio dos componentes visuais quando executado via ação dinâmica @JArchDynamicShowDataAction pelo atributo blockedMaster e @JArchDynamicDetailShowDataAction pelo atributo blockedDetail()

Alterações

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

- Adicionado tratamento do botão imprimir na tela de lista para ser possível desabilitar e habilitar conforme controle de acesso
- Alterado todos os métodos que usavam verbo POST do JAX-RS do BpmUtils para usar a API do camunda no lugar de acessar via REST
- Alterado métodos para lingua inglesa em HashTagUtils
- Alterado os datatables (divListDatable e tabBody) para mostrar um ícone ("X") nos campos de Boolean que estejam como FALSE, e mostrar vazio quando estiver NULL
- Adicionado o Locale com o tenant atual no MessagePropertiesUtils para dar preferência na busca do bundle por tenant
- Alteração na geração de código para contemplar upload na geração dos testes automático
- Adicionado método na API de testes para chamar a tela de lista com acionamento automático para a tela de dados
- Adicionado atributo idDynamic no TransferListToData para enviar o id da ação dinâmica mesmo que não exista um anotação de ação no método chamado
- Adicionado opção de chamar uma ação dinâmica que não mostra a tela de dados, mas chamando o método callDynamic na tela de lista para entrar na tela de dados e não mostrar botão nenhum de ação (somente o cancelar)
- Ajuste no menu de ações no e:divListDataTable para ocupar no mínimo 8em de tamanho

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correcao no nome do atributo labelButtom para labelButton nas anotações de ação dinâmica
- Ajuste na geração do código (APT e GCA) para levar em consideração o que foi informado no width
- Correção na pesquisa de campos Boolean para saber tratar (S, N ou NULL)
- Acerto no GCA na geraçãoo de mais de um detalhe

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, 6 de março de 2019

Versão 19.2.0 - Final

Introdução

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

Implementações

- Adicionado opção de retornar somente os campos definindos 
@JArchColumnDatatable na para a tela de lista.
- Adicionado atributo hideCode na anotação @JArchSearchFieldLookup.
- Adicionado atributo subQuery na anotação @JArchColumnDatatable.
- Adicionado o filtro de multitenant no BpmUtils.
- Adicionado log nas chamadas dos métodos do BpmUtils.
- Adicionado log no BpmUtils para informar os parâmetros que estão sendo passado.
- Adicionado todos os composites componentes nos taglibs para que seja possível a visualização dos atributos dentro da IDE.

Alterações

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

- Renomeado o método getListaColunasDataTable para getListColumnDataTable na action de lista.
- Alterado os atributos da classe ColumnList para lingua inglesa, atributo => field, tipo => type, posicao => position, tamanho = width, ordernacao => order.
- Removido atributo depreciado title em @JArchDynamicShowDataAction.
- Atributos labelMenu e labelButtom são obrigatórios depois da remoção do atributo title em @JArchDynamicShowDataAction.
- Removido o método removeColumnDataTable() do BaseListAction e adicionado os métodos getColumnDataTable() nas classes ListBaseAction, DataDetail e BaseFilterSelectAction.
- Ajuste para programação defensiva retornando Optional para FieldSearch e IColumnList nas classes BaseListAction, BaseFilterSelectAction  e no DataDetail.
- Removido o parâmetro boolean do método hide() da classe FieldSearch.
- Ajuste na classe CSS jarch-panelgrid para alinhar igualmente ao a:panelgrid.
- Alterado para ter o label único na lista de tarefas.
- Ajuste no Paginator para identificação do registro com genérico diferente de IBaseEntity.

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Ajuste nos nomes da classes que geram artefatos na compilação acrescentando o sufixo Generate.
- Removido a lentidão na geração dos fontes para o JAVA 11.
- Ajuste no ReflectionUtils para diminuir o número de exceções ao testar o getter ou field.
- Correção na validação do email quando estava null.
- Correção nas classes BaseListAction e BaseFilterSelectionAction para carregar todas as colunas definidas na anotação @JArchColumnDatatable e filtrar as colunas visíveis somente no getListColumnDataTable().
- Correção na geração dos fontes para gerar como e:bundle no lugar de a:bundle.
- Correção no DataDetail para não apagar ID, estava causando a validação indevida da anotação @JArchValidExclusive.

Conclusão

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

Até mais,

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,

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