Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 60 Próxima »

O objetivo do diagrama de dados é descrever a estrutura das classes, seus atributos e relacionamentos no sistema (Figura 1). É através do diagrama que geramos automaticamente a camada de persistência e os CRUDs.


Figura 1 - Layout do diagrama

Classes

As classes que são geradas junto aos projetos Cronapp contemplam as funcionalidades de permissão de segurança, log de auditoria, sistemas de multi aplicações e registros dos dispositivos móveis. Para mais detalhes, acesse os links da coluna funcionalidades da tabela abaixo.


Nome da Entidade

Descrição

Funcionalidades
UserUsuários.Permissão de Segurança
RoleGrupos (função).
LoginLogins de provedores externos para um usuário.
SecurablePermissionáveis.
View

Páginas com restrições de acesso.

RoleSecurableAssocia grupos e permissionáveis.

UserSecurable

Associa usuários e permissionáveis.

UserRoleAssocia usuários e grupos (função).
ApplicationUtilizado em sistemas com multi aplicações.Multi Aplicações
ApplicationUserAssocia usuários e aplicações.
AuditLogRegistra informações de eventos ocorridos no sistema.Log de Auditoria
DeviceRegistra dispositivos que acessaram o sistema mobile.Dispositivos mobile

Classe Device

Tabela responsável por armazenar informações dos dispositivos móveis que acessaram o sistema mobile.

Coluna do Banco

Tipo

Função

id  TextoChave primária.
token  TextoToken do dispositivo.
platform  TextoPlataforma do dispositivo.
model  TextoModelo do dispositivo.
platformVersion  TextoVersão da plataforma.
appName  TextoNome da aplicação que acessou a base de dados.
appVersion  TextoVersão da aplicação que acessou a base de dados.

Menu superior

Nesse menu (Figura 2) se encontra todas as propriedades e ajustes do diagrama em si, como gerar a persistência, trocar de banco, filtros das classes, visões, etc.



Figura 2 - Menu superior do diagrama de classes


  1. Gerar camada de persistência: responsável por gerar as camadas entity e dao.
  2. Assistente de view para o diagrama: cria os formulários CRUD na camada view nas classes do diagrama.
  3. Gerar diagrama a partir do banco de dados: faz engenharia reversa a partir de um banco de dados cadastrado no projeto. Essa opção só fica disponível ao criar um segundo diagrama no projeto.
  4. Sincronizar Views: realiza engenharia reversa nas tabelas virtuais do banco de dados.
  5. Organizar elementos do diagrama: organiza toda a visualização das classes do diagrama.
  6. Detectar relacionamentos: sinaliza as classes geradas em relacionamentos NtoM.
  7. Exportar diagrama em: exporta o diagrama em dois formatos diferentes:
    • SVG
    • PDF
  8. Bloquear/Desbloquear Diagrama: impede alterações no diagrama.
  9. Zoom: ferramenta para aumentar ou diminuir zoom da área do diagrama.
  10. Banco de dados: selecionar o banco de dados que será trabalhado, já que algumas aplicações podem ter mais de um banco.
  11. Namespace: nome do espaço de trabalho
  12. Visão: escolher a visualização do diagrama a partir da visão selecionada, como por exemplo visão "produto", mostrará apenas as classes, relacionamentos que tem interação direta com produto. 
  13. Filtro por visão: filtrar as classes e relacionamentos que serão mostrados na visão, cria novas visões.
  14. Buscar: buscar controle, ferramenta.

Menu lateral

Nesse menu se encontram as ferramentas das classes, assim como seus aspectos (Figura 3).


Figura 3 - Menu lateral


  1. Controle: onde as ferramentas de relacionamentos e criação de novas classes se encontram.
    • Tools: ferramentas de relacionamento, para adicionar o relacionamento entre classes selecione o relacionamento, em seguida as classes que se relacionarão:
      • 1to1: cada uma das duas entidades envolvidas referência obrigatoriamente apenas uma unidade da outra.
      • 1toN: uma das entidades envolvidas pode referenciar várias unidades da outra, porém, do outro lado cada uma das várias unidades referenciadas só pode estar ligada uma unidade da outra entidade.
      • NtoM: neste tipo de relacionamento cada entidade, de ambos os lados, pode referenciar múltiplas unidades da outra.
    • Class: adiciona uma classe ao diagrama, basta arrastá-la para área do diagrama.
  2. Propriedades e eventos: ao selecionar uma classe do diagrama ou ligação entre duas classes, a pasta control abrirá algumas propriedades que podem ser alteradas, assim como eventos;
  3. Estrutura: exibe as classes existentes e seus relacionamentos com outras classes. Clique em uma classe para centralizá-la no diagrama, útil em grandes diagramas.

