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 56 Próxima »

O Cronapp permite que novos blocos de programação (cliente ou servidor) sejam criados e adicionados na lista de blocos do Editor de Blockly. Dessa forma, é possível criar funções para atender as necessidades de cada projeto.

Pré-requisitos

Antes de começar a seguir os passos do tutorial é preciso ter certeza de que se tem um ambiente minimamente preparado para reproduzir o exemplo. Abaixo estão os requisitos principais.

Requisitos:

  1. Projeto que possua o lado servidor criado. Caso haja dúvidas de como criar esse tipo de projeto acesse o link ( Criar projeto );
  2. Habilitar o botão Modo Avançado.

Visão Geral

Nesse tutorial iremos criar uma função de bloco de programação do tipo servidor que obtém uma lista de números e retorna o menor valor.

Passos

Criando pacote 

Faz parte da boa prática de desenvolvimento criar diretórios ou arquivos referentes ao bloco de programação do tipo servidor no diretório. Dessa forma, criaremos o pacote menorValorLista que irá conter a classe Java referente ao componente. Clique com o botão direito no diretório java  , em seguida, escolha Novo, selecione Pacote e insira o valor "menorValorLista" na janela de Confirmação.


Figura 1 - Criando  o pacote

Criando classe Java

O pacote criado deve receber um arquivo do tipo Java, dessa forma, clique com o botão de contexto no pacote menorValorLista e escolha Novo, em seguida, selecione Java (Figura 2.1). 


Figura 2.1 - Criação da classe Java


Após solicitar a criação do arquivo Java, o Cronapp irá exibir a tela de escolha do modelo de arquivo. Selecione a opção Nova Função para Bloco de Programação (Figura 2.2). O botão Avançar confirma a seleção do modelo e exibe a tela de definição das informações.


Figura 2.2 - Escolha do modelo do arquivo


Para finalizar, preencha os campos informados na Figura 2.3.

                                                                                                                              

Figura 2.3 - Definindo informações sobre o bloco

Campos:

  • Nome da classe: define o nome da classe Java onde está inserida a função.
  • Nome da função: atribui o nome da função que será exibido no Editor de Blockly.
  • Nome reduzido da função: define o nome para a função Java.
  • Descrição da função: descreve a finalidade da função para ser exibido na sua descrição.
  • Categoria: Define o nome da nova categoria.

As informações preenchidas acima são exibidas posteriormente ao selecionarmos a função criada no editor de blocos de programação servidor (Figura 6.1).

Alterando anotações do método

A geração do código base para o componente vem com algumas anotações padrão, como, por exemplo: typereturnTypeString input. Esses valores não são fixos e podem ser alterados. Ver Figura 3.1.

Atributos dos parâmetros:

  • type - Tipo do parâmetro de entrada da função.
  • description - Descrição do parâmetro de entrada da função.
  • returnType - Tipo do parâmetro de saída da função String.
  • String input - Tipo da variável e seu nome "input" - O nome da variável pode ser alterado para qualquer outro.


Figura 3.1 - Classe Java recém-criada


Utilize CTRL + Espaço para exibir os ObjectTypes disponíveis (Figura 3.2):


Figura 3.2 - Alguns dos tipos de parâmetro que podem ser utilizados

Saiba mais

Mais detalhes sobre as anotações acesse Utilizando anotações.

Adicionando código 

Primeiramente, devemos alterar os tipos de dados atuais para list, além disso, devemos acrescentar algumas informações sobre o parâmetro no código. Após a adequação dos parâmetros, o código referente a funcionalidade pode ser adicionado ao corpo da função. Nesse exemplo, o código retorna o menor valor contido em uma lista.


Código padrão
package menorValorLista;

import cronapi.CronapiMetaData;
import cronapi.ParamMetaData;


@CronapiMetaData(categoryName = "Obter Valor")
public class MenorValorLista {

	@CronapiMetaData(type = "function", name = "obterMenorValorLista", description = "Função que retorna o menor valor contido em uma lista")
	public static String obMenVaList(@ParamMetaData(description = "Parâmetro: Descrição do parâmetro") String input) throws Exception {
		return "Input " + input;
	}

}
Código modificado
package menorValorLista;

import java.util.Comparator;
import java.util.Optional;

