Introdução
Nesse post vou mostrar as principais novidades da versão 22.11.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.11.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.10.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.9.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.8.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.7.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.6.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.5.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.4.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.3.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.2.0, algumas correções e pequenas alterações.
Introdução
Nesse post vou mostrar as principais novidades da versão 22.1.0, algumas correções e pequenas alterações.
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;
}
Introdução
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...