Estrutura da Classe

Ao criar uma classe você pode adicionar um nome e atribuir atributos. A manipulação da classe apresenta suas funcionalidades (Figura 4.1), como adição, remoção e edição de atributos, auditória em log; além disso, ela também apresenta as principais configurações de um atributo, como tipo, nome na coluna do banco, nome no formulário, se permite nulo ou não etc.

É possível adicionar atributos de armazenamento em quatro locais diferentes: Banco de Dados (não recomendado, confira o Manual de Boas Práticas), Dropbox, S3 (Amazon) ou Serviços de Cloud.


Figura 4.1 - Manipulação de classe


  1. Classe: nome que você escolherá para a classe.
  2. Database Table: nome que você escolherá para a tabela no banco de dados.
  3. Auditoria em Log: permite a criação de log para essa tabela. veja mais informações na documentação.
  4. Pesquisar: pesquisa o atributo pelo ID.
  5. Adicionar: adiciona um novo atributo na classe.
  6. Atualizar: recarrega os campos dos atributos exibidos na grade.
  7. Atributo: campo para definir o nome do atributo na classe java. Quando esse é definido, automaticamente a coluna do banco e o rótulo recebem o mesmo nome.
  8. Coluna do Banco: nome do campo no banco de dados.
  9. Rótulo: rótulo do front-end. Nome da coluna que será exibida no CRUD gerado pelo Assistente de View para o Diagrama.
  10. Tipo: caixa de seleção para escolher o tipo do atributo, se ela será uma string, um inteiro, um date.
  11. Chave: define o campo como chave primaria da tabela, as chaves nunca se repetem na mesma tabela e, desta forma, podem ser usadas como um índice de referência para criar relacionamentos com as demais tabelas do banco de dados.
  12. Permite nulo: define se o campo permitirá valores nulos.
  13. Editar: abre mais propriedades referente ao atributo.
  14. Excluir: apaga o atributo selecionado.
  15. Permissão: ao clicar no ícone de um atributo você poderá alterar as permissões de CRUD e filtro para determinados perfis.


Ao clicar no botão de editar de um atributo, a janela de edição irá apresentar todas as configurações possíveis para o mesmo (Figura 4.2).