import cronapi.CronapiMetaData;
import cronapi.ParamMetaData;
import cronapi.Var;
import cronapi.CronapiMetaData.ObjectType;


@CronapiMetaData(categoryName = "Obter Valor")
public class MenorValorLista {

	@CronapiMetaData(type = "function", name = "obterMenorValorLista", description = "Função que retorna o menor valor contido em uma lista")
	public static Var obMenVaList(@ParamMetaData(type =  ObjectType.LIST ,description = "Parâmetro: Descrição do parâmetro") Var list) throws Exception {

			Optional<Var> opt = list.getObjectAsList().stream().min(Comparator.comparingLong(Var::getObjectAsLong));
			return opt.get();

	}

}


Figura 4.1 - Alterações realizadas na função


Algumas alterações foram realizadas no código base, são elas, respectivamente:

  • Tipo de retorno da função: alterado de string para Var;
  • Tipo do parâmetro da função: foi acrescentado que o tipo do parâmetro é uma lista;
  • Descrição do parâmetro: Essa descrição é exibida posteriormente no editor de bloco de programação (Figura 6.1); 
  • Variável do parâmetro: o nome da variável do parâmetro foi definido como list e seu tipo é Var;
  • Corpo da função: o corpo adicionado para a função é responsável por retornar o menor valor da lista recebida como parâmetro.


Caso seja apontado algum erro em algum trecho do código, clique no termo e aperte "CRTL + . (ponto)" ou clique no ícone da lâmpada para exibir uma opção de correção. Ao digitar o código é possível usar o "CTRL + Espaço" para exibir os métodos de um objeto (Figura 4.2). Salve o arquivo Java em seguida.

Figura 4.2 - Alguns dos métodos contidos em uma instância de um objeto do tipo Var 

Acessando a função 

Após salvar o método da classe Java que criamos, clique com o botão de contexto sobre a raiz do projeto e selecione a opção Recompilar e Reabrir Projeto para que a nossa função seja carregada (Figura 5.1).


Figura 5.1 - Recompilando e reabrindo o projeto


O último passo é a visualização desta função como um bloco de programação disponível. Abra um bloco de programação do tipo Servidor e verifique na categoria Obter Valor o bloco obterMenorValorLista (Figura 5.2).


Figura 5.2 - Função sendo exibida em sua respectiva categoria no bloco de programação servidor


As informações definidas durante o desenvolvimento da função são exibidas ao passar o ponteiro do mouse sobre o bloco ainda na Categoria (Figura 5.3).

  

 Figura 5.3 - Exibição das informações da função

Testando a função

Agora vamos testar a função que desenvolvemos nesse tutorial. Para isso foi criado a variável "lista" que recebe uma lista com 3 valores inteiros, essa variável é passada por parâmetro para o bloco criado (obterMenorValorLista), que retornará o menor valor da lista e exibirá em uma notificação na tela. Criamos um botão na tela para chamar a função de bloco mostrarMenorValor (Figura 6.1) e o resultado será exibido no navegador (Figura 6.2). 


 

Figura 6.1 - Bloco que exibe o menor valor da lista

 Figura 6.2 - Menor valor da lista exibido na tela

Anotações

As Anotações (annotations) têm o objetivo de possibilitar a declaração de metadados ao longo do código que podem ser posteriormente interpretadas por um compilador ou pré-compilador que irá realizar alguma tarefa predefinida. As anotações evitam, em muitos casos, a criação de arquivos XML de configuração que tornam tão difícil a compreensão de alguns sistemas. Anotações podem ser utilizadas, por exemplo, para indicar que um método não deve mais ser usado (@Deprecated) ou que ele foi sobrescrito (@Override).

Nos exemplos citados, é importante que fique claro que a presença de anotações não influem no comportamento da classe ou de seus objetos, mas sim adicionam funcionalidades anexas a uma determinada classe.

Observações:

  • metadados são informações (dados) que falam sobre a classe mas não fazem parte da classe em si.
  • Anotações são representadas com o símbolo prefixo (@ arroba). 

Como usar anotações na plataforma Cronapp

As anotações na plataforma Cronapp podem ser aplicadas nos seguintes casos: Declaração de métodos, classes, interfaces, parâmetros e enumerações.

