Blog

O Cronapp agora permite rodar as aplicações geradas pela plataforma em qualquer máquina que disponha da instalação do Docker.

Requisitos:

  1. Docker Engine 

Passo a passo:

Exportar a aplicação:

  1. Na árvore de arquivos da IDE, clique no nome do projeto com o botão direito do mouse e nas opções apresentadas selecione Exportar.
  2. Selecione a opção WAR e avance até finalizar a exportação.
  3. Novamente na árvore de arquivos do Cronapp, clique no arquivo Dockerfile com o botão direito do mouse e nas opções apresentadas selecione Baixar.

Estrutura de pastas para organizar os arquivos

  1. No servidor, crie uma pasta com o nome cronapp (ou outro nome de sua preferência)
  2. Dentro da pasta cronapp crie uma pasta obrigatoriamente com o nome target e copie o WAR exportado para esta nova pasta
  3. Copie o Dockerfile previamente baixado para a raiz da pasta cronapp.

Seguindo corretamente as orientações, a estrutura de pastas deve ficar como a seguir:

  • cronapp [ diretório ]
    • Dockerfile
    • target [ diretório ]
      • projeto.war

Executar o BUILD da imagem

Na raiz da pasta cronapp execute o seguinte comando:

docker build -t cronapp/<nome aplicação>:<versão> .

Onde:

  1. <nome aplicação> é o nome que o usuário quiser dar à imagem. Ex.: cadastropessoas
  2. <versão> é a versão da imagem. Ex.: latest ou 1.0

Com as devidas substituições, o comando deve ficar mais ou menos como a seguir:

docker build -t cronapp/cadastropessoas:latest .

Rodar o BUILD da imagem

Após o build da imagem estar devidamente finalizado, o usuário deve rodar o seguinte comando para executar a aplicação:

docker run -it -p 8080:8080 cronapp/cadastropessoas:latest


