sábado, 17 de dezembro de 2022

Versão 22.11.0 Final

 Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alteração na geração do XHTML de List e Data para conter as tags lang e title evitando aviso de verificação de código
- Adicionado @Transactional no searchOneAndInitializeCollectionsBy do BaseDao

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Acerto no filtro do e:filterSearch quando checkbox
- Correção no CpfCnpjUtils.formata para retornar "" quando for NULL
- Correção no carregamento dos dados do SubDetail
- Correção no evento @JArchEventChangeField para contemplar campos com máscaras


Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Adicionado opção de ação dinâmica de Download para o e:divListDataSimple


Conclusão

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

Versão 22.10.0 Final

 Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Adiciona sombreamento nas div's dos componentes e:divListFilter, e:divDataTable, e:divDataMaster, e:divDataDetail e e:divSimple
- Alterado o atributo width de Integer para String e o default para 100% nos composites componentes e:inputText, e:inputTextInteger, e:inputTextMoney e e:lookup
- Adicionado sombreamento no e:dialogSelect, e:filterGroup, e:filterOrder, e:filterPeriod, e:filterPeriodYearMonth e e:filterSelect
- Adicionado estrutura de Controller, Service, Repository e DataDetail para suportar o BaseEntity no lugar do CrudEntity
- Adicionado o BaseDataDetail para DataDetail de consulta e o CrudDataDetail para DataDetail de CRUD

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no e:dialogUnique para permitir a utilização de mais de um componente na mesma página
- Correção no e:dialogUnique para permitir a utilização de mais de um componente na mesma página
- Removido o @Transactional do CrudDao


Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Criado os composites components e:tabTitleSimple e e:tabBodySimple para utilizar com o BaseDataDetail
- Criado a anotação @JArchController para utilizar em Controller's


Conclusão

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

quarta-feira, 26 de outubro de 2022

Versão 22.9.0-Final

     Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Adicionado atributo converterJsf no @JArchComboBoxCommandJpa
- Alteração na API de Test para passar o conteudo parcial do combobox no lugar do indice
- Adicionar sobrecarga nos métodos de filtros da API de JPQL de filtro, dando opção de alias de até 3 campos aninhados
- Alterado a interface IAggregate para IAggregateJpql e a classe Aggregate para AggregateJpql
- Alterado nome atributo, getter e setter de predicateDataModel para filterDataModel

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no @JArchValidExclusives que não estava sendo executado quando existia mais de uma anotação

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Atualizado para utilizar o Primefaces 12

Conclusão

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

Versão 22.8.0-Final

 Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alteração no BaseRest para retornar o getService() e getRepository() diretamente no lugar de retornar o Instance
- Alterado as referências com o IBaseEntity para IIdentity onde possível e ajustados os genéricos para utilizar o IIdentity

Conclusão

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

Versão 22.7.0-Final

      Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado as chamadas internas de IManager para Repository
- Ajuste na geração de código para adicionar o repository no genérico do controller
- Ajustes nas anotações adicionado o @Documented
- Alterado o ICommunicationDao para CommunicationRepository
- Ajustes nas chamadas do controller para passar o genérico do repository
- Alterado os métodos de pesquisas do ClientJpqBuilder para o BaseDao (Chamada a ser feita através do Repository)
- Removido os métodos findBy e findByAll do ClientJpql
- Renomeado método findById para findAnyById para ficar intuitivo que retorna um Optional<E>
- Refatoração na API de Communication ajustando o Service, Repository e Dao
- Reduzido a visibilidade do getUserInformation(), getMultiTenant(), getClientJpql(), getClassEntity(), getEntityManager() de public para protected
- Removido a classe BaseMenuAction e interface IBaseMenuAction que estavam depreciadas
- Removido as referencias do getListaSelecionados, utilizado o getSelections em seu lugar
- Removido o BaseMenuAction e IBaseMenuAction, utilizar o BaseMenuController e IBaseMenuController em seu lugar
- Alterado a visibilidade do getClientJpql() de public para protected no BaseDao
- Renomeado o singleOptional da API de JQL para any
- Renomeado os metodos do DataBaseUtils removendo o prefixo clause
- Refatoração métodos do BaseRepository e BaseDao para ficar no padrão

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Ajuste na criação do construtor do searchAllFilterPaginator para remover o description e descricao quando ENUM