Existem duas anotações principais que podem ser referenciadas e utilizadas em classes do tipo Java, são elas:

  • @CronapiMetaData
  • @ParamMetaData

A anotação @CronapiMetaData contém os seguintes elementos:

TipoElementoValor
String type Se o valor definido for "function" a função criada fica visível no bloco de programação, se "internal" a função fica disponível apenas de forma interna via código.
String platformSe o valor definido for "M" significa que a função criada é voltada para plataforma "Mobile", se o valor for "W" para plataforma "Web".
String categoryNamePermite que o usuário final determine uma nova categoria
String[] categoryTagsPalavra(s)-chave utilizada(s) para auxiliar a busca de categorias de funções dentro do bloco de programação. Esse elemento pode receber mais de um valor.
String nameChave de internacionalização- Nome da função a ser apresentada no bloco de programação.
String[]nameTagsPalavra(s)-chave utilizada(s) para auxiliar a busca de funções dentro do bloco de programação. Esse elemento pode receber mais de um valor.
String descriptionChave de internacionalização- Descrição da função
String[]paramsChave de internacionalização: Descrição sobre o(s) parâmetro(s) de entrada da função. Esse elemento pode receber mais de um valor.
boolean displayInlinePermite que os parâmetros da função no bloco de programação sejam passados, por padrão, em apenas uma linha ao invés de passados de forma individual, uma linha por parâmetro no bloco da função.
boolean arbitraryParamsDefine se a função poderá receber parâmetros além dos definidos durante sua criação no momento da utilização desta no bloco.
ObjectType[]paramsType

Tipo do(s) parâmetro(s) de entrada da função. Esse elemento pode receber mais de um valor.

 (O tipo do parâmetro é baseado no enum ObjectType)

ObjectTypereturnType

Tipo de retorno da função.

(O tipo de retorno é baseado no enum ObjectType)

CategoryTypecategory

Tipo de categoria a qual a função faz parte.

(O tipo do categoria é baseado no enum CategoryType)

 

Mais sobre

Os elementos ObjectType e CategoryType são do tipo enumeradores (enum) definidos respectivamente a seguir:

enum
 public enum ObjectType {

    BOOLEAN, LONG, DOUBLE, DATETIME, STRING, LIST, MAP, DATASET, JSON, XML, OBJECT, UNKNOWN, BLOCK, STATEMENT, STATEMENTSENDER, VOID

  }
 
 
 public enum CategoryType {

    IO, DATABASE, FRONTEND, SCREEN, CONVERSION, DATETIME, XML, EMAIL, FTP, JSON, LOGIC, TEXT, LIST, MAP, COLOR, LOOP, MATH, GRID, PRINT, OTHER, OBJECT, SEMAPHORE, UTIL, JSONORMAP, TREE

  }


Figura 7 - Exemplo do código de uma função utilizando alguns elementos da anotação @CronapiMetaData


Mais sobre

As chaves de internacionalização ficam contidas em um arquivo de extensão ".properties". Arquivos desse tipo podem ser utilizados para armazenar parâmetros do tipo string no formato (chave=valor). Para utilização das chaves de internacionalização durante a criação de componentes de software na IDE Cronapp coloca-se a chave desejada entre chaves duplas, como por exemplo: description = "{{functionToQueryInDatasource}}"


Obs.:

As chaves de internacionalização não são fixas e podem ser alteradas ou adicionadas quando necessário. Para saber mais, acesse: Internacionalização


A anotação @ParamMetaData contém os seguintes elementos:

TIpoElementoValor
ObjectTypetype

Tipo do parâmetro

(O tipo do parâmetro é baseado no enum ObjectType)

StringdefaultValueValor padrão adicionado a um parâmetro de entrada de uma função
StringdescriptionChave de internacionalização- Descrição do parâmetro
String[]keysOpções de valores a serem adicionados num parâmetro de entrada do tipo seletor vertical(dropdown). Esse elemento pode receber mais de um valor.
String[]valuesChave de internacionalização: Valores a serem passados para função de acordo com a opção selecionada(keys) no seletor vertical(dropdown) do parâmetro da função. Esse elemento pode receber mais de um valor.

Nesta página



  • Sem rótulos