segunda-feira, 9 de dezembro de 2019

Versão 19.11.0 - Final

Introdução

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

Implementações

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

- Implementação do momento do evento do @JArchEventChange, @JArchEventDelete e @JArchEventInsertChange para antes e ou depois da chamada do EntityManager (PERSIST, MERGE ou REMOVE)
- Adicionado o Runnabl processStartEnviroment no DataDetail para ser possível executar código na inicialização do CRUD do Detail

Alterações

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

Alteração no InitializeUtils.initializeCollectionLazy() para filtrar somente as Collections
- Alteração na @JArchAutoIncrement para possibilitar adicionar mais de uma anotação, habilitar em tempo de execução e prioridade
- Alteração na API de teste para ser possível passar a extensão do arquivo no fileUploadFake(), além de implementado 2 métodos fileUploadDocxFake() e fileUploadPdfFake() que já passa esse tipo de arquivo como extensão
- Alteração no APT ColumnDataTableProcessor para não permitir usar o tipo ENTIDADE
- Alteração na geração dos fontes de testes para usar o fileUploadPdfFake() no lugar de fileUploadFake()
-  Alteração nos eventos de CRUD para não usar as ações dinâmicas como default
- Removido o evento @JArchEventFacadeCreateEntity, utilizar o @JArchEventCreateEntity
- Removido os eventos @JArchEventBeforeChangeField e @JArchEventAfterChangeField, utilizar o @JArchEventChangeField
- Removido os eventos @JArchEventBeforeInsert, @JArchEventBeforeInsertChange, @JArchEventBeforeChange, @JArchEventBeforeDelete, @JArchEventAfterInsert, @JArchEventAfterInsertChange, @JArchEventAfterChange e @JArchEventAfterDelete, utilizar @JArchEventInsert, @JArchEventInsertChange, @JArchEventChange ou @JArchEventDelete passando o momento atraves do atributo
-  Removido os eventos @JArchEventManagerAfterChange, @JArchEventManagerAfterDelete, @JArchEventManagerAfterInsert, @JArchEventManagerAfterInsertChange, @JArchEventManagerBeforeChange, @JArchEventManagerBeforeDelete, @JArchEventManagerBeforeInsert e @JArchEventManagerBeforeInsertChange, utilizar a versão  sem a camada e com o momento no atributo
- Alterado eventos assincronos para determinar o momento (BEFORE ou AFTER)
- Atualização do jquery.js para a versão mais atual
- Alteração do ENUMERADO FieldType para usar a lingua inglesa
- Alteração nos método insert e persist para retornar void assim como faz o EntityManager

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no EventChangeField para desembrulhar a instância com proxy do Hibernate, para não trazer os fields que só existe na instância empacotada
- Correção no @JArchValidExclusives para aceitar subatributo ( Ex: pessoa.nome )
- Correção nas implmentações de retorno de mensagem do e:messageHeader para retornar um espaço em branco, porque no Wildfly 18 estava dando erro
- Correção na API de JPQL para setar o cache também quando a entidade pesquisado estiver com a anotação de @Cacheable
- Correção no merge para recuperar os atributos logicFrom, task e endTaskWorkFlow
- Correção na geração do excel para gerar as colunas com tipo correto (Números e datas)

Conclusão

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

Até mais,

sexta-feira, 8 de novembro de 2019

Versão 19.10.0 - Final

Introdução

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

Implementações

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

Implementação do novo evento @JArchEventReadEntityManager para possibilitar interceptar o EntityManager sempre que o mesmo for lido (adicionar filtros dinamicos)
- Implementação no e:commandLinkSave para receber os eventos de onstart e onerror
- Implementação de novas anotações para eliminar anotações duplicadas,  as novas anotações criadas são @JArchEventInsert, @JArchEventInsertChange, @JArchEventChange, @JArchEventDelete e @JArchEventChangeField
- Implementação de chamada de evento assíncrono para os eventos de CRUD e ChangeField
Alterações

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