Figura 4.2 - Edição do atributo


  • Atributo: campo para definir o nome do atributo na classe Java. Quando esse é definido, automaticamente a coluna do banco e o rótulo recebem o mesmo nome.
  • Coluna do Banco: nome do campo no banco de dados.
  • Rótulo: rótulo do front-end. Nome da coluna que será exibida no CRUD gerado pelo Assistente de View para o Diagrama.
  • Tipo: caixa de seleção para escolher o tipo do atributo, se ela será uma string, um inteiro, um date.
  • Tamanho: tamanho do campo no banco de dados. Funciona de acordo com o tipo do campo adotado. Em campos do tipo string (varchar), essa coluna define a quantidade máxima de caracteres.

    Para deixar o atributo sem limites de caracteres, configure-o com o valor 0.


  • Precisão: quantidade total de algarismos aceitos em um campo do tipo numérico fracionado, contando a parte inteira e a parte fracionada.
  • Escala: quantidade de algarismos que será configurada para a parte fracionada no número.

    As colunas Precisão e Escala somente são habilitadas à escrita quando o tipo do atributo escolhido na coluna Tipo for correspondente a um tipo numérico fracionado. Ex. DoubleLong etc.

  • Valor padrão: atribui uma expressão Java ao atributo ou um valor padrão de um tipo parametrizado, caso necessário. No exemplo da (Figura 4.2) há uma expressão para que o ID obtenha um valor randômico único.
  • Máscara: campo será configurado para ter a entrada rotulada com a expressão de máscara definida. Existem algumas máscaras padrões ou você poderá adicionar uma específica; Ex: uma máscara de telefone celular (99) 9 9999-9999.
  • Chave: define o campo como chave primaria da tabela, as chaves nunca se repetem na mesma tabela e, desta forma, podem ser usadas como um índice de referência para criar relacionamentos com as demais tabelas do banco de dados.
  • Único: marcando essa opção, o valor do campo será único na tabela.
  • Permite nulo: define se o campo permitirá valores nulos.
  • Ignorar no REST: define se o campo poderá ser ignorado, não preenchido.
  • Tipo de PK: tipo do campo da chave primária. Contém opções de tratamento da chave primária. Podem ser selecionados os valores: 
    • Nova GUID: define um conjunto de caracteres no padrão Universally Unique Identifier (UUID) gerados pelo servidor da aplicação, seu tipo deverá ser texto (java.lang.String (varchar)).
    • Identidade: define a chave primária como um campo numérico auto incremental. O tipo do campo deverá ser selecionado como inteiro. 
    • Nenhum: não configura nenhum tratamento especial para o campo de chave primária.
  • Transitório: normalmente usados em atributos que passam por constantes modificações durante a aplicação. Atributos transitórios não geram campos na tabela, pois não participam da persistência e seus valores nunca são armazenados no banco de dados.
  • Pode Inserir: define que o atributo pode ser inserido.

  • Pode Atualizar: define que o atributo como editável.
  • Usar o Outer Join: essa propriedade permite gerar consultas e filtros entre entidades no formato outer join, ao invés de inner join. Dessa forma, é possível realizar uma consulta em uma entidade de relacionamento M para N mesmo que não exista relacionamento de chave estrangeira em um dos relacionamentos "pai". Para funcionar, essa propriedade deve ser marcada nas caixas de seleção dos atributos de chave estrangeira e propriedade Filtros e Parâmetros da Fonte de dados deve ser configurada.
  • Criptografar: define que o atributo será criptografado ao ser salvo em banco. O método de criptografia usado é o bcrypt, que gera um hash Blowfsh para o valor informado. Normalmente esse recurso é utilizado em campos de senha.
  • Coluna Referenciada: usado para informar manualmente o nome da coluna de chave primária referenciada por esta coluna de chave estrangeira. Esse campo não possui mais função em projetos novos, ainda é exibido apenas para manter compatibilidade em projetos antigos (Cronapp v1.0).
  • Sequência: esse campo espera receber o identificar de uma sequência criada diretamente no banco de dados. Em banco de dados, "sequence" são objetos criados afim de controlarmos os valores das chaves primárias. Veja mais detalhes sobre sequências nas documentações dos bancos Oracle e SQL Server.
  • Pesquisável: configura automaticamente o atributo como pesquisável na aplicação (campo Pesquisar da tela de CRUD).
  • Remover em Cascata: remove dados em cascata vinculados àquele campo. Útil em relacionamentos 1 to N. Ex: Entidades Pai e Filho, apagando um registro Pai, todos os registros Filhos relacionados serão excluídos automaticamente. Esse campo deve ser marcado no atributo da chave estrangeira da entidade Filho.
  • Coluna de Versão: versiona o objeto da entidade a partir das modificações que forem feitas em seus atributos;  Ver tópico abaixo.
  • Tipo de Armazenamento: selecione um dos locais de armazenamento na nuvem (Dropbox, S3 ou Serviços de Cloud). Esse campo ficará habilitado ao selecionar os Tipos "imagem no Cloud" ou "Arquivo no Cloud".

  • Id do Armazenamento: utilizado apenas para Selecionar a URL do Serviço de Cloud. Esse campo ficará habilitado ao selecionar os Tipos "imagem no Cloud" ou "Arquivo no Cloud".

  • Chave do Armazenamento: chave disponibilizada por uma das opções de armazenamento. Esse campo ficará habilitado ao selecionar os Tipos "imagem no Cloud" ou "Arquivo no Cloud".

  • Segredo do Armazenamento: segredo disponibilizado por uma das opções de armazenamento. Esse campo ficará habilitado ao selecionar os Tipos "imagem no Cloud" ou "Arquivo no Cloud".

  • Nome da chave estrangeira: Usado em atributos de FK (Foreign Key), ele altera o campo "Constraint_name" da respectiva coluna na tabela do Banco de dados.


Acesse o tópico Upload de arquivos para mais detalhes sobre como configurar os tipos de atributos Arquivo ou Imagem.

Usar o Outer Join