Feito isso, o usuário pode acessar a aplicação normalmente no endereço do servidor através da porta 8080 (ex: https://endereço:8080).




Nova Permissão de Segurança

O sistema de permissões de segurança é um mecanismo de autenticação e autorização de usuários. Usuários podem fazer login com as informações contidas no Banco de Dados ou podem usar um provedor de login externo. Os provedores de login externo suportados incluem o Active Directory, OpenID-connect, Facebook, Google, Microsoft Account, Twitter, Github, Certificados digitais e ICP Brasil, podendo também ser personalizado para qualquer provedor de login externo compatível com OAuth 2.0.

Figura 1 - Acesso a nova janela de permissões de segurança

Modelo de dados das permissões de segurança

Por padrão, o sistema de permissões e segurança armazena informações de usuário em um banco de dados usando o JPA. Para muitos aplicativos, essa abordagem funciona bem. No entanto, você pode preferir usar um mecanismo de persistência ou esquema de dados diferente, tornando o modelo extensível e personalizável.


Diagrama de dados

O modelo de dados das permissões de segurança é representado pelo seguinte diagrama de dados:

Figura 2 - Tabelas geradas junto com o sistema

Tipos de Entidade

O modelo de dados das permissões de segurança consiste dos seguintes tipos de entidade (Figura 2):

Nome da Entidade

Descrição

UserRepresenta um usuário
RoleRepresenta um papel 
LoginRepresenta um login e seu provedor para um usuário
SecurableRepresenta um conjunto de objetos ao qual você quer aplicar controle de acesso
ViewRepresenta um objeto do tipo View ao qual você quer aplicar controle de acesso
RoleSecurableAssocia um conjunto de objetos a um papel, permitindo que todos os usuários contidos em um papel tenham acesso a esse conjunto de objetos

UserSecurable

Associa um conjunto de objetos a um usuário, permitindo que o usuário tenha acesso a esse conjunto de objetos
UserRoleAssocia um usuário a um papel

Relacionamentos dos tipos de entidade

Os tipos de entidade são relacionados entre si das seguintes formas:

  • Cada User pode ter múltiplos Securables associados, e cada Securable pode estar associado a múltiplos Users. Esse relacionamento muitos-para-muitos é representado pela entidade UserSecurable.
  • Cada User pode ter múltiplos Logins associados.
  • Cada User pode ter múltiplos Roles associados, e cada Role pode estar associada a múltiplos Users. Esse relacionamento muitos-para-muitos é representado pela entidade UserRole.
  • Cada Role pode ter múltiplos Securables associados, e cada Securable pode estar associado a múltiplos Roles. Esse relacionamento muitos-para-muitos é representado pela entidade RoleSecurable.
  • Cada Securable pode ter múltiplos Views associados.

Personalizando as permissões de segurança

Por padrão, as permissões de segurança podem ser personalizadas durante o desenvolvimento da aplicação e durante a sua execução.

Durante o desenvolvimento, acesse o menu Projeto → Permissão de segurança (Figura 1).


Tela principal do sistema de permissão de segurança

A tela principal do sistema de permissão de segurança é composta das abas (item 1 figura abaixo) de Permissionáveis (Securable), Grupos (Role) e Usuários (User).



Figura 3 - Configuração dos Permissionáveis

Permissionáveis

Mostra os perfis de permissões do projeto, podendo editar ou adicionar novos perfis. Por padrão, o Cronapp cria automaticamente os perfis: Public, Authenticated e Administrators.

Ao editar um dos permissionáveis (figura 3), é possível editar seu nome (aba Geral), adicionar diversas permissões na camada de view  (aba Visões), definir os grupos de usuários que pertencem a esse perfil (aba Grupo) ou selecionar os usuários individualmente (Usuários),

Grupos

As permissões dadas a um Grupos de acesso serão passadas aos usuários que estão vinculados a esse grupo,

Nas configurações de um grupo é possível: alterar o nome, indicar se o grupo pode ter membros e se o grupo é predefinido. Além disso, a aba Usuários (nas configurações do grupo) permite selecionar os usuários para esse grupo.

Por padrão, o Cronapp possui os grupos Administrators (administradores do sistema), Anonymous Users (usuários não logados) e Authenticated Users (usuários logados).

Usuários

Os usuários cadastrados podem receber permissões específicas ou ser adicionado em grupos.



CRONAPP-165

Página a ser modificada:

Referência Cronapp



O Cronapp adicionou dois novos blocos para utilização de queries nativas. São eles:

Abrir consulta nativa

Este bloco deve ser usado em consultas: SELECT

Figura 1: Bloco Abrir consulta nativa

Abrir instrução SQL nativa

Este bloco deve ser usado quando a instrução SQL for um INSERT, UPDATE ou DELETE.

Figura 2: Bloco Abrir instrução SQL nativa

Ambos os blocos possuem os seguintes parâmetros:

  1. Entidade: Entidade definida e existente no Cronapp.
  2. Consulta SQL: Instrução SQL nativa a ser executada pelo bloco.
  3. Parâmetros para consulta: Os parâmetros presentes na instrução SQL deve possuir dois-pontos (caractere :) antes de qualquer palavra, sendo este parâmetro opcional. Ex. :unidade

CRONAPP-1020

Página a ser modificada:

Database

Para clientes Enterprise, um novo mecanismo de customização de templates foi adicionado à árvore de recursos. Trata-se do item Arquivos de Template. Esses arquivos são todos os templates que o Cronapp usa para gerar arquivos, camadas de dados e CRUDs. Ao abrir um arquivo e modificá-lo, você estará customizando um determinado template e o Cronapp passará usar ele ao invés do padrão de fábrica. O novo item aparece conforme imagem abaixo:


Figura 1 - Arquivos usados para customização de templates


Para customizar a forma como Cronapp gera os formulários de CRUD, duplique a pasta Arquivos de Template/files/crud/angular_crud_view e depois insira um novo nome ao template, editando o arquivo templates.properties. Veja as imagens abaixo:


Figura 2 - Edição das propriedades do Templates


No exemplo acima, o template do CRUD fica no arquivo __FileName__.view.ftl. Esse arquivo segue um padrão do FreeMarker para definição de templates. Veja imagem a baixo:


Figura 3 - Arquivo do template do CRUD


Os arquivos de template ficam com uma cor diferente dos demais. A cor laranja significa que o template está com o padrão de fábrica e a branca, que ele foi customizado. Para voltar alguma parte ao padrão de fábrica, basta excluir o arquivo ou pasta customizada. Para voltar todo o conteúdo para o padrão de fábrica, exclua a pasta Arquivos de Template.

Existem duas subpastas entro de Arquivos do template, são elas

  • files: onde ficam os templates de arquivos gerais como formulários, cruds, etc e
  • data-layer: armazena os templates de geração dos arquivos java da camada de dados.


O Cronapp disponibilizou um plugin que permite exportar métricas da aplicação para serem usadas por serviços de terceiros, como o Prometheus por exemplo.

Para usar esta funcionalidade, basta abrir um projeto e ir no Menu Plugin → Adicionar novo plugin.

Figura 1 - Opção Adicionar novo Plugin


Com a janela de listagens de Plugins aberta, selecione a opção General e clique em Avançar.

Figura 2 - Janela de Categorias de Plugins


Na tela a seguir, procure pelo plugin Cronapp APM (ou digite o termo na barra de pesquisa e aperte enter), selecione o plugin e clique em Avançar e logo em seguida em Finalizar.

Figura 3 - Plugin Cronapp APM


O plugin será instalado e será exibida uma janela informando das alterações causadas pelo plugin ao projeto.


Figura 4 - Sumário de alterações


Após a instalação do plugin, é necessário acessar a  opção de Permissão de segurança do projeto e dar permissão à URL de acesso do plugin, que fica no endereço /actuator (recomenda-se inicialmente configurar a permissão authenticated). 

Figura 5 - Permissão de acesso a URL de métricas


Com a permissão devidamente configurada, basta rodar o projeto e acessar o endereço <URL do projeto>/actuator (Ex.: https://app-14-174-27917.ide.cronapp.io).

Figura 6 - Tela de métricas e links para métricas mais específicas


O Cronapp disponibilizou mais um novo evento "Ao Gerar Erro" (On Error) nas fontes de dados, cujo o objetivo é tratamento de erros de qualquer natureza durante o processo de manipulação de dados de uma Fonte de Dados.

O novo evento entra na lista na aba de eventos, conforme a figura abaixo:


Depois de escolhido um bloco, qualquer erro gerado na manipulação da fonte de dados será enviado para esse bloco. Caso o desenvolvedor queria manipular o erro e enviar um outro, basta lançar um nova excessão. Veja o exemplo abaixo:


O evento pode receber os seguintes argumentos:

  • primaryKey: primeira chave primária da fonte;
  • primaryKeys: lista com todas as chaves primárias da fonte;
  • entityName: nome da entidade;
  • eventName: nome do evento (onError);
  • data: objeto da entidade manipulado; 
  • exception: objeto da excessão;
  • exceptionMessage: mensagem da excessão;


Para utilizar a nova opção de autenticação via Single Sign-On, basta selecionar a opção SSO no combo de Tipo de Autenticação que aparece na segunda página ao criar um novo projeto.


Figura 1 - Opção SSO no combo de Tipos de Autenticação

Figura 1 - Opção SSO no combo de Tipos de Autenticação.


Com o projeto já criado, localize o arquivo application.properties no projeto, navegando nas pastas src/main/resources e abra o arquivo clicando duas vezes sobre ele.


Figura 2 - Arquivo application.properties na árvore de arquivos.


Ao executar o passo anterior, será aberta uma tela para preenchimento de alguns campos necessários para o funcionamento da autenticação via Single Sign-On.


Figura 3 - Janela de Configurações do Projeto

Abaixo estão os campos da janela Configurações do Projeto

  • ID do Cliente: O ID do cliente encontrado nas configurações do provedor de autenticação SSO.
  • Segredo do Cliente: O segredo do cliente encontrado nas configurações do provedor de autenticação SSO.
  • URI do Token de Acesso: URI do provedor OAuth que fornece o token de acesso para a aplicação.
  • URI de Autorização do Usuário: URI para o qual o usuário será redirecionado, se for necessário, para autorizar o acesso ao recurso.
  • URI de Informações do Usuário: URI para obter detalhes atuais do usuário.


Ferramenta Integrada de teste

O Cronapp disponibilizou a integração de seu ambiente com o Selenium IDE, que é um ambiente integrado de desenvolvimento para scripts de testes automatizados.

Ele é implementado como uma extensão do Chrome e permite gravar, editar e depurar os testes.

O  Selenium IDE inclui o Selenium Core , permitindo que você facilmente e rapidamente possa gravar e reproduzir os testes no ambiente real que será executado.

Extensões

Antes de Começar, precisamos instalar as extensões customizadas do Cronapp em seu navegador (Chrome), para fazê-lo, siga esses passos:

1) Primeiro faça o download da Selenium IDE em https://chrome.google.com/webstore/detail/cronapp-selenium-ide/hpcojmgahnpeomjhbehnnkemddieekmf?hl=pt-BR

2) Depois faça o download da extensão de Comunicação entre o Selenium e o Cronapp https://chrome.google.com/webstore/detail/cronapp-test-plugin/lpahmaoibbackfgjlpobipdhiejiiaem?hl=pt-BR 