- Alteração no método classEntity() para getClassEntity() das Action's e Facade's para ficar igual aos Manager's
- Alteração na biblioteca de JPQL para aceitar somentes tipos tipados nos métodos de join e left join
- Alteração na forma de tratamento de exclusão Lógica, alterado o @Where para @JArchExclusionLogic
- Alteração na depreciação de diversas anotações de eventos
- Alteração na API de parâmetro para permitir gravar tipo ENUM e colocado o component a:selectOneButton na interface gráfica
- Alteração nas anotações @JArchCrudDataActionInterceptor para @JArchCrudData, @JArchCrudListActionInterceptor para @JArchCrudList e criada uma nova anotação @JArchListTask para ser possivel interceptar as actions de lista de tarefas
Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Correção no componente de linkDownload para exibir o popup processando
- Correção no método clientJpa() da fachada para filtrar o tenant
- Correção na mensagem de erro de telefone inválido que não estava pegando as informações do bundle
- Correção na geração do nome do índice para não gerar com o mesmo nome para campos diferentes
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, 7 de outubro de 2019

Versão 19.9.0 - Final

Introdução

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

Implementações

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

- Encapsulado os métodos addFieldOrder, removeFieldSearch, newSearchField, activeAndAddParamWhereJpa, activeWhereJpa, deactiveWhereJpa e getColumnDatatable no BaseListTaskAction
- Adicionado método toYearMonth no DateUtils recebendo como parâmetro um XMLGregorianCalendar
- Implementado eventos @JArchEventValidInsert, @JArchEventValidInsertChange, @JArchEventValidChange e @JArchEventValidDelete no DataDetail
- Implementado o GCA para MACOS
- Implementado no e:tabBody para aceitar ordenação da coluna no datatable

Alterações

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

- Alteração no e:filterSearch para mostrar mais opções de filtro para o tipo código
- Alteração na busca por codigo do lookup para contemplar os filtros existentes no Search
- Alteração na classe Identity para implementar a interface IIdentity e Comparator
- Alteração no e:divDataMaster para ser possível passar a descrição dos label's dos botões de gravar, cancelar e voltar
- Alteração na margin-top e margin-bottom do e:dashboardUnity, e:dashboardUnity2
- Depreciado os eventos de CRUD do CrudFacade e CrudManager, utilizar os eventos normais sem referência de camada
- Depreciado a classe CdiUtils, utilizar a classe CDI em seu lugar

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Removido algumas classes CSS no e:divListDatatable e e:divListFilter que estavam em conflito com o Primefaces 7
- Removido a palavra Entity quando não localizar no bundle na crítica do Exclusives
- Corrigido o CpfCnpjUtils.validaCnpj() para não aceitar ZEROS como CNPJ válido
- Corrigido o e:filterSearch para o componente do tipo IM não usar o inputMask se nao for definida uma máscara, usado o inputText no lugar
- Corrigido o CRUD para lançar os eventos de valições do Bean Validation
- Corrigido o e:filterSearch que estava duplicando o ID quando tinha a propriedade mask preenchida
- Corrigido a API de Tests para aguardar 1 segundo antes de efetuar o logoff
- Corrigido a API de relatório para o tipo LocalDate

Conclusão

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

Até mais,

quinta-feira, 5 de setembro de 2019

Versão 19.8.0 - Final

Introdução

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

Implementações

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

- Adicionado atributos styleClass e scrollHeight no e:dialogSelect
- Adicionado vários métodos searchAny no BaseFacade para retornar um Optional
- Adicionado novo método searchAny(SingularAttribute<E, T>, T) na interface ISearchData
Implementado novo metodo toXMLGregorianCalendar(YearMonth) no DateUtils
- Implementado atributo logicFrom na pesquisa (ISearch)
- Implementado bi BaseFilterSelectAction o encapsulamento do método deactiveWhereJpa do ISearch
- Implementado UserSystem que é uma extensão do UserInformation para ser usado por threads iniciadas pelo container (JOB, WS, JMS, etc)
- Implementado uma entidade de Sequence para evitar erro de gravação de auto incremento dentro da mesma transação
- Implementado no @JArchDynamicDirectAction para ser possível não exibir a mensagem de processamento concluído com sucesso pelo atributo showMessageSuccess

Alterações

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