Por padrão, a IDE utiliza o método de junção Inner Join ao relacionar 2 classes (M - N), com isso, se uma das chaves estrangeiras estiver nula, ao pesquisar, ele não irá aparecer no filtro, que exibirá apenas os registros que contenha todas as colunas de chave estrangeira preenchidas. Portanto, para exibir todos os registros do filtro, mesmo que algum relacionamento esteja nulo (formato Outer Join), é necessário configurar os atributos de relacionamento e o filtro da fonte de dados no formulário.

No exemplo abaixo vamos criar um relacionamento M para N ( Cliente - Venda - Produto ) (Figura 5.1) e usar o filtro da tela de CRUD Vendas.

Atributos da classe

Para usar o Outer Join, é necessário abrir a janela de edição do atributo de chave estrangeira da classe de relacionamento (Venda) e ativar a caixa Usar Outer Join (Figura 5.1). No exemplo abaixo, ativamos a opção Usar Outer Join nos atributos Comprador e produtoVendido da classe Venda. Após isso, gere a camada de persistência e crie as views das 3 classes.


Figura 5.1 - Ativando a opção Usar Outer Join nos atributos de chave estrangeira

Filtros da view

Após isso, abra a view da classe de relacionamento (Venda), selecione a Fonte de dados principal e, em seguida, clique em "..." da propriedade Filtros e Parâmetros. Siga os passos da figura 5.2:


Figura 5.2 - Configurando a propriedade Filtros e Parâmetros da fonte de dados principal


  1. Com a condição "OR" (Ou) selecionada no primeiro campo, clique no símbolo de página com + para adicionar uma condição;
  2. Selecione os atributos da tabela relacionamento;
  3. Escolha a opção Contém;
  4. Selecione Expressão;
  5. Por fim, defina o campo de pesquisa (vars.search) em todos os campos.

Resultado

Após adicionar alguns registros nas páginas cliente e produto, acesse a página venda, faça alguns relacionamentos entre cliente e produtos. Por fim, digite algo no campo de pesquisa para exibir registros de vendas, mesmo que um comprador não possua um produto relacionado (nulo) ou um produto relacionado não possua um comprador (nulo).


Figura 5.3 – Resultado do filtro com o outer join

Coluna de Versão

Essa propriedade permite definir um atributo da classe para trabalhar como versionador do registro, incrementando seu valor automaticamente a cada modificação do registro. Exemplo: Entidade Empresa possui os atributos ID, nome e versao (campo usado para versionar), sempre que o nome da empresa for alterado (Exemplo da figura 5, o valor “Cronapp” foi alterado para “Cronapp LowCode”), o atributo versão será incrementado automaticamente, informando quantas alterações foram feitas.

Requisitos para a coluna de versão:

  1. Não pode ser Chave.
  2. Deve possuir um dos seguintes tipos: Inteiro, Inteiro Longo ou Data e Hora com Fuso.
  3. Deve permitir Inserção e atualização.
  4. Não pode ser Nulo. 
  5. Necessário informar um valor inicial para o campo configurado como coluna de versão.


Figura 6 - Exemplo de incremento na coluna versionada após alterar algum campo no registro

Tipos

Os dados utilizados para um atributo da classe são descritos na tabela abaixo:

Tipo (Java)Classe JavaCorrespondente no BancoDescrição
Texto (string)StringVARCHARArmazena um conjunto de caracteres.
Texto Longo (Long text)StringCLOBArmazena um conjunto de caracteres com tamanho máximo de 4GB.
Lógico (Boolean)BooleanBOOLEANPermite que o atributo armazene somente um de dois estados: true ou false.
Caracter (Character)CharacterCHARACTERArmazena somente um caractere alfanumérico.
Numérico (Numeric)DoubleDOUBLEArmazena tanto números inteiros quanto fracionários no padrão da IEEE 754, .
Inteiro (Integer)IntegerINTArmazena números inteiros entre -2,147,483,648 à 2,147,483,647.
Inteiro Longo (Long Integer)LongLONG

Armazena números inteiros entre - 263 à 263 - 1.

