No Cronapp, os blocos de programação são estruturas visuais que permitem arrastar e acoplar (drag-and-drop) de modo a gerar uma estrutura lógica. Existem centenas de blocos, desde os mais simples, como SE (if
) ou Imprime (print
ou console.log
) até blocos complexos, onde o desenvolvedor só precisa passar os parâmetros e o código embutido no bloco se encarrega de fazer todo o processo, exemplo do Enviar e-mail.
Os blocos são gerados a partir do Blockly, tecnologia criada em 2012 pelo Google e tinha como objetivo inicial facilitar o estudo de programação por crianças. O Cronapp incorporou o blockly de modo a reduzir a curva de aprendizado ao mesmo tempo em que consegue aumentar a produtividade de usuários experientes. Dessa forma, o desenvolvedor praticamente não precisa se preocupar com a sintaxe das linguagens e foca no que é realmente importante: a lógica e regra de negócio do seu projeto.
Esse recurso está disponível tanto no código fonte servidor, quanto no código fonte cliente web e mobile. A Figura 1 apresenta uma função de bloco de programação Servidor e o código Java gerado, já a figura 1.1 mostra uma função bloco de programação cliente (web ou mobile) e o código Javascript gerado.
A subaba Código só fica disponível quando a opção Modo Avançado está habilitada ou ao habilitar a opção Sempre mostrar código fonte na janela de preferências do projeto, acessível a partir do menu do sistema Espaço de Trabalho > Preferências. Para mais informações dessas funcionalidades, acesse o tópico "Espaço de Trabalho" na documentação Tour pelo Cronapp.
Figura 1 - Bloco servidor e o que foi gerado de código Java
Figura 1.1 - Bloco cliente e o que foi gerado de código Javascript
De modo resumido, citamos as principais vantagens em utilizar os blocos de programação no Cronapp:
O editor visual dos blocos de programação costuma gerar outros arquivos além do código fonte. Porém, durante o desenvolvimento só é necessário nos preocuparmos com os arquivos que possuem as extensões *.blockly e *.blockly.js, pois são eles que abrem o editor visual. Os demais arquivos são mantidos e atualizados automaticamente quando salvamos o conteúdo no editor visual (Figura 2.1). Para visualizar as funções contidas em um arquivo de bloco de programação, basta expandir seu conteúdo clicando no símbolo ">" localizado ao lado dos arquivos blockly. Ao fazer isso, as funções serão exibidas em ordem alfabética (destaques 1 da figura 2.1) e com um duplo clique sobre uma dessas funções, é possível abri-la no editor de blocos de programação.
Nas pastas |
Figura 2.1 - Imagem editada para exibir apenas os arquivos gerados a partir do editor blockly
.blockly.
.blockly.js
..blockly.js
.É possível alterar diretamente o código fonte Java ou JavaScript gerado pelo editor blockly, porém essas alterações não serão refletidas nos blocos de programação. Assim, se voltar a utilizar o editor blockly, as alterações feitas diretamente no código fonte serão perdidas. |
Para editar o código de forma High-Code é necessário acessar o arquivo .java ou .js gerado a partir do .blockly ou .blockly.js.
Figura 2.2 - Código Java gerado a partir do Blockly servidor
Figura 2.3 - Código JavaScript gerado a partir do Blockly mobile ou web
Para mais detalhes sobre a organização dos arquivos dos projetos Cronapp, acesse a documentão Estrutura de arquivos.
Essa opção, acessível a partir do botão do menu do sistema (destaque 1 da figura 2.4), tem o objetivo de facilitar o desenvolvimento no Cronapp, ocultando recursos com foco no desenvolvimento high-code. Ao desabilitar o Modo Avançado, o conteúdo da árvore de arquivos é exibido de forma simplificada, os arquivos *.blockly
, *.blockly.js
e *.map
ficam ocultos.
Devido a forma como o conteúdo é organizado e os arquivos ocultos, acessar os blocos de programação e suas funções com o Modo Avançado desabilitado (figura 2.4) é muito mais simples que na figura 2.1. De modo similar, para visualizar as funções contidas em um arquivo de bloco de programação, basta expandir seu conteúdo clicando no símbolo ">" localizado ao lado dos arquivos blockly. Ao fazer isso, as funções serão exibidas em ordem alfabética e, com um duplo clique sobre uma dessas funções, é possível abri-la no editor de blocos de programação.
Figura 2.4 - Arquivos blockly sendo exibidos com a opção Modo Avançado desabilitada
Os projetos Cronapp possuem diretórios específicos para armazenar seus blocos de programação, recomendamos criar subdiretórios de forma a melhorar a organização dos seus arquivos fonte. Alguns diretórios podem ser facilmente acessados a partir dos atalhos na árvore de arquivos.
Figura 3.1 - Acesse o menu de contexto para criar blocos de programação
Para criar um arquivo da sua regra de negócio, clique com no botão "+" ao lado do diretório blockly/ (Bloco de programação/
servidor, mobile ou web) e selecione a opção Bloco de programação para abrir a janela de configurações (Figura 3.1). Essa opção também é acessível a partir do menu de contexto do diretório.
Na primeira janela (Modelo) é possível definir como irá trabalhar:
Após avançar, a segunda janela exibe os campos abaixo:
*.blockly
, *.java
e *.map
(servidor); *.blockly
e *.blockly.js
(cliente);*.java
(servidor), *.blockly.js
(cliente). Após finalizar o passo da Figura 3.1 ou dar um duplo clique nos arquivos com extensão *.blockly
ou *.blockly.js
, será aberta a janela de edição dos blocos de programação. Na Figura 4.1 descrevemos suas partes.
Figura 4.1 - Detalhes da janela do Bloco de programação
Cada arquivo blockly pode conter diversas funções. Para isso, acesse o menu de categorias lateral Funções e arraste para o centro da janela uma das duas opções do bloco Para (Figura 4.2): sem retorno (primeira opção) ou com retorno (segunda opção).
Perceba, no destaque 1 da figura 4.2, que no menu lateral Funções é possível encontrar e arrastar os blocos das funções criadas nesse arquivo. Para alternar entre as funções do bloco, use a caixa de seleção no topo da janela (destaque 2). Ao clicar nessa caixa, as funções desse arquivo serão listadas em ordem alfabética, facilitando a navegação e seleção da função desejada.
Para chamar funções de outras classes, utilize os blocos Chamar bloco servidor assíncrono, Chamar Bloco (com retorno) e Chamar Bloco (sem retorno) no lado cliente ou Chamar Bloco (com retorno) e Chamar bloco (sem retorno) no lado servidor.
Figura 4.2 - Criando outra função dentro do bloco de programação
Na Figura 4.3 vemos um pequeno exemplo de função (AddPronomeTratamento) que possui o seguinte algoritmo:
Figura 4.3 - Exemplo de função
O ícone engrenagem (destaque 1 da figura 4.4) nos blocos de funções (Para) abre uma janela onde é possível arrastar para adicionar ou remover os parâmetros de entrada. Após adicionar os parâmetros à função, você os encontrará na categoria Variáveis do menu lateral (destaque 3).
Os blocos nome de entrada também possuem ícones de configuração (destaque 2), clique para abrir a janela que configura o tipo do parâmetro. Para mais detalhes, acesse Variável.
Figura 4.4 - Passando Parâmetro para uma função
Ao passar uma entidade (objeto) para um bloco como parâmetro, ela é passada por referência e não por valor. O que significa que caso o parâmetro (objeto) seja alterado na função chamada, o objeto será modificado em todas as funções.
No exemplo abaixo, a função ParametroReferencia (Figura 4.6) alimenta uma entidade User na variável "user", imprime no console o campo e-mail desse objeto, em seguida, chama função AlterarEmail passando por parâmetro a variável "user" e, ao final, imprime novamente o mesmo campo e-mail, porém agora o conteúdo do campo está diferente pois foi alterado na função AlterarEmail.
Figura 4.4.1 - Utilizando parâmetro com entidade para alterar um campo na entidade
Esse exemplo funciona apenas com entidades (objetos). Se for passado um texto ou número, será passado como valor e não como referência. |
Cada arquivo *.blockly
ou *.blockly.js
possui uma janela de propriedades que pode ser acessada através do ícone "engrenagem" no lado direito/superior da aba (seta das figuras 4.5 e 4.6). As configurações dessa janela irão afetar todas as funções contidas nesse arquivo.
Uma das propriedades mais importante dessas janelas é o campo Formulário de Referência, que permite que os blocos reconheçam os componentes visuais da página referenciada.
Veremos a diferença entre as propriedades dos blocos cliente e servidor.
Janela com as propriedades do editor de bloco de programação cliente.
Figura 4.5 - Propriedades do bloco de programação cliente
*.blockly.js
.*.blockly.js
.*.blockly.js
a uma página web ou tela mobile (view). O caminho da tela/página exibido nesse campo varia a depender de como a opção Modo Avançado esteja configurado.Janela com as propriedades do editor de bloco de programação servidor.
Figura 4.6 - Propriedades do bloco de programação Servidor
Tempo limite: este parâmetro representa o limite, em segundos, para a conclusão da execução. Uma vez atingido esse limite, a ação é encerrada.
É importante observar que esse período também é influenciado pelo campo "Tempo limite para o Balanceador de carga" nas configurações da aplicação dos Serviços de Cloud. Assim, se os 2 campos estiverem configurados com tempos diferentes, a execução irá parar a partir do campo que possuir o menor tempo. |
Tipo: define como a estrutura de requisições REST será montada:
Interna: permite a personalização dos campos da área "Endereço REST"
Externa: mantém compatibilidade com projetos antigos e não permite alterações nos campos da área "Endereço REST".
*.blockly
a uma página web ou tela mobile (view). O caminho da tela/página exibido nesse campo varia a depender de como a opção Modo Avançado esteja configurado.Atom.
CBOR.
Event Stream.
Form (URL Encoded).
HTML.
Imagem GIP.
Imagem JPEG.
Imagem PNG.
Json.
Markdown.
Multipart (Form).
Multipart (Mixed).
Multipart (Related).
NDJSON.
Octet-Stream.
Pdf.
Problem (JSON).
Problem (XML).
RSS (XML).
Stream (JSON).
Texto.
Todos.
XHTML.
XML.
Configurar endereço REST: permite personalizar o endereço REST da função. É necessário manter a rota inicial ao mudar o endereço, ficando "/api/cronapi/rest/<novo-valor>"
. Exemplo: "/api/cronapi/rest/calculadora
".
Sua estrutura deve seguir algumas convenções da tecnologia Spring, veja mais detalhes nas documentações oficiais (documentação1 e documentação2). Caso a função necessite de parâmetros de entrada, é necessário configurá-los. Acesse o tópico "Parâmetros da função" da Variável. |
Da mesma forma que ocorre com a programação textual, nas funções de bloco de programação a execução ocorre chamando os blocos em uma pilha de execução da esquerda para direita, retorna a pilha (destaque 1 da figura 4.7) e em seguida passa para a próxima linha (2 da figura 4.7).
Figura 4.7 - Exemplo de função e como ocorre sua execução
O processo de depuração (debug ou debugging) permite encontrar erros de sintaxe ou lógica no código fonte durante a execução da aplicação. Esse procedimento pode ser feito de forma tradicional (ver documentação) ou através do Debug visual, onde é possível definir os breakpoints diretamente no bloco que deseja analisar. Atualmente essa funcionalidade só está disponível para os blocos do tipo servidor.
Para que a depuração funcione, é necessário executar os passos abaixo:
Figura 4.8 - Debug Visual em execução com a aba Console do depurador aberta
Breakpoints são pontos de parada para verificar o estado atual da aplicação ou acompanhar o conteúdo de uma determinada variável.
Para adicionar um ponto de interrupção em um bloco, clique com o botão direito do mouse em cima do bloco e selecione a opção Adicionar Ponto de Interrupção (Figura 4.9), após isso você verá um ícone em formato de inserto (bug) representando um ponto de interrupção no bloco selecionado (destaque 2 da figura 4.8).
Para retirar o breakpoint, abra novamente o menu de contexto do bloco com o ícone bug e selecione a opção Remover ponto de interrupção.
Figura 4.9 - Adicionando ponto de interrupção ao bloco
Selecione a aba inferior "Breakpoint" para exibir as funções e as linhas onde estão inseridos os pontos de parada:
Da mesma forma que o bloco de programação fica em destaque quando o código está pausado, no arquivo Java a linha analisada fica em amarelo. À medida que usamos os botões de controle (1 da figura 4.10), os próximos blocos ou linhas serão destacados.
Os pontos vermelhos antes do número da linha representam os breakpoints, assim como na aba inferior de mesmo nome (Figura 4.9).
Figura 4.10 - O destaque em amarelo representa a linha atualmente em depuração
A figura 4.10 mostra a aba inferior Variáveis habilitada, nela são exibidas todas as variáveis da função em execução. Clique no ícone "triângulo" (destaque 2) antes do nome da variável para expandir suas informações.
Ao alterar da aba Visualização para Código (destaque 1 da figura 4.11) será possível visualizar o código Java gerado pelo editor de blocos. Note que na maioria das linhas existe um comentário (em roxo) informando sourceMappingStart + código hash
, ele representa o identificador do bloco, necessário para o mapeamento dos blocos durante o Debug visual.
Figura 4.11 - Na aba Código (inferior) é possível visualizar o código Java e o ID dos blocos
Os identificadores dos blocos de programação são utilizados apenas para controle interno no Cronapp e não são adicionados no arquivo fonte Java, como podemos ver na figura 4.10, são exibidos apenas na aba Código (1 da figura 4.11) do editor de blocos. Os identificadores são referenciados no arquivo *.map
, arquivo que é gerado automaticamente ao criar um arquivo *.blockly
e possui uma lista de objetos que mapeia o ID do bloco com sua respectiva linha do código Java (Figura 4.12).
Figura 4.12 - Arquivo .map mapeia o Id dos blocos com o número da linha no código Java
Se você ainda estiver um pouco confuso com os termos "blocos" ou "função de blocos", tentaremos sanar nesse tópico.
Figura 4.13 - Definição dos termos usados nos blocos de programação
*.blockly
(destaque 2).A quantidade de itens exibido no menu de contexto irá variar com o tipo e o status atual do bloco selecionado. Mostraremos abaixo todas as opções disponíveis.
Figura 4.14 - Menu de contexto do bloco de programação
Quando um bloco é adicionado aos favoritos, ele aparecerá na categoria Favoritos (destaque 1 da figura abaixo) com uma estrela amarela ao lado, gerando uma lista com os blocos mais utilizados durante o desenvolvimento. Para remover o bloco dessa categoria, basta acessar o menu de contexto do bloco (dentro ou fora da categoria Favoritos) e selecionar a opção "Remover Favoritos" (figura 4.15). Os blocos favoritados são vinculados ao workspace do usuário, logo, a lista de blocos favoritos será igual para todos os projetos do mesmo usuário.
Os blocos Cliente (web e mobile) e Servidor são diferentes, ou seja, um bloco adicionado aos favoritos do tipo Cliente, não irá aparecer no Servidor e vice-versa. |
Figura 4.15 - Remoção de um bloco da categoria Favoritos
Adiciona o ícone "?" no bloco de programação, ao clicar, um balão é exibido para inserir um comentário sobre o bloco no código fonte.
Para adicionar comentários visíveis a partir da função de bloco, utilize o bloco Comentário (Servidor e Cliente). |
A figura 4.16 apresenta os locais onde é possível adicionar comentários, já a figura 4.17 aponta onde esses comentários são refletidos no código gerado pela função. Esse recurso funciona de forma similar para os blocos clientes (JavaScript) e servidor (Java).
Figura 4.16 - Caixas de comentários dos blocos de programação
Figura 4.17 - Locais no código onde são exibidos os comentários
As opções Adicionar e Remover ponto de interrupção permite incluir ou retirar breakpoints para utilizar o Debug visual, o ícone bug será exibido sobre o bloco selecionado.
Figura 4.18 - Blocos com e sem breakpoint
Permite comprimir o bloco selecionado e todos os blocos acoplados a ele. Após colapsar, acesse novamente o menu de contexto do bloco comprimido para exibir a opção Expandir bloco. Essa opção também é acionada ao dar um duplo clique sobre bloco.
O colapsar de blocos não interferem em nada no algoritmo, apenas reduz o tamanho dos blocos na função, melhorando a sua legibilidade.
Figura 4.19 - A função possui 2 blocos "se", um colapsado e o outro não
Essa opção está disponível nos menus de contextos dos blocos de função ou blocos de variáveis (acesse o tópico "Obter bloco complementar" em Variável).
Nos blocos de função é possível criar um bloco que executa o próprio bloco ou criar um bloco de variável com o parâmetro da função. A chamada da função também pode ser obtida na categoria Funções, já as variáveis de parâmetros também podem ser obtidas a partir da categoria Variáveis (destaque 4 da figura 4.1).
Figura 4.20 - Gerando blocos de chamada da função e dos parâmetros da função
Deleta o bloco selecionado e todos os blocos acoplados a ele. Se existir blocos acoplados, o menu de contexto exibirá a quantidade de blocos que serão excluídos.
Figura 4.21 - A opção Deletar apaga todos os blocos acoplados a ele
Blocos desabilitados não são executados ao rodar a aplicação. Ficam disponíveis, porém desabilitados no arquivo .blockly
e não são gerados no código fonte.
Figura 4.22 - O segundo bloco "se" não será visualizado no código fonte
Essa opção desencaixa o bloco selecionado e todos os blocos acoplados a ele. Equivalente a pressionar a tecla CTRL, clicar sobre um bloco e arrastar.
Figura 4.23 - Retira o bloco selecionado da sequência
Faz uma cópia do bloco selecionado e todos os blocos acoplados a ele.
Figura 4.24 - Duplicação do bloco "se"
Essa opção está disponível para os blocos de função, com ou sem retorno. Ela permite que, após a criação de uma função, seja possível adicionar ou remover o encaixe de retorno da função. Na figura 4.25, a função Executar foi criada com retorno e, após clicar na opção Remover retorno, do menu de contexto, o retorno da função é removido (Figura 4.26) e o bloco de chamada na categoria Funções também é alterado (destaque 1 da Figura 4.26).
Figura 4.25 - Bloco função com retorno
Figura 4.26 - Bloco função sem retorno
Essa opção permite alterar o formato do bloco de programação, possibilitando melhorar a legibilidade da função. A opção Entrada externa exibe seus parâmetros na vertical, enquanto a opção Incorporada exibe os parâmetros na horizontal.
Figura 4.27 - Os 2 blocos "inserir" possuem o mesmo comportamento
Essa opção só está disponível para alguns blocos que possuem retorno. Ela permite executar a função e ignorar o seu retorno. Na figura abaixo, os 2 blocos Imprimir realizam a mesma ação, porém o segundo não retorna nada.
Figura 4.28 - O menu de contexto informa se o bloco exibe ou não o retorno
Abre uma nova guia no seu navegador com a documentação do bloco selecionado.
Essas opções somente serão exibidas ao clicar na área de trabalho do editor de bloco (fundo preto pontilhado). Elas equivalem a utilizar os botões CTRL + Z
e CTRL + Y
, desfazendo uma ação e refazendo em seguida.
Figura 4.29 - Opções Desfazer e Refazer
Essa opção só será exibida ao clicar na área de trabalho do editor de bloco (fundo preto pontilhado). Ao selecionar, todos os blocos que estiverem desacoplados fora da função serão alinhados.
Figura 4.30 - Opção para organizar blocos espalhados
Neste tópico mostraremos algumas dicas e informações para ajudar em sua produtividade enquanto trabalha no editor de blocos.
Para obter uma breve descrição do bloco antes de selecioná-lo, repouse o cursor do mouse sobre ele para estender uma aba com as seguintes informações:
Figura 5.1 - Menu estendido com a descrição do bloco selecionado
Deixe o cursor do mouse parado sobre um bloco na área de edição para exibir sua descrição em um tooltip.
Figura 5.2 - Tooltip de descrição do bloco
Diversos blocos possuem esse ícone, ao clicar, uma janela é aberta para permitir realizar alguma configuração no bloco selecionado. O conteúdo da janela varia com o tipo de bloco selecionado.
Figura 5.3 - Ícone engrenagem do bloco Inserir (Banco de dados)
Se uma função possui uma sequência de blocos empilhados e você arrasta um dos blocos do meio, todos os blocos abaixo do selecionado serão arrastados juntos. Porém, ao realizar a mesma ação com o botão CTRL
ou ALT
pressionado, somente o bloco selecionado será desacoplado.
Na primeira parte da figura abaixo (direita), o bloco inserir foi arrastado e o bloco Imprimir foi removido junto, já no lado esquerdo da mesma figura, o bloco Inserir foi arrastado com o botão CTRL
pressionado, e somente ele foi desacoplado.
Figura 5.4 - Desacoplamento de blocos intermediários
Alguns blocos possuem parâmetros com características diferentes da maioria dos blocos, veremos aqui algumas delas.
Blocos com esse tipo de parâmetro permitem adicionar trechos de blocos (códigos) para serem executados junto com a função chamada.
Na figura abaixo vemos que primeiro parâmetro (destaque 1 da figura 5.5) do bloco Agendar Execução permite adicionar uma sequência de outros blocos.
Figura 5.5 - Parâmetro de comandos
Alguns blocos possuem opções limitadas para um parâmetro, nesses casos é exibido uma caixa de seleção com as opções possíveis.
Figura 5.6 - Parâmetro com limite de opções
O Cronapp possui uma funcionalidade para Gerar documentação dos recursos desenvolvidos na plataforma, dentre elas, os blocos de programações Servidor e Cliente. Essas documentações dos blocos são gerados a partir de tags nos comentários adicionadas no código fonte dos blocos de programação. Por padrão, você não precisa se preocupar com as tags se estiver desenvolvendo em Low code, pois são geradas automaticamente, mas caso precise, ao ativar o Modo Avançado, poderá também incluir as tags do javadoc (para Servidor) e jsdoc (para cliente) no modo High code. Abaixo (Destaque da figura 5.7), segue um exemplo da inserção de uma tag no código de um bloco servidor.
Figura 5.7- Inserindo tag javadoc na doc do bloco Servidor
Exemplo tags Servidor:
@see @throws |
Exemplo tags Cliente:
@see @global @implements |
A partir da versão 2.6 do Cronapp, os blocos de programação clientes (web e mobile) funcionam de forma assíncrona. Se o seu projeto foi criado após essa versão, não é necessário realizar nenhuma ação. Porém, projetos criados antes dessa versão e migrados posteriormente, precisam atualizar os arquivos de blocos de programação.
Para atualizar, basta abrir os arquivos de blocos cliente, realizar qualquer modificação (arrastar o bloco função, por exemplo) e salvar. Após isso, o Cronapp converterá todas as funções contidas nessa classe em assíncrona.
Figura 6.1 - Arraste um bloco e salve para atualizar todas as funções do arquivo
Esse procedimento desse ser realizado nos blocos cliente (web e mobile).
As alterações só serão percebidas através do código JavaScript (necessário habilitar o Modo Avançado). Por isso, acesse a aba inferior Código (destaque 1 da figura abaixo) e verifique que antes de cada função criada teremos agora a palavra-chave async
(destaque 2), já a palavra-chave await
(3) será usada na chamada de outras funções.
Figura 6.2 - Atualizações das funções assíncronas
O editor de blocos permite criar funções para gerar blocos de programação acessíveis na lista de categorias em qualquer arquivo blockly dentro do projeto, juntamente com os blocos padrões do Cronapp. Esse recurso pode substituir o uso do bloco Chamar bloco, com a vantagem de permitir criar uma categoria personalizada com todas as suas funções convertidas em blocos, apresentando de forma amigável os nomes dos blocos, parâmetros, descrições e a possibilidade de linkar com uma documentação própria.
Esse recurso é útil para a criação de blocos de programação simples, para blocos mais complexos, que necessitam de callback ou parâmetros personalizados, ainda será necessário seu desenvolvimento de forma high-code. Veja mais detalhes nas documentações abaixo:
O exemplo da figura 7 apresenta uma função cliente (Javascript) de bloco com o nome "Div" que possui 2 parâmetros: "num1" e "num2".
Utilizamos os comentários dos parâmetros (destaque 1 da figura 7) e da função (2) para renomear e descrever esses elementos. Isso pode ser feito utilizando o caractere dois pontos ":" para separar o nome do bloco ou parâmetro e a descrição do bloco ou parâmetro. Com isso, é possível criar nomes mais legíveis com acentos e espaços. Caso não utilize os comentários, o bloco será criado com os nomes originais.
Figura 7 - Função e parâmetros com seus comentários
Acesse a janela de Propriedades do bloco de programação (seta da figura 7.1) para habilitar a opção que irá exibir todas as funções criadas nesse arquivo na lista de categorias do editor blockly.
Figura 7.1 - Habilitando a opção de exibir as funções como blocos
A figura 7.2 apresenta um editor de bloco de programação servidor listando uma categoria contendo um bloco criado a partir do editor de bloco cliente.
Figura 7.2 - Nova categoria e blocos de programação
Nesta página
Conteúdo complementar
Além das centenas de blocos de programação (servidor e clientes) existentes no Cronapp, também é possível criar seus próprios blocos customizados, acesse o tópico e documentações abaixo para mais detalhes:
A partir da versão 2.6, os blocos de programação clientes (web e mobile) funcionarão de forma assíncrona. Assim, caso você tenha criado um projeto em uma versão anterior e migrado para a nova versão, será necessário atualizar os blocos de programação clientes. Não é necessário realizar nenhuma ação para projetos criados após essa versão. Acesse o tópico Blocos assíncronos para mais detalhes. |