- Utilização do Primefaces 7.0
- Adicionado classes CSS do primefaces nova-ligth para visualizar o component toggleSwitch
- Ajustes na tela de parâmetro para melhorar o visual e adicionado atributo row para ordenar os campos na tela
- Ajuste na API de parâmetro para usar cache na pesquisa
- Habilitado a criação das classes de logica via APT quando não existir (IManager, Manager, Facade, Search, DataDetail, FilterSelect e JpaqlBuilder)
- Removido a geração de fontes implicitos no EntityProcessor porque está deixando lento pelo IntellijIDEA
- Alterado método enviar para send no EnvioGmailUtils
- Alterado BaseEntity para colocar os atributos como transient para nao ocorrer erro na migração de dados via API Migration
- Alterado o caminho default dos drivers dos browsers do Selenium de /usr/local/bin para /usr/local/lib
- Alterado atributo size do calendar na geraçãoo dos fontes para o tamanho considerando os separadores
- Alterado datatable para remover o of da paginação colocando uma / em seu lugar
- Alterado LogoutAction para permitir passar um redirect diferente do login.jsf
- Removido o <? extends IBaseEntity> do ISearch
- Alterado @JArchAutoIncrement para permitir colocar a anotação em campos String com possibilidade de colocar zeros a esquerda através do atributo size
- Alterado a geração dos fontes para utilizar o componente a:toggleSwitch no lugar do
a:selectBooleanCheckbox para os tipos Boolean (Yes/No)

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Removido algumas classes CSS no e:divListDatatable e e:divListFilter que estavam em conflito com o Primefaces 7
- Ajuste no método toXMLGregorianCalendar do DateUtils para adicionar hora, minuto e segundo
- Correção no e:divListDatatable para usar os atributos labelClone, labelChange, labelConsult, labelDelete e labelPrint
- Corrigido no atributo logicFrom da entidade quando o evento for inclusao

- Corrigido a API de parâmetro para fazer UPLOAD de arquivo
- Corrigido a biblioteca de parâmetro para nao ficar fazendo SELECT desnecessaria
- Corrigido o AutoIncrementJpaListener para tratar NULL quando for o primeiro registro
- Corrigido a mensagem de CPF/CNPJ inválido do @JArchValidCpfCnpj
- Corrigido e:lookup para usar os filtros pre-definidos na action quando fizer a busca por código
- Corrigido JavaScriptUtils para substituir as aspas simples do título e da mensagem por aspas dupla, pra não ocorrer erro de JavaScript

Conclusão

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

Até mais,

terça-feira, 6 de agosto de 2019

Versão 19.7.0 - Final

Introdução

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

Implementações

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

- Adicionado método generateFilePDF no JasperReportsUtils
- Adicionado atributo styleClass no e:divDataMaster e o atributo showPanelFooter no e:divSimple
Adicionado os seguintes atributos no e:dialogSelect: style, widthheight e rows
- Encapsulado alguns métodos do ISearch para dentro BaseFilterSelection, (activeAndAddParamWhereJpa, activeAndAddParamsWhereJpa e activeWhereJpa)
- Atualizado Showcase para os componentes novos do Primefaces 7
- Adicionado atributo transient logicFrom no BaseEntity para que seja possivel interceptar o nome da lógica nos eventos JARCH
- Adicionado field othersInformation no IBaseEntity para que seja possível passar uma informação através da entity para ser recuperado esse valor nos eventos JARCH
- Adicionado métodos de condições no WhereJpaql (API de JPQL) para passar uma condição para ser aplicado o filtro, evitando ficar concatenando as instruções perdendo a usabilidade da interface fluente

Alterações

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

- Refatorado os nomes de alguns métodos do ISearch (removido o Arch do nome) 
    addParamArchWhereJpa para addParamWhereJpa
    activeAndAddParamArchWhereJpa para activeAndAddParamWhereJpa
    addParamArchWhereJpa para addParamWhereJpa
    activeAndAddParamsArchWhereJpa para activeAndAddParamsWhereJpa
    activeArchWhereJpa para activeWhereJpa