Selenium IDE

Figura 1 - Ferramenta Selenium IDE rodando no Cronapp

Para abrir o Selenium IDE, clique no botão  na barra de ferramentas do Cronapp. (Figura 1)

Um teste pré configurado é disponibilizado na criação do projeto, ele se encontra na pasta config / test / Test.sideAo abrir o Selenium, esse teste é carregado e ao salvar, as modificações serão alteradas nesse arquivo.

Gravando Testes

Para gravar o teste insira a URL do seu projeto em execução e clique no botão 

O navegador vai abrir com a mensagem que o Selenium IDE está gravando, pode executar os testes de forma que simule o uso desejável.



Figura 2 - Gravando o teste que será executado de forma automática posteriormente


Ao final do teste, todas as ações estarão gravadas na IDE, clique em Salvar para enviar as ações para o Cronapp.



Figura 3 - Teste gravado, ao salvar, o teste será salvo na plataforma Cronapp


Exportar Testes

Finalizada a gravação, você pode exportar para que eles rodem na IDE, para exportar clique no teste que gostaria e clique em Export. (Figura 4)



Figura 4 - Seleção do projeto a ser exportado


Seu teste será exportado utilizando a nomenclatura do JUnitClique em Export ao final. (Figura 5)



Figura 5 - Exportação do projeto