Conclusão

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

quinta-feira, 30 de junho de 2022

Versão 22.6.0-Final

     Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Removido a condição contains e notContains do FieldType de CPF, CNPJ e CPFCNPJ

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Ajuste ma geracao de fontes no ambiente Windows via APT
- Acerto na geração de fontes para o sistema operacional Windows
- Ajuste na mostragem das colunas de totalizadores no e:divListDataTable

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Novos componentes JARCH VUE

Conclusão

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

Versão 22.5.0-Final

    Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado getListaSelecionados() e setListaSelecionados() do ListController para IIdentity no lugar do IBaseEntity
- Alterado o genérico das classes base para utilizar o IIdentity no lugar do IBaseEntity

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no EntityManagerProduces para aplicar o filtro de TENANT e Exclusão Lógica analisando a entidade

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Novos componentes JARCH VUE

Conclusão

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

Versão 22.4.0-Final

   Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Alterado a nomenclatura das interfaces de Dao's para Repository, IBaseDao para BaseRepository e ICrudDao para CrudRepository
- Removido dependências do Arquillian no pom.xml principal do JARCH
- Removido a classe FormataNumeroUtils, utilizar NumberUtils em seu lugar

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Ajuste no Search para utilizar os atributos styleWidth e styleAlign do FieldType
- Ajuste no JARCH VUE
- Ajuste no FieldSearch para quando o whereJpa for NULL

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Adicionado novo tipo INTEGER em FieldType para atributos do tipo Integer
- Adicionado novos métodos em ICrudEntity para visibilidade e habilitação dos menus de ações da tela de lista (isDisabledMenuClone(), isVisibleMenuClone(), isDisabledMenuChange(), isVisibleMenuChange(), isDisabledMenuConsult(), isVisibleMenuConsult(), isDisabledMenuDelete(), isVisibleMenuDelete())
- Adicionado método List<IIdentity> getSelections() no IBaseListController e depreciado o getSelecionados()
- Adicionado método void setSelections(List<IIdentity>) no IBaseListController e depreciado o setListaSelecionados()
- Adicionado métodos no IReportList exportFormatCsv(), exportFormatExcel(), exportFormatTxt() exportFormatXml()
- Adicionado métodos para baixar arquivos no BaseRest (pdf, xml, csv, txt e Excel)
- Adicionado no DateUtils métodos formatDateJson() e formatDateTimeJson()
- Adicionado nova interface IMenuActionList para controle de ações do CRUD


Conclusão

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

Versão 22.3.0-Final

  Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Pequenas refatorações em BaseListController

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção no divListDatatable para funcionamento parecido com o divListDatatable mas para Controller's BaseListController
- Correção na criação dos filtros, para pegar da anotação JArchListController
- Correção na JArchValidRequiredOneOfManyField que estava falhando na verificação de um campo preenchido
- Ajuste no Search para tipificar corretamente o tipo Number (Integer ou Long)

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Adicionado atributos onlyFieldSearchThisClassOrPackageInfo e onlyColumnDataTableThisClassOrPackageInfo no JArchListController para facilitar a configuração de filtros e colunas especificas de um Controller
Adicionado novas anotações @JArchListController e @JArchDataController para utilização em Listas e Dados
- Adicionado a exceção de ValidationException nos MarshallerUtils.marshal e UnmarshallerUtils.unmarshal quando não for possível executar a operação


Conclusão

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

Versão 22.2.0-Final

 Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Alterado a classe CaracterUtils para CharacterUtils e seus métodos para a lingua inglesa
- Alterado o tamanho default da coluna do tipo de MOEDA de 100px para 120px

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
- Correção na busca pelo id da ação dinamica do datadetail
- Correção no ValidationEmailUtils para o isValid saber tratar NULL
- Correção na descricao do tipo LocalDateTime

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
- Adicionado o atributo paramtersUnbind no FieldSearch para ser possível não utilizar Bind de parâmetro no comando JPQL