Decimal Grande (Big Decimal)BigDecimalNUMERICArmazena tanto números inteiros quanto fracionários.
Inteiro Grande (Big Integer)BigIntegerNUMERICArmazena números inteiros que são maiores que Integer ou Long.
Inteiro Curto (Short)ShortSMALLINTArmazena números inteiros entre -32,768 à 32,767.
ByteByteSMALLINTArmazena números inteiros entre -32,768 à 32,767.
Data (Date)DateTIMESTAMPArmazena data (data, mês e ano).
Data e Hora (Date and Time)DateTIMESTAMPArmazena tanto a data quanto a hora.
Data e Hora com Fuso (Timestamp)DateTIMESTAMPArmazena, além da data e da hora, o fuso horário.
Hora (Time)DateTIMESTAMPArmazena hora (hora, minuto e segundo).
Binário (Binary)*VARBINARYArmazena o dado em formato binário.
Arquivo no Banco (Database File)*VARBINARYArmazena arquivos no banco de dados usado em seu projeto no Cronapp.
Arquivo no Cloud (Cloud File)*VARCHARArmazena arquivos na nuvem (Dropbox, S3 Amazon ou Serviços de Cloud) e salva em banco a sua URI.

Imagem no Banco (Database Image)

*VARBINARYArmazena imagens no banco de dados usado em seu projeto no Cronapp.
Imagem no Cloud (Cloud Image)*VARCHARArmazena imagens na nuvem (Dropbox, S3 Amazon ou Serviços de Cloud) e salva em banco a sua URI.
Versão (Row Version)

Long

TIMESTAMP (SQL Server)

LONG (outros bancos)

Atributo específico para SQL Server, ele é um binário que faz o controle de atualização.
XMLByte

XML (SQL Server)

Byte[] (outros bancos)

Atributo específico para SQL Server
Classe (Chave estrangeira / Foreign Key)-Foreign KeyApresenta a(s) classe(s) existentes no diagrama para gerar a chave estrangeira dessas tabelas.

não é uma classe Java, mas sim um dado primitivo. Byte[] - um array de byte.

Máscaras dos atributos

Abaixo estão listadas as máscaras pré-definidas e os tipos compatíveis da janela de atributos. O campo de máscara permite personalização. Para saber mais sobre máscaras, acesse a documentação: Formatação de máscaras na camada cliente.


MáscaraTipos compatíveis
CPFtexto ou texto longo.
CNPJtexto ou texto longo.
CEPtexto ou texto longo.
Telefonetexto ou texto longo.
Horahora, data e hora ou data e hora com fuso.
Datadata, data e hora ou data e hora com fuso.
Data e horadata, hora, data e hora ou data e hora com fuso.
Semanadata, data e hora ou data e hora com fuso.
Mêsdata, data e hora ou data e hora com fuso.
Moedatextotexto longointeiro ou numérico.
Inteirotextotexto longointeiro ou numérico.
Numéricotextotexto longointeiro ou numérico.

Menu de contexto da classe

Ao clicar com o botão direito em cima da classe, um menu aparecerá com algumas opções. 


Figura 7 - Janela da classe


  • Gerar visão CRUD para a entidade: somente gera o formulário da classe selecionada.
  • Criar camada de dados para a entidade: somente gera a camada de persistência para a classe selecionada.
  • Apagar: apaga a classe selecionada.
  • Propriedade da entidade: abre a janela de manipulação da classe selecionada.

Exclusão do diagrama

Quando um diagrama é criado e é gerado sua camada de persistência, é criado um diretório (Namespace) com o nome do diagrama contendo as camadas dao e o entity (Endereço: src/main/java/)(1 da figura 8). o arquivo persistence.xml (Endereço: src/main/java/META-INF/persistence.xml) também é atualizado contendo o diagrama criado (2).

Para localizar o arquivo persistence.xml e os arquivo entity e dao, é necessário que o  Modo Avançado esteja habilitado.


Figura 8 - Arquivos gerados após criar a camada de persistência


Após clicar para remover o diagrama, será exibido uma janela perguntando se também deseja excluir a camada de persistência junto ao diagrama, caso você clique em OK, o Namespace com os diretórios dao e entity serão excluídos e o arquivo persistence.xml será modificado.


Figura 8.1 - Excluindo Diagrama e Camada de persistência


Após confirmar a ação de remover a camada de persistência (figura 8.1), o Namespace "biblioteca" foi excluído e o arquivo persistence.xml atualizado (Figura 8.2).


Figura 8.2 - persistence.xml sem o nome do diagrama

Nesta Página


Conteúdo complementar


  • Sem rótulos