O arquivo de Testes será exportado para a pasta src / test / java /. (Figura 6)


Figura 6 - Diretório onde são armazenados os testes


Executar Testes

Para executar seus testes clique no botão . (Figura 7)



Figura 7 - Janela que exibe os resultados dos testes.


Para saber mais sobre o Selenium IDE entre em https://www.seleniumhq.org/selenium-ide/docs/en/introduction/getting-started/.




O Cronapp liberou o suporte a campos do tipo rowversion (Versão) que trata edições concorrentes de um mesmo registro.

ROWVERSION é um tipo de dados que expõe números binários exclusivos, gerados automaticamente, em um banco de dados. Rowversion geralmente é usado como um mecanismo de registro de versão para linhas de tabela. O tamanho de armazenamento é de 8 bytes. O tipo de dados rowversion é apenas um número que aumenta e não preserva uma data nem hora. 

Nas opções de campos de uma entidade, temos um novo tipo chamado Versão. Veja a figura abaixo:

Figura 1 - Novo tipo "Versão"


Após escolhido o tipo Versão (como na figura acima), o Cronapp vai tratar a edição concorrente dessa entidade. Um registro (formulário) não poderá ser modificado caso ele já tenha sido modificado por outro meio após o início da edição atual. Exemplo: uma pessoa inicia a edição de um registro de um cadastro e, ao mesmo tempo, outra pessoa também inicia a edição desse mesmo registro. Apenas quem salvar primeiro terá sucesso e o outro receberá uma mensagem de erro informando que o registro foi modificado por outro usuário.

Observação: o cache de consultas, ao gerar a camada de persistência no diagrama de dados, deve ser desativado para que o suporte a ROWVERSION funcione corretamente. Veja a figura 2:


Figura 2 - Sempre desative o cache de consulta ao usar o tipo versão



CRONAPP-935

Página a ser modificada

Diagrama


Suporte a Versionamento de Entidades

Implementada nova opção no diagrama para marcar Coluna de Versão, gerando entidades com uma coluna para versionamento. 


Figura 1: Coluna de Versão

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 Nulo e Inserção.

Entidades com uma Coluna de Versão marcada apresentam os seguintes comportamentos:

  1. A inserção/incremento ocorrem de forma automática da coluna.
  2. A atualização de um ou mais campos de um registro é bloqueada, exceto quando o número da versão permanece inalterado. Neste caso, o campo utilizado para versionamento é incrementado automaticamente.

Exemplo de Entidade "Empresa" com coluna de versionamento:

Figura 2: Entidade com Coluna de Versão gerada automaticamente.

Figura 3: Mensagem de erro ao tentar atualizar o registro passando uma versão diferente.



CRONAPP-935

Página a ser alterada:

Diagrama

Uma nova opção foi disponibilizada para os usuários do Cronapp em que um bloco pode ser disponibilizado externamente através de um WebService SOAP. 

Para isso, uma nova opção foi disponibilizada nas configurações de bloco. Veja a imagem a seguir:


Ao marcar a opção, o bloco estará listado no serviços expostos pela aplicação, através do endereço https://<url da aplicação>/services/. Ao acessar esse endereço, os serviços são listados como na imagem abaixo:


Clicando no link do serviço, é possível ver o WSDL do serviço e importá-lo em alguma outra aplicação. 

Observação: assim como um WebService REST, as permissões de segurança afetam diretamente o serviço. Um WebService  SOAP é trafegado via POST, logo a permissão "Permite Inserir" é a que deve ser usada para ele. 




CRONAPP-974

Página a ser modificada:


Para utilizar o componente Árvore, basta arrastar o mesmo para dentro de uma view web.


Figura 1 - Botão e componente na tela de edição visual web


Após adicionar à view, a janela de opções do componente será aberta.


Figura 2 - Janela de configurações da Treeview


Abaixo estão os campos da janela Opções da Árvore:

  • Fonte de dados: Selecionar/Adicionar uma Fonte de dados.
  • Campo de texto: Informar qual o campo que deverá ser utilizado para exibir o texto.
  • Campo de auto relacionamento: Informar qual o campo de auto relacionamento.
  • Obter valor do campo como: Selecionar como deve ser obtido o valor do campo.
    • Esse campo permite obter o valor como Objeto ou Chaves.


Figura 3 - Resultado da Árvore após configuração



CRONAPP-932

Página a ser modificada:

  

Agora é possível inserir, de forma low-code, imagens no componente visual Cartão, permitindo ainda mais sua personalização.

Figura 1 - Seleção de imagem no componente "Cartão"

O Cronapp adicionou suporte nativo a auditoria em logs de entidades, fontes de dados e blocos de programação. Isso significa que clientes poderão facilmente auditar uso de recursos do seu sistema.

Na primeira versão, três tipos de recursos estão habilitados a serem auditados. São eles:

Entidades

Ao editar uma entidade, a opção de Auditoria em Log é apresentada:

 

Blocos

Ao entrar nas configurações de um bloco:

Fonte de Dados

Ao editar uma fonte de dados:


O log de auditoria é gravado, por padrão, na entidade AuditLog, através a Fonte de Dados "Auditoria em Log".



Também foi disponibilizado uma view simples para consultar os logs no menu administrativo de uma aplicação criada com o Cronapp:


Para mais detalhes sobre o sistema de log do Cronapp, acesse Log de Auditoria.



CRONAPP-906

Os gráficos são recursos utilizados para representar um fenômeno que possa ser mensurado, quantificado ou ilustrado de forma mais ou menos lógica, se expressando de forma simples e amigável para o usuário. Muito utilizados em sistemas com variação dinâmica, como Dashboards.

Criamos um tutorial passo a passo mostrando como gerar e editar gráficos no Cronapp, acesse esse conteúdo em  Criando gráficos dinâmicos.