Conclusão

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

domingo, 13 de fevereiro de 2022

Versão Final 22.1.0

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
Alteração no @JArchAutoIncrement para receber no atributo condition um Predicate<? extends ICrudEntity>
- Removido o @Deprecated dos métodos do BpmUtils que estão sendo encapsulados para o RuntimeService e TaskService

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Correção na ação de CLONE quando existe coluna dinâmicas
Correção no DateUtils toLocalDateTimeStartOfDay que estava setando o primeiro dia disponivel no lugar do horario

Implementações

Além das correções descritas acima esta versão contempla algumas implementações:
Adicionado biblioteca do swagger para geração de yaml e json bem como o template da pagina para visualizar
Adicionado geração da classe de Rest na geração de código do JARCH
- Adicionado os métodos clearCache() e clearAllCache() no BaseDao e BaseService
- Adicionado nova anotação @JArchFacade
- Adicionado nova exception TaskException
- Upgrade do Primefaces 10 para o Primefaces 11
- Adicionado atributo crudEntityBefore nas entidades base de CRUD para ser possível recuperar o objeto antes de alteração
- 463a9d484 Adicionado classes de testes do JARCH para AliasJpqlTest, BundleUtilsTest, ObjectUtilsTest, SleepUtilsTest, ValidEmailUtilsTest e YearMonthUtilsTes
- Inclusão do atributo valueMemo nos parametros, para colocar texto
- Adicionado método isMd5 para validar um HASH MD5 no Md5Utils

Conclusão

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

quarta-feira, 19 de janeiro de 2022

Colunas Dinâmicas com JARCH

     Devido a uma necessidade imposta em uma licitação o JARCH agora disponibiliza a funcionadade de adicionar uma coluna dinâmica em um CRUD. Gostaria de ressaltar que isso é uma solução desencorajada porque não faz muito sentido adicionar colunas sem existir alguma regra de negócio. 

Nesse post, vou mostrar como preparar uma funcionalidade para que seja possível o próprio usuário adicionar uma coluna no cadastro, bem como adicionar no filtro de pesquisa.

O primeiro passo e criar um script para criar as tabelas necessárias para utilização do JARCH no armazenamento da estrutura e dados, vou utilizar o FLYWAY com JARCH.

-- >>>>>>>>>>> SCRIPT FORMAT DATABASE ORACLE <<<<<<<<<<<<<
-- CREATE TABLE <SCHEMA>.TB_DYNAMICFIELD
CREATE TABLE TB_DYNAMICFIELD
(
ID_DYNAMICFIELD NUMBER(19) NOT NULL CONSTRAINT PK_DYNAMICFIELD PRIMARY KEY,
DH_EXCLUSAO TIMESTAMP,
SQ_VERSAOREGISTRO NUMBER(6) NOT NULL,
ID_MULTITENANT NUMBER(5) NOT NULL,
NM_PAGE VARCHAR2(500) NOT NULL,
NM_ENTITY VARCHAR2(500) NOT NULL,
NM_TABLE VARCHAR2(500) NOT NULL,
NM_LABEL VARCHAR2(50) NOT NULL,
NM_COLUMN VARCHAR2(50) NOT NULL,
TP_FIELD VARCHAR2(50) NOT NULL,
SQ_ROW NUMBER(6) NOT NULL,
SQ_COLUMN NUMBER(6) NOT NULL,
SN_VALUEREQUIRED CHAR(1) NOT NULL,
SN_DATATABLE CHAR(1) NOT NULL,
SQ_COLUMNDATATABLE NUMBER(6) NOT NULL,
SN_SEARCH CHAR(1) NOT NULL,
SQ_ROWSEARCH NUMBER(6) NOT NULL,
SQ_COLUMNSEARCH NUMBER(6) NOT NULL,
QT_SPANSEARCH NUMBER(6) NOT NULL
);