- Alterado o listener do @JArchAutoIncrement para ignonar os campos NULL
- Removido o método depreciado redirecionaPaginaAposBotaoGravar()
- Removido o método depreciado mostraMensagemSucesso()
- Alteração na geração de colunas com o @JArchColumnDataTable para que seja verificado também o package-info.java da entidade mestre quando o detalhe não estiver no mesmo pacote dele
- Ajuste na criação das colunas do Detail para olhar anotações @JArchColumnDataTable tambem no package-info.java da entidade mestre
Removido alguns métodos depreciados no BaseFacade
- Removido o método depreciado jpaql, usar o metodo jpql no seu lugar
- Alterado o tamanho do tipo CPF/CNPJ de 18 para 14 porque o JARCH remove a máscara antes da gravação

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no método formatddMMyyyy do DateUtils para não ocorrer erro quando a data estiver NULL
- Correção no MultiTenant para nao ocorrer erro quando não existir escopo de sessão
Acerto no BundleUtils para verificar se esta sendo executado via JavaFX e não olhar a sessão
- Acerto na geração dos fontes para a criação das anotações de índices, estava usando o atributo no lugar do nome da coluna do banco de dados
- Correção no e:messageHeader para nao ficar dando erro de JavaScript na chamada do configToastr()
- Removido a inclusção dos javascripts dentro do e:messageHeader porque estava ocasionando erro com o Primefaces 7
- Ajuste na propriedade message do @JArchRequiredOneOfManyField que não estava respeitando a busca no properties de Validation


Conclusão

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

Até mais,

terça-feira, 2 de julho de 2019

Versão 19.6.0 - Final

Introdução

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

Implementações

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

Adicionado o atributo showOptionReport no divListDatatable para nao ter a opção de não chamar a tela de agrupamento e ordenação
- Implementado na API de Parâmetros a opção de obrigatório, com isso o método valid() só precisa ser implementado caso seja uma regra específica de validação
- Adicionado método no DateUtils para conversão do toXMLGregorianCalendar em datas e vice-versa
- Adicionado geração da anotação de índices no @Table para campos marcados como pesquisa, será definido um índice para cada campo pesquisável

Alterações

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

- Ajuste no tratamento de erro nos APT's
- Ajuste no evento @JArchEventSearchBefore para mostrar a mensagem de erro caso lance uma exceção
- Ajuste na pesquisa via API de JPQL para adicionar o filtro de MultiTenant quando a Thread for iniciada via servidor de aplicação
- Ajuste na pesquisa do lookup para retornar a entidade quando a busca for feita por uma Search Wrapper com retorno diferente de uma entidade (Perfomance)
- Ajustado API de parâmetro para a lingua inglesa
- Ajuste no @JArchRequiredOneOfManyField para aceitar passar a chave do bundle na propriedade message
- Alteracao na anotacao @JArchOrderBy para contemplar o tipo de ordenação por coluna (ASC ou DESC). Essa alteracao quebra a interface antiga mas é facil o ajuste para contemplar a nova estrutura
- Alterado atributos abas para tabs, inicio para first, quantidade para maxResults na classe Search e interface ISearch

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção na formatação de mensagem de erro para diferenciar os : (dois pontos) como sendo o label e transformando em destaque erroneamente
- Ajuste na transação @JArchAutoIncrement para contemplar mais de uma gravação na mesma transação
- Removido o parâmetro javax.faces.PROJECT_STAGE=Development do jarch-jsf para nao ocasionar conflito se for definido em algum projeto que utilize esse módulo
- Ajuste na geração dos fontes do jarch-apt para adicionar o import das entitys de detalhe
Conclusão

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

Até mais,

terça-feira, 4 de junho de 2019

Versão 19.5.0 - Final

Introdução

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

Implementações

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

- Adicionado opção nas anotações do filterSearch para colocar ZEROS a esquerdas, atributos zeroLeft e quantityZeroLeft
Adicionado opção para colocar mais um ícone no template principal
- Adicionado método breakList no CollectionUtils, para retornar uma Collection de List com o tamanho configurado
- Adicionado opção de passar o tipo de grafo na biblioteca de JPQL
- Adicionado opcao de incremento no @JArchAutoIncrement por agrupamento de atributos e a opção de começar num determinado número, atributos fieldGroups e start
- Adicionado método no JavaScriptUtils para passar o título e a mensagem quando o tipo do dialog for WARNING

Alterações

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

- Adicionado para ignorar arquivos IML no encapsulamento com o SVN

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correcao na ortografia da palavra inglesa Sucess para Success em alguns métodos
- Removido metodo actionListener do LookupUI porque não estava sendo utilizado

Conclusão

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

Até mais,

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

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,

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