-- CREATE INDEXES FROM ADMFIS.TB_DYNAMICFIELD
CREATE INDEX DX_DYNAMICFIELDNMPAG ON TB_DYNAMICFIELD (NM_PAGE);
CREATE INDEX DX_DYNAMICFIELDNMCOL ON TB_DYNAMICFIELD (NM_COLUMN);
CREATE INDEX DX_DYNAMICFIELDNMLAB ON TB_DYNAMICFIELD (NM_LABEL);
CREATE INDEX DX_DYNAMICFIELDTPFIE ON TB_DYNAMICFIELD (TP_FIELD);

-- CREATE SEQUENCE FROM ADMFIS.TB_DYNAMICFIELD TO ID
CREATE SEQUENCE SQ_IDDYNAMICFIELD NOCACHE START WITH 0 MINVALUE 0 MAXVALUE 999999999999;

-- CREATE TABLE AUDIT FROM ADMFIS.TB_DYNAMICFIELD
CREATE TABLE TB_DYNAMICFIELD_AUD
(
ID_AUDITORIA NUMBER(19) NOT NULL,
TP_AUDITORIA NUMBER(1),
ID_DYNAMICFIELD NUMBER(19),
DH_EXCLUSAO TIMESTAMP,
SQ_VERSAOREGISTRO NUMBER(6),
ID_MULTITENANT NUMBER(5),
NM_PAGE VARCHAR2(500),
NM_ENTITY VARCHAR2(500),
NM_TABLE VARCHAR2(500),
NM_LABEL VARCHAR2(50),
NM_COLUMN VARCHAR2(50),
TP_FIELD VARCHAR2(50),
SQ_ROW NUMBER(6),
SQ_COLUMN NUMBER(6),
SN_VALUEREQUIRED CHAR(1),
SN_DATATABLE CHAR(1),
SQ_COLUMNDATATABLE NUMBER(6),
SN_SEARCH CHAR(1),
SQ_ROWSEARCH NUMBER(6),
SQ_COLUMNSEARCH NUMBER(6),
QT_SPANSEARCH NUMBER(6)

);

-- >>>>>>>>>>> SCRIPT FORMAT DATABASE ORACLE <<<<<<<<<<<<<
-- CREATE TABLE ADMFIS.TB_DYNAMICDATA
CREATE TABLE TB_DYNAMICDATA
(
ID_DYNAMICDATA NUMBER(19) NOT NULL CONSTRAINT PK_DYNAMICDATA PRIMARY KEY,
DH_EXCLUSAO TIMESTAMP,
SQ_VERSAOREGISTRO NUMBER(6) NOT NULL,
ID_MULTITENANT NUMBER(5) NOT NULL,
NM_PAGE VARCHAR2(500) NOT NULL,
NM_ENTITY VARCHAR2(500) NOT NULL,
NM_TABLE VARCHAR2(500) NOT NULL,
ID_ENTITY NUMBER NOT NULL,
NM_LABEL VARCHAR2(50) NOT NULL,
NM_COLUMN VARCHAR2(50) NOT NULL,
GN_VALUE VARCHAR2(4000),
GN_BINARY BLOB,
ID_DYNAMICFIELD NUMBER(19)
);

-- CREATE INDEXES FROM ADMFIS.TB_DYNAMICDATA
CREATE INDEX DX_DYNAMICDATACOMP1 ON TB_DYNAMICDATA (ID_DYNAMICFIELD, ID_ENTITY);
CREATE INDEX DX_DYNAMICDATANMPAG ON TB_DYNAMICDATA (NM_PAGE);
CREATE INDEX DX_DYNAMICDATANMCOL ON TB_DYNAMICDATA (NM_COLUMN);
CREATE INDEX DX_DYNAMICDATANMENT ON TB_DYNAMICDATA (NM_ENTITY);
CREATE INDEX DX_DYNAMICDATAIDENT ON TB_DYNAMICDATA (ID_ENTITY);
CREATE INDEX DX_DYNAMICDATANMLAB ON TB_DYNAMICDATA (NM_LABEL);

-- CREATE SEQUENCE FROM ADMFIS.TB_DYNAMICDATA TO ID
CREATE SEQUENCE SQ_IDDYNAMICDATA NOCACHE START WITH 0 MINVALUE 0 MAXVALUE 999999999999;

-- CREATE TABLE AUDIT FROM ADMFIS.TB_DYNAMICDATA
CREATE TABLE TB_DYNAMICDATA_AUD
(
ID_AUDITORIA NUMBER(19) NOT NULL,
TP_AUDITORIA NUMBER(1),
ID_DYNAMICDATA NUMBER(19),
DH_EXCLUSAO TIMESTAMP,
SQ_VERSAOREGISTRO NUMBER(6),
ID_MULTITENANT NUMBER(5),
NM_PAGE VARCHAR2(500),
NM_ENTITY VARCHAR2(500),
NM_TABLE VARCHAR2(500),
ID_ENTITY NUMBER,
NM_LABEL VARCHAR2(50),
NM_COLUMN VARCHAR2(50),
GN_VALUE VARCHAR2(4000),
GN_BINARY BLOB,
ID_DYNAMICFIELD NUMBER(19)
);

Nesse exemplo vou utilizar o caso de uso de Documento para disponibilizar a criação de ação dinâmica, então vou adicionar mais um script para facilitar a JPA na busca de informações:


CREATE VIEW ADMFIS.VW_DOCUMENTO_DYN AS SELECT * FROM ADMFIS.TB_DYNAMICDATA WHERE NM_ENTITY = 'DOCUMENTOENTITY';

Vou alterar minha entity DocumentoEntity para implementar a interface IDynamicColumn


public class DocumentoEntity extends UsuarioMultiTenantEntity implements IDynamicColumn {

E o mapeamento da coluna dinâmica na entidade DocumentoEntity:


@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(schema = "admfis", name = "vw_documento_dyn",
joinColumns = @JoinColumn(name = "id_entity", referencedColumnName = "id_documento"))
@MapKeyColumn(name = "nm_column")
@Column(name = "gn_value")
@Filter(name = Constant.TENANT)
private Map<String, String> dynamicColumn;

E o get e set:


@Override
public Map<String, String> getDynamicColumn() {
return dynamicColumn;
}

@Override
public void setDynamicColumn(Map<String, String> dynamicColumn) {
this.dynamicColumn = dynamicColumn;
}

Agora compilando e publicando a aplicação vou acessar a tela de lista de documentos:


Pressionando as teclas CTRL+SHIFT+F12 simultâneamente abre a tela para adicionar a coluna dinâmica.

Confirmando os dados agora temos:


E a tela de dados:


 

Conclusão

Essa funcionalidade deve ser usada somente se necessario, uma vez que a normalização da tabela não fica claro onde essa informação é gravado.

Até mais,


sábado, 15 de janeiro de 2022

Versão Final 21.12.0

 Introdução

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

Alterações

Além das implementações descritas acima foram feitas algumas alterações:
- Melhoria nos card's de filtro de relatório, para ser possível ajustar cor e ícone
- Ajuste nas mensagens de erros para colocar o campo na frente da mensagem automaticamente
- Alterado a nomenclatura da anotação JArchListActionConfiguration para JArchListController
- Refatoração no tratamento de mensagens pelo BundleUtils, BeanValidationUtils e MessagePropertiesUtils

Correções

Além das alterações descritas acima esta versão contempla algumas correções:
Ajuste na geração de mensagens de erros para não formatar a mensagem na camada de domínio
- Correção na busca por codigo do lookup, para não pesquisar por numero quando não for numero
- Alterado a busca do código lookup pra não ser case sensitive
- Correção no ocultação da menu que estava ocultando o main indevidamente

Implementações

Além das correções descritas acima esta versão contempla algumas correções:
- Adicionado nova biblioteca PhoneUtils para formatar o número de telefone
- Adicionado feature de coluna dinâmica para os caso de USO, com pesquisa e mostragem no datagrid
- dicionado os métodos isOracle() e isPostgreSql() no DatabaseUtils

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