Baixe o app para aproveitar ainda mais
Prévia do material em texto
ADIANTI STUDIO PROFESSIONAL Versão 5.5 ou superior PABLO DALL'OGLIO Sumário 1 Introdução..................................................................................................................................7 1.1 Organização da interface...............................................................................................7 1.2 Visão geral dos menus....................................................................................................8 1.3 Preferências...................................................................................................................11 1.4 Gerenciamento de projetos.........................................................................................11 1.5 Gerenciamento de bancos de dados.........................................................................13 2 Criação do projeto..................................................................................................................15 2.1 Visão geral......................................................................................................................15 2.2 Cadastro do projeto......................................................................................................16 2.3 Cadastro da base de dados.........................................................................................17 2.4 Criação das classes modelo.........................................................................................18 2.5 Conversão de UML para SQL.......................................................................................20 2.6 Conversão de UML para PHP......................................................................................24 3 Criação de Páginas..................................................................................................................27 3.1 Páginas com HTML........................................................................................................27 3.2 Páginas com PDF...........................................................................................................27 3.3 Páginas com conteúdo externo..................................................................................28 3.4 Janela com HTML...........................................................................................................29 3.5 Janela com PDF..............................................................................................................29 3.6 Janela com conteúdo externo.....................................................................................30 4 Criação de Formulários..........................................................................................................31 4.1 Formulários de cadastro..............................................................................................31 4.2 Formulários de consulta..............................................................................................34 4.3 Formulários de cadastro auxiliar................................................................................36 4.4 Formulário vetorial.......................................................................................................39 4.5 Formulário mestre/detalhe.........................................................................................42 4.6 Formulário consulta mestre/detalhe.........................................................................45 5 Criação de Listagens...............................................................................................................49 5.1 Listagens de registros...................................................................................................49 5.2 Relatório tabular...........................................................................................................52 5.3 Lista de seleção de registros.......................................................................................55 5.4 Lista de edição de registros.........................................................................................58 Adianti Studio Professional 3 6 REST Services...........................................................................................................................63 6.1 Habilitando o servidor REST........................................................................................63 6.2 Criando uma classe de serviço REST..........................................................................63 6.3 Consumindo um serviço REST.....................................................................................64 7 Studio Form Designer.............................................................................................................66 7.1 Visão Geral.....................................................................................................................66 7.2 Criando controladores.................................................................................................73 7.3 Integrando com banco de dados................................................................................86 8 Studio PDF Designer...............................................................................................................96 8.1 Visão geral......................................................................................................................96 8.2 Formas e textos.............................................................................................................99 8.3 Relatórios.....................................................................................................................103 8.4 Nota fiscal....................................................................................................................105 Dedicatória Dedico esta obra a todos aqueles que acreditam no meu trabalho e me motivam a continuar criando soluções e escrevendo livros. Obrigado do fundo do coração. Eu respondo e guardo cada e-mail de vocês com muita felicidade. Mensagem Este manual cobre somente o Adianti Studio. Para o Adianti Framework, não deixe de conferir o livro completo sobre a obra: www.adianti.com.br/bkframe http://www.adianti.com.br/bkframe Agradecimentos Agradeço primeiramente a Deus, que tem me dado força todos os dias para cumprir minha missão pessoal, que eu acredito ser construir e ensinar. Nesse sentido, tenho me empenhado em construir ferramentas que possam não apenas auxiliar em meus projetos, mas que também possam auxiliar pessoas como você. Em segundo lugar, agradeço a minha esposa por compreender minha atuação profissional e minhas madrugadas de programação; por me amar incondicionalmente. Também agradeço aos meus pais e meus avós pela educação e por apostarem em mim, e minha irmã por estar sempre ao meu lado. E aos meus amigos, que não são muitos, mas são ver- dadeiros irmãos pois sei que sempre posso contar com eles. Apresentação Ao utilizarmos um framework para desenvolvimento de sistemas, ganhamos unifor- midade no código-fonte, maior qualidade e padronização. Para agilizar ainda mais o desenvolvimento de aplicações foi desenvolvida a ferramenta Adianti Studio Pro, uma IDE para desenvolvimento de sistemas que automatiza a criação do código-fonte vol- tado ao Adianti Framework, tornando muito mais ágil o desenvolvimento de novos sistemas. 1 INTRODUÇÃO CAPÍTULO 1 Introdução Neste capítulo conheceremos a interface do Adianti Studio, bem como suas funções básicas de edição. 1.1 Organização da interface O Adianti Studio é uma IDE multiplataforma para desenvolvimento de sistemas que conta com uma série de características, dentre as quais podem ser destacadas: auto- complete para PHP e para os métodos de classes do projeto, sintaxe colorida, compa- ração gráfica de arquivos, bookmarks, possibilidade de criação de plugins, integração com subversion, dentre outras. Na figura a seguir podemos conferir a tela inicial do AdiantiStudio Pro. Veja a seguir, o significado de cada item: B Barra de ferramentas padrão: contém as principais funcionalidades da fer- ramenta, tais como: novo, abrir, salvar, identar, aplicar plugin, sair, etc; C Barra de ferramentas Adianti: contém as funções da versão “pro”, que agili- zam o processo de criação de novas aplicações; D Barra de plugins: disponibiliza os plugins criados na ferramenta para aplica- ção rápida sobre o arquivo e/ou projeto que está aberto; E Barra de favoritos: permite abrir rapidamente um arquivo favorito, bem como acrescentar um arquivo na barra de favoritos; F Árvore do projeto: área de navegação, onde são listadas as pastas e arquivos do projeto para abertura. Na segunda aba, temos uma lista de métodos da classe ativa; e na terceira, uma lista de bases de dados cadastradas; G Área de edição: área de edição do arquivo, contendo uma aba por arquivo. Adianti Studio Professional 8 Figura 1 Tela inicial do Adianti Studio Pro 1.2 Visão geral dos menus Como pode ser visto na figura a seguir, no menu “Arquivo”, temos opções tradicionais para a manipulação de arquivos. Na opção “Novo”, temos a possibilidade de criar um arquivo vazio PHP, um novo “Projeto de desenvolvimento” genérico em PHP, ou uma “Conexão de banco de dados”. Em seguida, temos opções como: “Abrir”, “Salvar” e “Salvar como”. Neste menu, também temos a opção “Comparar”, que permite compa- rar graficamente o arquivo aberto com um outro arquivo, “Exportar para PDF”, que exporta o código-fonte em PDF e “Salvar Área de Trabalho”, que memoriza os arqui- vos abertos. Figura 2 Menu Arquivo do Adianti Studio Pro Adianti Studio Professional 9 No menu “Editar” temos as opções tradicionais de edição, como “Desfazer”, “Refazer”, “Recortar”, “Copiar” e “Colar”, bem como suas respectivas teclas de atalho. Também temos as opções: “Apagar linha”, que exclui a linha atual; “Excluir modo colunas”, que exclui blocos verticais de texto; “Mesclar linhas”, que mescla a linha atual com a se- guinte; “Encontra chaves”, que encontra as chaves correspondentes; opções de co- mentário de código e de indentação como: “Aumentar recuo” e “Diminuir o recuo”. Figura 3 Menu Editar do Adianti Studio Pro O menu “Procurar” disponibiliza opções como: “Localizar”, que localiza uma palavra no arquivo; “Localizar próximo”, que localiza a próxima ocorrência; “Localizar ante- rior”, que localiza a ocorrência anterior; “Localizar e substituir” que substitui as ocor- rências de um termo. A opção “Localizar arquivos” localizará arquivos com determi- nado nome e “Localizar em arquivos”, irá busca um termo nos arquivos do projeto. Figura 4 Menu Procurar do Adianti Studio Pro Adianti Studio Professional 10 O menu “Exibir” possui opções como: “Tela cheia”, que esconde algumas barras e co- loca o editor ocupando toda a tela; “Árvore de arquivos”, que exibe/esconde a árvore de arquivos; e várias opções utilizadas para exibir/esconder sua respectiva barra de ferramentas como: “Barra de ferramentas”, “Barra de ferramentas Adianti”, “Barra de plugins” e “Barra de favoritos”. Ainda temos opções para navegação entre abas. Figura 5 Menu Exibir do Adianti Studio Pro O menu “Ferramentas” possui opções como: “Preferências”, que permite configurar as preferências do ambiente; “Projetos de desenvolvimento”, que cadastrará os proje- tos a serem abertos na árvore de navegação; “Conexões de banco de dados”, que per- mitirá cadastrarmos bases de dados para navegação. Também temos utilitários como captura de cores, calendário, editor de anotações e um verificador de sintaxe, que apontará possíveis erros antes da aplicação rodar em produção. Figura 6 Menu Ferramentas do Adianti Studio Pro Adianti Studio Professional 11 1.3 Preferências Na janela de preferências, que pode ser vista na figura a seguir, podemos configurar algumas características de uso do Adianti Studio. Na seção “Visualização”, pode-se configurar: a exibição ou não da numeração em frente das linhas; o destaque ou não do fundo da linha na qual está o cursor; o destaque de parêntesis correspondentes, como em expressões lógicas; a exibição de uma linha representando a margem direi- ta na edição; o idioma da interface, que é alterado após reinicialização do Studio; e também a posição da árvore de arquivos (esquerda ou direita) em relação à área de edição de arquivos. Na seção “Editor”, podemos habilitar ou desabilitar itens como: indentação auto- mática, que ocorre ao inicializarmos novas linhas após abertura de chaves; a inserção de espaços em branco no lugar de tabulações; o autocomplete durante a digitação (sem a necessidade de teclar CTRL+Space); e o fechamento automático de chaves durante a abertura das mesmas. Além disso, é possível configurar a fonte do editor, o tamanho das tabulações (em espaços), e a quantidade de níveis da opção “Desfazer”. Na seção programas, é importante configurar o caminho onde o binário do PHP está instalado. Este caminho é utilizado pela opção de verificação de sintaxe. Figura 7 Janela de preferências do Adianti Studio Pro 1.4 Gerenciamento de projetos Na janela de gerenciamento de projetos, que pode ser acessada por meio do menu “Ferramentas”, podemos editar ou excluir os projetos de desenvolvimento existentes, bem como criar novos. Como podemos ver na figura a seguir, inicialmente a janela de projetos permite-nos listar os projetos existentes. A partir desta janela, pode-se cri- Adianti Studio Professional 12 ar um projeto por meio do botão “Novo”; editar um projeto existente, por meio do botão “Editar”; e excluir um projeto, por meio do botão “Excluir”. Ao criarmos um projeto, deveremos preencher seu nome, sua localização e as pastas nas quais estão localizadas as classes do sistema. O Studio utilizará estas pastas para varrer a estrutu- ra do projeto e armazenar a sua estrutura em memória (banco de dados sqlite), para permitir posterior autocomplete durante a digitação de métodos e classes. Obs: O botão “Interpretar código” permite atualizar a estrutura do projeto (classes e méto- dos) em memória. Esta estrutura também é salva após a alteração de um arquivo do projeto. Entretanto, é importante atualizarmos a estrutura do projeto em memória com alterações re- alizadas por outros desenvolvedores, com alguma periodicidade. Figura 8 Janela de edição de projetos Os projetos existentes podem ser acessados por meio da árvore de navegação, em destaque na figura a seguir. Ao selecionarmos um projeto, seus arquivos e diretórios são carregados na árvore para edição. Figura 9 Menu de seleção de projetos Adianti Studio Professional 13 1.5 Gerenciamento de bancos de dados Na janela de gerenciamento de bancos de dados, que pode ser acessada por meio do menu “Ferramentas”, podemos editar ou excluir conexões de bancos de dados. Como podemos ver na figura a seguir, inicialmente a janela permite-nos listar os bancos de dados existentes. A partir desta janela, pode-se criar uma conexão com um banco de dados por meio do botão “Novo”, editar uma conexão existente por meio do botão “Editar”, excluir uma conexão por meio do botão “Excluir”, ou testar a conexão com um banco já cadastrado por meio do botão “Testar”. A seguir, podemos visualizar o formulário de registro de uma nova conexão com a base de dados. Figura 10 Janela de edição de bancos de dados Os bancos de dados existentes são exibidos em uma lista na área de navegação (ter- ceira aba). Após, selecionarmos uma base de dados a partir da lista, o Studio exibirá as tabelas da base de dados na forma de uma lista para seleção. Figura 11 Área de navegação de bancos de dados Adianti Studio Professional 14 A partir do momento em que o usuário clicar sobre o nome de uma tabela, será aberta uma janela de edição, como pode ser visto na figura a seguir. Nesta janela, po- deremos realizar filtros sobre os registros da tabela, por meio do botão “Procurar”, bem como editar os registros da tabela, simplesmente clicando sobre os mesmos. Para que seja possível editarmos os registros de uma tabela, é precisoque a mesma tenha as chaves primárias registradas no banco de dados. Também podemos excluir registros, bem como criar registros na tabela. Figura 12 Janela de navegação de tabela 2 CRIAÇÃO DO PROJETO CAPÍTULO 2 Criação do Projeto Neste capítulo abordaremos como se dá a criação de um projeto novo utili- zando o Adianti Framework. 2.1 Visão geral O Adianti Studio Pro adiciona um conjunto de funcionalidades em relação ao Adi- anti Studio Standard. Estas funcionalidades são voltadas a dar maior agilidade no desenvolvimento de aplicações desenvolvidas para o Adianti Framework. Na figura a seguir, podemos ver em destaque a barra de ferramentas Adianti. Esta barra de ferra- mentas contém algumas funcionalidades voltadas para agilizar a criação de aplica- ções Adianti Framework. Dentre as funcionalidades, podem ser destacadas a geração automática das classes de modelo e de páginas, baseadas em wizards. Figura 13 Barra de ferramentas de geração de código no Adianti Studio Pro Adianti Studio Professional 16 2.2 Cadastro do projeto Para iniciar um novo projeto, podemos utilizar o menu “Projeto”, da barra de ferra- mentas Adianti. Este menu possui as opções: “Novo Projeto Adianti”, que permite a criação de um novo projeto de aplicação usando o Adianti Framework, e “Novo Pro- jeto Genérico”, que permite a criação de um projeto qualquer em PHP. A opção “Ge- renciar projetos” aciona a janela de gerenciamento (lista) de projetos. Figura 14 Menu de opções para criação de novos projetos Quando acessada a opção “Novo Projeto Adianti”, uma nova janela será exibida, tal qual representada na próxima figura. Por meio dessa janela, podemos criar projetos dentro do Studio. Para criar um projeto basta preencher seu nome, responder se dese- ja copiar a estrutura do framework para dentro da pasta do projeto, escolher a base de código para criação do projeto (Framework puro, Template 1, 2, 3 ou 4) e selecio- nar a pasta do projeto (que poderá ser criada neste momento). Figura 15 Janela de criação de novo projeto Adianti Framework Obs: Você pode usar esse diálogo para registrar projetos já existentes. Nestes casos, basta des- ligar a opção “Copiar estrutura do framework”. Adianti Studio Professional 17 A partir da seleção da pasta, a ferramenta já sugere e preenche automaticamente o campo “Pasta das classes”, com os caminhos padronizados, utilizados pelo Adianti Framework. A partir deste momento, o Studio irá ler os diretórios do projeto para “conhecer” a estrutura das classes envolvidas. Mesmo que no início só tenhamos classes do framework, o Studio memorizará estas estruturas para autocomplete. 2.3 Cadastro da base de dados A partir do momento em que criamos o projeto, o mesmo deverá ser exibido na lista de projetos, localizada na área de navegação de arquivos. Então, é o momento regis- trarmos uma base de dados existente. Conforme pode ser visto na figura a seguir, na barra de ferramentas Adianti temos a opção “Registrar uma base de dados”, que nos permite criar um arquivo de configuração para acessar uma base de dados existente. Figura 16 Menu de opções para registro de uma nova base de dados Ao acessarmos esta opção, será aberta uma janela com os parâmetros para conexão com a base de dados. Basta preenchermos, escolhendo o tipo de banco de dados (postgres, mysql, sqlite, etc.), ao final. No momento em que clicarmos sobre o botão “Salvar”, será gerado um arquivo de conexão com a base de dados. Ao final, basta sal- varmos o arquivo gerado na pasta app/config, com o nome desejado da conexão. Figura 17 Janela para registro de um novo banco de dados A seguir, o resultado gerado. É importante lembrar que o arquivo gerado deve ser sal- vo na pasta app/config, com a extensão .ini, para ser acessado pela aplicação. Adianti Studio Professional 18 app/config/teste.ini host = 127.0.0.1 port = 5432 name = exemplos user = postgres pass = teste type = pgsql Obs: É importante que o nome do arquivo de conexão com a base de dados tenha sentido, uma vez que utilizaremos o mesmo dentro da aplicação, sempre que precisarmos abrir uma transação com a base de dados. 2.4 Criação das classes modelo Classes de modelo são classes que representam as entidades da aplicação. Analisando de modo simplista, teremos uma classe de modelo para cada tabela. Mas isto não é uma regra, visto que é comum uma classe gerenciar mais de uma tabela ao mesmo tempo em relacionamentos como composição, agregação, e herança. O Adianti Studio Pro permite a geração automática das classes de modelo da aplica- ção por meio de um assistente. Este assistente pode ser acessado pela opção “Criar classe para entidade”. Esta opção abre um assistente passo a passo que permite o usuário gerar a classe de modelo de maneira automatizada, cadastrando os relacio- namentos entre as classes por meio da interface. Figura 18 Menu de opções para criação de novo modelo a partir de assistente Ao acionarmos a opção “Criar classe para entidade”, a janela do assistente será exibi- da na tela. A partir desse momento, o usuário deverá selecionar a base de dados do projeto sobre a qual ele deseja criar a classe, bem como a tabela que será manipulada pela classe, a partir de uma lista de tabelas daquela base de dados. Então, deverá ser selecionado qual o campo de chave primária (neste exemplo id), e definir o nome da classe que será gerada (que é automaticamente recomendado). Ao final, deverá ser selecionado o tipo de geração de chaves, o tipo de modelo (pa- drão ou completo) e o padrão das chaves estrangeiras. O padrão das chaves estrangei- ras define como serão nomeados os campos criados para relacionar as tabelas a par- tir dos relacionamentos do modelo de classes. Já o gerador de chaves define como o Adianti Studio Professional 19 campo de chave primária será incrementado, a partir de um novo registro. Neste caso, temos duas opções: ❏ Max: obtém o último ID e incrementa em uma unidade; ❏ Serial: não informa o ID na inserção, deixando a base de dados utilizar o va- lor default. Figura 19 Assistente de geração de modelos – Definição de parâmetros Após a primeira tela do assistente para criação de modelos, ao clicarmos no botão “Próxima página” prosseguimos para a tela representada na figura a seguir. Nesta ja- nela, podemos cadastrar vários relacionamentos entre a classe que estamos criando e outras classes do sistema. Podemos registrar relacionamentos de Associação, Agrega- ção e Composição entre as classes. Figura 20 Assistente de geração de modelos – definição de relacionamentos Adianti Studio Professional 20 A partir do momento em que cadastramos os relacionamentos entre as classes, pode- mos clicar no botão “Salvar”. Assim, o Studio gerará o código-fonte completo da clas- se modelo. No exemplo a seguir, foi copiada somente a estrutura dos métodos gera- dos por esse exemplo, não o código completo. Neste caso, o Studio gerou métodos de associação como set_category(), agregação como addSkill() e também sobre- carregou métodos como store(), load(), e delete(). Estrutura da classe de modelo gerada <?php class Book extends TRecord { const TABLENAME = 'book'; const PRIMARYKEY= 'id'; const IDPOLICY = 'max'; // {max, serial} private $category; private $skills; private $contacts; public function set_category(Category $object) public function get_category() public function addSkill(Skill $object) public function getSkills() public function addContact(Contact $object) public function getContacts() public function load($id) public function store() public function delete($id = NULL) } 2.5 Conversão de UML para SQL O Studio oferece uma ferramenta que cria o banco de dados automaticamente a par- tir do modelo UML (formato XMI). Dentro do menu “Dados” da barra de ferramen- tas Adianti, temos a opção “Converter UML para SQL”, que nos permite criar um modelo relacional por meio da linguagem SQL, a partir de um modelo de classes. Figura 21 Menu Converter UMLpara SQL Adianti Studio Professional 21 Modelos de classe são armazenados em arquivos do tipo XMI (XML Metadata Inter- change), que são arquivos XML utilizados para representar modelos de projeto de software orientados a objetos. Arquivos XMI podem ser gerados por ferramentas de modelagem conhecidas como: ArgoUML, Astah, Rational Rose, StarUML, Umbrello, dentre outros. Na figura a seguir, temos a representação de um modelo de classes dentro da ferramenta StarUML. Este modelo, pode ser exportado para o formato XMI e posteriormente importando pelo Adianti Studio Pro para a criação da base. Figura 22 Modelo de classes na ferramenta StarUML A partir do momento em que clicamos sobre o botão “Converter UML para SQL” do menu “Dados”, um diálogo de seleção de arquivos é aberto. Então, podemos selecio- nar o arquivo no formato XMI para a criação do banco de dados, conforme pode ser visto na figura a seguir. Figura 23 Conversão do modelo XMI em SQL – Localização do arquivo A partir do momento em que selecionamos o arquivo XMI e clicamos em “Abrir”, uma nova janela será aberta. Nesta janela, podemos definir o padrão a ser utilizado para a criação dos campos de chave estrangeira, cujo padrão é id_<class>. Além Adianti Studio Professional 22 disso, selecionamos o tipo de banco de dados destino (PostgreSQL, MySQL, SQLite, etc), bem como o tipo de chave primária gerada (MAX, SERIAL). A escolha do banco de dados influenciará as instruções SQL geradas para a criação da base de dados (CREATE TABLE), uma vez que cada banco de dados tem as suas peculiaridades. A partir do preenchimento das definições, podemos clicar no botão “Próxima página”, para seguir com o procedimento. Figura 24 Conversão do modelo XMI em SQL – Configurações gerais Na etapa seguinte, da importação do arquivo XMI, o Studio detecta as classes pre- sentes no modelo e solicita quais desejamos importar para SQL. Figura 25 Conversão do modelo XMI em SQL – Escolha das classes Na etapa seguinte da importação do arquivo XMI, o Studio detecta os tipos de dados do modelo de objetos e solicita o tipo correspondente no modelo SQL. Este mapea- mento é importante, uma vez que no modelo orientado a objetos, os tipos de dados são relativos à linguagem de programação, e não à base de dados. Nesta tela, algumas sugestões são realizadas. Devemos ter certeza que a segunda coluna contenha tipos de dados válidos para o banco de dados utilizado. Adianti Studio Professional 23 Figura 26 Conversão do modelo XMI em SQL – Conversões de tipo A partir do momento em que realizamos o correto mapeamento dos tipos de dados encontrados no modelo de objetos em relação ao banco de dados, podemos clicar no botão “Salvar”. A partir deste momento, o Studio gerará as instruções SQL necessárias para criar a base de dados, conforme o modelo XMI. No arquivo a seguir, temos um pequeno trecho representando um arquivo SQL, resultante deste processo. Obs: O Studio gera todas as chaves primárias e estrangeiras, bem como tabelas associativas necessárias para representar os relacionamentos do modelo orientado a objetos. arquivo.sql CREATE TABLE category( id INTEGER PRIMARY KEY NOT NULL, name TEXT ); CREATE TABLE city( id INTEGER PRIMARY KEY NOT NULL, name TEXT ); CREATE TABLE customer( id INTEGER PRIMARY KEY NOT NULL, name TEXT, address TEXT, phone TEXT, birthdate DATE, status CHAR(1), email TEXT, gender CHAR(1), category_id INTEGER NOT NULL, city_id INTEGER NOT NULL, FOREIGN KEY(city_id) REFERENCES city(id), FOREIGN KEY(category_id) REFERENCES category(id) ); ... Obs: A partir do momento em que temos as instruções SQL necessárias para criação do banco de dados, basta rodar estas instruções no SGBD, ou mesmo na linha de comando por meio de utilitários como: psql, mysql ou sqlite3. Adianti Studio Professional 24 2.6 Conversão de UML para PHP O Adianti Studio Pro permite também criar todo o código-fonte das classes de mode- lo a partir de um modelo de classes UML no formato XMI. Para tal, basta utilizarmos a opção “Converter UML para classes”, presente no menu “Dados” da barra de ferra- mentas, como pode ser visto na figura a seguir. Figura 27 Menu Converter UML para Classes Conforme pode ser visto na figura a seguir, a partir do momento em que seleciona- mos a opção “A partir de um modelo XMI”, um diálogo de seleção de arquivos será aberto, para que possamos selecionar o arquivo XMI. Figura 28 Geração do modelo a partir do XMI – Localização do arquivo Após localizarmos o arquivo XMI, podemos clicar no botão Abrir. Neste momento, uma nova janela será aberta, onde o usuário irá preencher basicamente as seguintes opções: ❏ Gerador de chaves: se as classes utilizarão gerador max ou serial; ❏ Padrão de chave estrangeira: como é o padrão de nome para campos de chave estrangeira que relacionam as tabelas no banco de dados; ❏ Tipo de modelo: código-fonte resumido (padrão) ou completo. Adianti Studio Professional 25 Figura 29 Geração do modelo a partir do XMI – Definição de parâmetros Em seguida, o Studio identificará quais são as classes presentes no modelo XMI e so- licitar quais desejamos importar. Figura 30 Geração do modelo a partir do XMI – Escolha das classes A partir do momento em que clicamos no botão “Salvar”, o Studio procederá com a leitura do arquivo XMI e, para cada classe nele encontrada, gerará um novo arquivo de modelo. Se o arquivo XMI tiver várias classes, o Studio abrirá diversas abas em memória com o conteúdo das classes modelo geradas. O Studio gerará todo o código necessário para a persistência dos objetos em si, bem como de seus relacionamentos. Para tal, serão criados métodos para associação, agre- gação e composição de objetos. Além disso, métodos-padrão como: load(), dele- te() e store() são sobrecarregados para persistir os relacionamentos juntamente aos objetos. Após a geração das classes em memória, cada arquivo deve ser salvo indi- vidualmente na pasta app/model. Adianti Studio Professional 26 Figura 31 Geração do modelo a partir do XMI – Exemplo de código gerado Obs: Caso o modelo de classes tenha outros métodos definidos pelo usuário, o Studio gera- rá a estrutura básica (declaração) destes métodos, conforme o modelo. 3 CRIAÇÃO DE PÁGINAS CAPÍTULO 3 Criação de Páginas Neste capítulo abordaremos como se dá a criação de um alguns tipos co- muns de página. 3.1 Páginas com HTML Esta opção (menu Páginas Página com HTML) demonstra a criação de uma pági→ - na com um conteúdo HTML definido por um arquivo externo. Neste caso, cabe ao desenvolvedor definir o conteúdo do HTML no arquivo page.html. Este arquivo é lido pela classe THtmlRenderer, cujas funcionalidades são demonstradas no tutor, e no livro sobre o Framework. Cabe ainda ao desenvolvedor nomear a classe (Single- PageView) e salvá-la com o mesmo nome da classe na pasta app/control, para ser posteriormente acessada pela aplicação. Arquivo gerado <?php class SinglePageView extends TPage { public function __construct() { parent::__construct(); // create the HTML Renderer $this->html = new THtmlRenderer('app/resources/page.html'); // replace the main section variables $this->html->enableSection('main'); parent::add($this->html); } } 3.2 Páginas com PDF Esta opção (menu Páginas Página com PDF) demonstra como embutir um PDF→ em uma página da aplicação. Quando acionada, solicitará ao desenvolvedor preen- Adianti Studio Professional 28 cher a localização do documento em relação ao diretório principal da aplicação. Nes- te caso, ele está no diretório app/documents. Figura 32 Página com PDF No arquivo gerado, o documento é embutido na página por meio da criação de um objeto TElement para criar uma tag object. O caminho do PDF é definido pelo atributo data. O objeto é então adicionado à página pelo método add(). Cabe ainda ao desenvolvedor nomear a classe (EmbeddedPDFView) e salvá-la com o mesmo nome da classe na pasta app/control,para ser posteriormente acessada pela aplicação. Arquivo gerado <?php class EmbeddedPDFView extends TPage { public function __construct() { parent::__construct(); $object = new TElement('object'); $object->data = 'app/documents/document.pdf'; $object->type = 'application/pdf'; $object->style = "width: 100%; height:600px"; parent::add($object); } } 3.3 Páginas com conteúdo externo Esta opção (menu Páginas Página com conteúdo externo) demonstra como em→ - butir um conteúdo externo (site, sistema) em uma página da aplicação. Quando acio- nada, solicitará ao desenvolvedor preencher a localização do conteúdo externo (site, sistema). Neste caso, foi utilizada uma página da Wikipedia. Figura 33 Página com conteúdo externo No arquivo gerado, o recurso externo é embutido na página por meio da criação de um objeto TElement, que cria uma tag iframe. O caminho do recurso externo é de- Adianti Studio Professional 29 finido pelo atributo src. O objeto $iframe é então adicionado à página pelo méto- do add(). Cabe ainda ao desenvolvedor nomear a classe (ExternalPageView) e salvá-la com o mesmo nome da classe na pasta app/control, para ser posteriormen- te acessada pela aplicação. Arquivo gerado <?php class ExternalPageView extends TPage { public function __construct() { parent::__construct(); $iframe = new TElement('iframe'); $iframe->id = "iframe_external"; $iframe->src = "https://pt.wikipedia.org/wiki/PHP"; $iframe->frameborder = "0"; $iframe->scrolling = "yes"; $iframe->width = "100%"; $iframe->height = "700px"; parent::add($iframe); } } 3.4 Janela com HTML Este exemplo é uma variação do anterior (Página com HTML), que cria uma janela (TWindow) para exibir um conteúdo HTML. Este conteúdo HTML é gerenciado pela classe THtmlRenderer, amplamente explicada no tutor, e no livro do Framework. Arquivo gerado <?php class ContainerWindowView extends TWindow { private $form; function __construct() { parent::__construct(); parent::setTitle('Window'); parent::setSize(500, null); // use 0.6, 0.4 (for relative sizes 60%, 40%) $this->html = new THtmlRenderer('app/resources/page.html'); $this->html->enableSection('main'); parent::add($this->html); } } Obs: O método setSize() define o tamanho da janela. O tamanho pode ser definido em pi- xels (500), em percentual (0.5), ou null para se auto ajustar ao conteúdo. 3.5 Janela com PDF Este exemplo é uma variação do anterior (Página com PDF), que cria uma janela (TWindow) para exibir um conteúdo PDF. Neste caso, foi criada uma janela de 80% Adianti Studio Professional 30 de largura por 80% de altura (0.8,0.8), conforme pode ser visto na chamada do méto- do setSize(). As demais características continuam iguais ao exemplo anterior. Arquivo gerado <?php class WindowPDFView extends TWindow { public function __construct() { parent::__construct(); parent::setTitle('WindowPDFView'); parent::setSize(0.8,0.8); $object = new TElement('object'); $object->data = 'app/documents/document.pdf'; $object->type = 'application/pdf'; $object->style = "width: 100%; height:calc(100% - 10px)"; parent::add($object); } } 3.6 Janela com conteúdo externo Esta opção (menu Páginas Janela com conteúdo externo), que cria uma janela→ (TWindow) para exibir um conteúdo externo (site ou sistema). Neste caso, foi criada uma janela de 80% (0.8) de largura, com 650 pixels de altura para conter um iframe com o recurso externo, que neste caso é a página do PHP na Wikipedia. Arquivo gerado class ExternalSystemWindowView extends TWindow { public function __construct() { parent::__construct(); parent::setTitle('ExternalSystemWindowView'); parent::setSize(0.8, 650); $iframe = new TElement('iframe'); $iframe->id = "iframe_external"; $iframe->src = "https://pt.wikipedia.org/wiki/PHP"; $iframe->frameborder = "0"; $iframe->scrolling = "yes"; $iframe->width = "100%"; $iframe->height = "600px"; parent::add($iframe); } } 4 CRIAÇÃO DE FORMULÁRIOS CAPÍTULO 4 Criação de Formulários Neste capítulo abordaremos como se dá a criação de formulários de diversos tipos (cadastro, consulta, mestre detalhe) no Adianti Framework. 4.1 Formulários de cadastro O Adianti Studio Pro permite a criação de formulários com apenas alguns cliques, por meio dos assistentes de criação de formulários. Como pode ser visto na figura a seguir, por meio do menu “Formulários”, localizado na barra de ferramentas Adianti, temos as opções para criação de formulários. Inicialmente criaremos um formulário, por meio da primeira opção “Novo formulário de cadastro”. Figura 34 Menu para criação de formulário de cadastro Ao acessarmos a opção “Novo formulário de cadastro”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; Adianti Studio Professional 32 ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pelo formulário; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Tipo de formulário: escolher o tipo de código gerado: completo: cria os mé- todos (onEdit, onSave) declarados de maneira completa; padrão: utiliza controladores padrão do framework (AdiantiStandardFormTrait); ❏ Classe pai: se o formulário será filho de TPage, ou de TWindow (abrirá em uma nova janela). ❏ Nome do formulário: nome da classe de controle que será criada; A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um formulário de cadastro. A partir do momento em que todas definições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progre- dindo para o próximo estágio da geração automática. Figura 35 Formulários de cadastro – definição de propriedades Obs: Sempre que for importante alterarmos o comportamento padrão do controlador é re- comendado o “Formulário Completo”, pois neste caso, o código é gerado por completo, ou seja, com todos os métodos expostos para alteração do programador. Na etapa seguinte do assistente de criação de formulários, o Studio nos apresenta uma lista com os campos daquela tabela, buscados diretamente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário, alte- rar seus rótulos de apresentação em tela, o tamanho de cada campo, o componente utilizado (TEntry, TDate, TText), bem como indicar se o campo é obrigatório ou não. Caso algum campo não deva ser apresentado no formulário, podemos simples- mente removê-lo desta listagem antes da geração do código. Para gerar o código da página do formulário, basta clicarmos no botão “Salvar”. Adianti Studio Professional 33 Figura 36 Formulários de cadastro – definição dos campos A partir das definições realizadas no assistente de criação de formulário de cadastro, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste mo- mento, o código do programa é gerado em memória, respeitando as definições reali- zadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Figura 37 Formulários de cadastro – código gerado Na figura a seguir, temos a execução do código gerado. Alguns componentes são pré- escolhidos, conforme o tipo de dados (Ex: Campos do date usam TDate), mesmo assim, o usuário ainda pode alterar o componente utilizado para cada campo antes da geração do código. O programa é totalmente funcional, e os métodos de salva- mento e edição, bem como o de limpar formulário, já estão presentes. Adianti Studio Professional34 Figura 38 Formulários de cadastro – programa em execução 4.2 Formulários de consulta Além de automatizar o processo de criação de formulários de cadastro e edição, o Studio também permite gerar formulários de consulta de registros. Um formulário de consulta permite apenas a visualização de dados, não sua alteração. Um formulá- rio de consultas utiliza um template em HTML e realiza simplesmente substituições de variáveis por dados vindos do banco de dados. Como pode ser visto na figura a seguir, por meio do menu “Formulários”, localizado na barra de ferramentas Adianti, temos a opção para criação de formulários de consulta. Figura 39 Menu para criação de formulário de consulta Ao acessarmos a opção “Novo formulário de consulta”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pelo formulário; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Nome do formulário: nome da classe de controle que será criada; ❏ Nome do formulário de edição: classe utilizada para edição dos dados. Adianti Studio Professional 35 A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um formulário de consulta. A partir do momento em que todas defini- ções obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredindo para o próximo estágio da geração automática. Figura 40 Formulários de consulta – definição de propriedades Na etapa seguinte do assistente de criação de formulários de consulta, o Studio nos apresenta uma lista com os campos daquela tabela, buscados diretamente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formu- lário de consulta, e alterar os seus rótulos de apresentação em tela. Caso algum cam- po não deva ser apresentado no formulário de consulta, podemos simplesmente re- movê-lo desta listagem, antes da geração do código. Para gerar o código da página do formulário, basta clicarmos no botão “Salvar”. Figura 41 Formulários de consulta – definição de campos Adianti Studio Professional 36 Após clicarmos no botão “Salvar”, o código para o formulário é gerado em memória conforme as definições realizadas. Na figura a seguir, podemos ver um exemplo de geração de formulário. Neste ponto, basta salvarmos a nova página criada dentro da pasta app/control. Note que além da classe em si (ProductFormView), também foi gerado um arquivo de template (productformview.html), que será utilizado para a apresentação dos dados. O Studio tentará salvar automaticamente o arquivo de tem- plate na pasta app/resources com um nome padronizado. Figura 42 Criação de formulários de consulta – código gerado Na figura a seguir temos a execução do código gerado. O programa é totalmente fun- cional, porém o conteúdo somente será exibido se a URL acionar o método correto (index.php?class=ProductFormView&method=onEdit&id=1). Figura 43 Formulários de consulta – programa em execução 4.3 Formulários de cadastro auxiliar Além de criar páginas com formulários, também podemos criar páginas com formu- lários e listagens atuando conjuntamente. Esta abordagem pode ser acessada pela opção “Novo formulário de cadastro auxiliar” no menu “Formulários”. Adianti Studio Professional 37 Figura 44 Menu para criação de formulário de cadastro auxiliar Em uma página deste tipo, a datagrid é usada para apresentar os registros e o formu- lário para editar os registros da datagrid. Esta abordagem pode ser utilizada para ta- belas, contendo poucos registros, uma vez que não oferece busca de registros, e o for- mulário presente na página é utilizado para edição, não para buscas. Ao acessarmos a opção “Novo formulário de cadastro auxiliar”, o assistente será aber- to. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pelo formulário; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Tipo de formulário: escolher o tipo de código gerado: Completo: cria os métodos (onEdit, onSave) declarados de maneira completa; Padrão: utiliza controladores padrão do framework (AdiantiStandardFormListTrait); ❏ Classe pai: se o formulário será filho de TPage, ou de TWindow (abrirá em uma nova janela). ❏ Nome do formulário: nome da classe de controle que será criada. A figura a seguir apresenta de maneira consolidada as definições necessárias para a geração de um formulário de cadastro auxiliar. A partir do momento em que todas definições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acio- nado, progredindo para o próximo estágio da geração automática. Adianti Studio Professional 38 Figura 45 Formulário de cadastro auxiliar – definição de propriedades Na próxima etapa, o Studio carregará os campos da tabela escolhida. Nesta janela, podemos definir quais serão os campos manipulados pelo formulário e apresenta- dos pela datagrid. Nesta listagem, podemos definir o nome dos campos, seu rótulo, tamanho, componente para manipulação do campo e também sua obrigatoriedade. Figura 46 Formulário de cadastro auxiliar – definição de campos A partir das definições realizadas no assistente de criação de formulário de cadastro auxiliar, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste momento, o código do programa é gerado em memória, respeitando as defini- ções realizadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Adianti Studio Professional 39 Figura 47 Formulário de cadastro auxiliar – código gerado Na figura a seguir, temos a execução do programa gerado pelo assistente de criação de formulário de cadastro auxiliar. Veja que a página possui um formulário para a edição dos dados acima, e a datagrid para listagem abaixo. Sempre que o usuário cli- car no botão editar, os dados são carregados no formulário. A datagrid ainda possui a funcionalidade para excluir um registro. Figura 48 Formulário de cadastro auxiliar – programa em execução 4.4 Formulário vetorial O Adianti Studio Pro permite a criação de formulários vetoriais, que nada mais são do que formulários com campos criados em forma de vetor, possibilitando a inserção de vários registros de uma só vez. Como pode ser visto na figura a seguir, por meio do menu “Formulários”, localizado na barra de ferramentas Adianti, temos a opção “Novo formulário vetorial”. Adianti Studio Professional 40 Figura 49 Menu para criação de formulário vetorial Ao acessarmos a opção “Novo formulário vetorial”, o assistente será aberto. Nesta pri- meira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pelo formulário; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Classe pai: se o formulário será filho de TPage, ou de TWindow (abrirá em uma nova janela). ❏ Nome do formulário: nome da classe de controle que será criada; A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um formulário vetorial. A partir do momento em que todas definições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progre- dindo para o próximo estágio da geração automática. Figura 50 Formulário vetorial– definição de propriedades Na etapa seguinte do assistente de criação de formulários vetoriais, o Studio nos apresenta uma lista com os campos da tabela, buscados diretamente a partir da base Adianti Studio Professional 41 de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário, alterar seus rótulos de apresentaçãoem tela, o tamanho de cada campo, o compo- nente utilizado (TEntry, TDate, TText), etc. Figura 51 Formulário vetorial– definição de campos A partir das definições realizadas no assistente de criação de formulário vetorial, po- demos clicar no botão “Salvar” para gerar o código da página. A partir deste momen- to, o código do programa é gerado em memória, respeitando as definições realizadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Figura 52 Formulário vetorial– código gerado Na figura a seguir, temos a execução do código gerado. O programa é totalmente funcional, sendo que o formulário permite o cadastramento vários produtos de uma só vez. Para acionar o formulário, basta acessar index.php?class=ProductForm. Adianti Studio Professional 42 Figura 53 Formulário vetorial– execução 4.5 Formulário mestre/detalhe O Adianti Studio Pro permite a criação de formulários de edição mestre/detalhe por meio dos assistentes de criação de páginas. Como pode ser visto na figura a seguir, por meio do menu “Formulários”, localizado na barra de ferramentas Adianti, temos a opção “Novo formulário mestre/detalhe”. Figura 54 Menu para criação de formulário mestre/detalhe Ao acessarmos a opção “Novo formulário mestre/detalhe”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; ❏ Modelo mestre: classe de modelo (TRecord) que representa a tabela que será manipulada pelo formulário como registro mestre; ❏ Chave primária mestre: definir o campo chave primária da tabela mestre; ❏ Modelo detalhe: classe de modelo (TRecord) que representa a tabela que será manipulada pelo formulário como registro detalhe; ❏ Chave primária detalhe: definir o campo chave primária da tabela detalhe; ❏ Campo de ligação: definir qual é a chave estrangeira da tabela de detalhe que estabelece o vínculo com a tabela mestre; ❏ Nome do formulário: nome da classe de controle que será criada. A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um formulário mestre/detalhe. A partir do momento em que todas defini- ções obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredindo para o próximo estágio da geração automática. Adianti Studio Professional 43 Figura 55 Formulário mestre/detalhe– definição de propriedades Na etapa seguinte do assistente de criação de formulários mestre/detalhe, o Studio nos apresenta uma lista com os campos da tabela mestre, buscados diretamente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário mestre, alterar seus rótulos de apresentação em tela, o tamanho de cada campo, o componente utilizado (TEntry, TDate, TText), bem como indicar se o campo é obrigatório ou não. Figura 56 Formulário mestre/detalhe– definição dos campos mestre Na etapa seguinte do assistente de criação de formulários mestre/detalhe, o Studio nos apresenta uma lista com os campos da tabela detalhe, buscados diretamente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário detalhe, alterar seus rótulos de apresentação em tela, o tamanho de cada campo, o componente utilizado (TEntry, TDate, TText), bem como indicar se o campo é obrigatório ou não. Adianti Studio Professional 44 Figura 57 Formulário mestre/detalhe– definição dos campos detalhe A partir das definições realizadas no assistente de criação de formulário mestre/deta- lhe, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste momento, o código do programa é gerado em memória, respeitando as definições re- alizadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Figura 58 Formulário mestre/detalhe– código gerado Na figura a seguir, temos a execução do código gerado. O programa é totalmente funcional, sendo que o formulário permite o cadastramento de vendas (registro mes- tre), bem como os seus itens (registro detalhe). O formulário também permite a edi- ção de registros de vendas, sendo que neste caso, os registros de detalhe também se- rão carregados para edição. Para acionar a edição da venda, basta acessar in- dex.php?class=SaleForm&method=onEdit&key=1. A listagem de itens possui funci- onalidades de edição e exclusão de itens. Adianti Studio Professional 45 Figura 59 Formulário mestre/detalhe – programa em execução 4.6 Formulário consulta mestre/detalhe O Adianti Studio Pro permite a criação de formulários de consulta mestre/detalhe por meio dos assistentes de criação de páginas. Como pode ser visto na figura a se- guir, por meio do menu “Formulários”, localizado na barra de ferramentas Adianti, temos a opção “Novo formulário consulta mestre/detalhe”. Um formulário de con- sulta mestre/detalhe apresenta um registro mestre e seus vários registros detalhe, po- rém sem permitir a sua edição. Pode ser muito útil como ação imediata de detalha- mento de registros em uma datagrid. A partir do formulário de consulta, pode ser acionado o formulário de edição mestre/detalhe, apresentado anteriormente. Adianti Studio Professional 46 Figura 60 Menu para criação de formulário consulta mestre/detalhe Ao acessarmos a opção “Novo formulário consulta mestre/detalhe”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo formulário; ❏ Modelo mestre: classe de modelo (TRecord) que representa a tabela que será manipulada pelo formulário como registro mestre; ❏ Chave primária mestre: definir o campo chave primária da tabela mestre; ❏ Modelo detalhe: classe de modelo (TRecord) que representa a tabela que será manipulada pelo formulário como registro detalhe; ❏ Chave primária detalhe: definir o campo chave primária da tabela detalhe; ❏ Campo de ligação: definir qual é a chave estrangeira da tabela de detalhe que estabelece o vínculo com a tabela mestre; ❏ Nome do formulário: nome da classe de controle que será criada. A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um formulário consulta mestre/detalhe. A partir do momento em que to- das definições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredindo para o próximo estágio da geração automática. Figura 61 Formulário consulta mestre/detalhe– definição de propriedades Adianti Studio Professional 47 Na etapa seguinte do assistente de criação de formulários consulta mestre/detalhe, o Studio nos apresenta uma lista com os campos da tabela mestre, buscados direta- mente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário mestre, e alterar seus rótulos de apresentação em tela. Figura 62 Formulário consulta mestre/detalhe– definição dos campos mestre Na etapa seguinte do assistente de criação de formulários consulta mestre/detalhe, o Studio nos apresenta uma lista com os campos da tabela detalhe, buscados direta- mente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do formulário detalhe, e alterar seus rótulos de apresentação em tela. Figura 63 Formulário consulta mestre/detalhe– definição dos campos detalhe Adianti Studio Professional 48 A partir das definições realizadas no assistente de criação de formulário consulta mestre/detalhe, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste momento, o código do programa é gerado em memória, respeitando as definições realizadas. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Figura 64 Formulário consulta mestre/detalhe– código gerado Na figura a seguir, temos a execução do código gerado. O programa étotalmente funcional, sendo que o formulário permite a consulta de vendas (registro mestre), bem como os seus itens (registro detalhe). Para consulta a edição da venda, basta acessar index.php?class=SaleFormView&method=onEdit&key=1. Figura 65 Formulário consulta mestre/detalhe – programa em execução 5 CRIAÇÃO DE LISTAGENS CAPÍTULO 5 Criação de Listagens Neste capítulo abordaremos como se dá a criação de listagens no Adianti Fra- mework. 5.1 Listagens de registros Além de automatizar o processo de criação de formulários, podemos também criar listagens de maneira ágil. Por meio da opção “Nova listagem de registros”, presente no menu “Listagens” da barra de ferramentas Adianti. As listagens geradas por meio do assistente são totalmente funcionais e apresentam funções como: edição de registros (redirecionamento para formulário); exclusão de registros; ordenamento de campos, filtragem e paginação. Figura 66 Menu para criação de listagem de consulta Ao acessarmos a opção “Nova listagem de registros”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pela listagem; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pela listagem; Adianti Studio Professional 50 ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Tipo de lista: escolher o tipo de código gerado: Completo: cria os métodos (onDelete, onReload) declarados de maneira completa; Padrão: utiliza controladores padrão do framework (AdiantiStandardListTrait); ❏ Ação de exclusão: se a listagem terá exclusão individual de registros, em lote, om ambos os tipos; ❏ Nome da lista: nome da classe de controle que será criada; ❏ Ação de edição: formulário de edição, com o qual a listagem estará vincula- da. Você pode apontar para um formulário de consulta de registros também. A figura a seguir, apresenta de maneira consolidada as definições necessárias para ge- ração de uma listagem de registros. A partir do momento em que todas definições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progre- dindo para o próximo estágio da geração automática. Figura 67 Listagem de registros – definição de propriedades Após as definições da primeira etapa do assistente de criação de listagens, é exibida a etapa de definição de colunas. Na segunda etapa, que pode ser vista na próxima figu- ra, são exibidas as colunas da tabela escolhida, lidas diretamente a partir da tabela da base de dados. Na listagem de campos devemos excluir as colunas que não desejamos que sejam exibidas na datagrid. Para as colunas que serão exibidas, devemos definir o seu rótu- lo correto (título da coluna), o alinhamento da coluna (esquerda, centro, direita), se a coluna é ordenável, se a coluna é editável (edição inline), e se ela possui um modifi- cador (Ex: formatação de data, exibir como imagem, exibir como valor monetário, exibir como barra de progresso, exibir como maiúsculo). Adianti Studio Professional 51 Figura 68 Listagem de registros – definição de colunas Após a definição de quais colunas farão parte da listagem, surge o momento de defi- nir quais serão os campos utilizados para a filtragem da mesma, bem como quais os operadores (=, like) serão utilizados para cada campo. Nesta tela, basta eliminarmos quais campos não desejamos utilizar como filtro, e para cada campo utilizado, alterar o seu operador. Figura 69 Listagem de registros – definição de filtros A partir das definições realizadas no assistente de criação da listagem de registros, podemos clicar no botão “Salvar”, para gerar o código da página. A partir deste mo- mento, o código do programa é gerado em memória, respeitando as definições reali- zadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Adianti Studio Professional 52 Figura 70 Listagem de registros – código gerado Na figura a seguir, temos a execução do programa gerado pelo assistente de criação de listagens. Veja que a página possui um formulário de buscas com o campo que in- dicamos na primeira etapa do assistente. A listagem é gerada com as opções de edi- ção (que redireciona para a página de formulário) e exclusão. Além disso, as colunas configuradas para serem ordenadas possuem este recurso, bastando clicar sobre o tí- tulo da coluna, sendo que também é criado um navegador de páginas. Figura 71 Listagem de registros – programa em execução 5.2 Relatório tabular O Adianti Studio Pro permite a criação de relatórios tabulares com apenas alguns cli- ques, por meio dos assistentes de criação de páginas. Como pode ser visto na figura a Adianti Studio Professional 53 seguir, por meio do menu “Listagens”, localizado na barra de ferramentas Adianti, te- mos a opção “Novo relatório tabular”. Figura 72 Menu para criação de relatório tabular Ao acessarmos a opção “Novo relatório tabular”, o assistente será aberto. Nesta pri- meira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pelo relatório; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pelo relatório; ❏ Estilo de relatório: escala de cores utilizada (cinza, azul, vermelho); ❏ Nome do formulário: nome da classe de controle que será criada. A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de um relatório tabular. A partir do momento em que todas definições obri- gatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredin- do para o próximo estágio da geração automática. Figura 73 Relatório – definição de propriedades Na etapa seguinte do assistente, o Studio nos apresenta uma lista com os campos da- quela tabela, buscados diretamente a partir da base de dados. Nesta tela, podemos confirmar os campos que farão parte do relatório, alterar seus rótulos de apresenta- ção em tela, o tamanho de cada campo, bem como o alinhamento Adianti Studio Professional 54 Figura 74 Relatório – definição das colunas Após a definição de quais colunas farão parte do relatório, surge o momento de defi- nir quais serão os campos utilizados para a filtragem do mesmo, bem como quais os operadores (=, like) serão utilizados para cada campo. Nesta tela, basta eliminarmos quais campos não desejamos utilizar como filtro, e para cada campo utilizado, alterar o seu operador. Figura 75 Relatório – definição dos filtros A partir das definições realizadas no assistente de criação de relatórios, podemos cli- car no botão “Salvar”, para gerar o código da página. A partir deste momento, o códi- go do programa é gerado em memória, respeitando as definições realizadas no assis- tente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdire- tório, com o nome da classe acrescido de .php, ou de .class.php. Adianti Studio Professional 55 Figura 76 Relatório – código gerado Na figura a seguir, temos a execução do código gerado. O programa é totalmente funcional, sendo que o botão de geração criará o relatório no formato solicitado, con- forme os parâmetros de filtro informados no formulário. Figura 77 Relatório tabular – programa em execução 5.3 Lista de seleção de registros O Adianti Studio Pro permite a criação de listas de seleção de registros com apenas alguns cliques, por meio dos assistentes de criação de páginas. Como pode ser visto na figura a seguir, por meio do menu “Listagens”, localizado na barra de ferramentas Adianti, temos a opção “Nova lista de seleção de registros”. Uma lista de seleção de registros permite que o usuário localize e selecione um conjunto de registros para re- alizar alguma ação posterior. No código-fonte gerado, o programa irá, ao final, exibir os registros selecionados ao usuário. Adianti Studio Professional 56 Figura 78 Menu para criação de lista de seleção de registros Ao acessarmos a opção “Nova lista de seleção deregistros”, o assistente será aberto. Nesta primeira etapa, é necessário realizar algumas definições: ❏ Base de dados: base de dados que será utilizada pela lista; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pela lista; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Nome da lista: nome da classe de controle que será criada. A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de uma lista de seleção de registros. A partir do momento em que todas defi- nições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredindo para o próximo estágio da geração automática. Figura 79 Lista de seleção de registros – definição de propriedades Após as definições da primeira etapa do assistente de criação de listas de seleção, é exibida a etapa de definição de colunas. Na segunda etapa, que pode ser vista na próxima figura, são exibidas as colunas da tabela escolhida, lidas diretamente a par- tir da tabela da base de dados. Na listagem de campos devemos excluir as colunas que não desejamos que sejam exibidas na lista. Para as colunas que serão exibidas, Adianti Studio Professional 57 devemos definir o seu rótulo correto (título da coluna), o alinhamento da coluna (es- querda, centro, direita), se a coluna é ordenável, e se a coluna é editável (inline). Figura 80 Lista de seleção de registros– definição dos campos Após a definição de quais colunas farão parte da listagem, é necessário definir quais serão os campos utilizados para a filtragem da mesma, bem como quais os operado- res (=, like) serão utilizados para cada campo. Nesta tela, basta eliminarmos quais campos não desejamos utilizar como filtro, e para cada campo, escolher o operador. Figura 81 Lista de seleção de registros– definição dos filtros A partir das definições realizadas no assistente de criação de lista de seleção de regis- tros, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste momento, o código do programa é gerado em memória, respeitando as definições re- alizadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Adianti Studio Professional 58 Figura 82 Lista de seleção de registros– código gerado Na figura a seguir, temos a execução do código gerado. O programa é totalmente funcional, e permite a localização de registros por meio do formulário superior. Na medida em que o usuário clica sobre os registros, estará selecionando-os. Os registros selecionados ficam armazenados na sessão. Quando o usuário clicar no botão para mostrar resultados, será aberta uma nova janela contendo os registros selecionados. A ação desta fase final pode facilmente ser alterada pelo usuário para que o programa execute uma outra ação, no lugar de exibir os registros selecionados. Figura 83 Lista de seleção de registros– programa em execução 5.4 Lista de edição de registros O Adianti Studio Pro permite a criação de listas de edição de registros com apenas al- guns cliques, por meio dos assistentes de criação de páginas. Como pode ser visto na figura a seguir, por meio do menu “Listagens”, localizado na barra de ferramentas Adianti, temos a opção “Nova lista de edição de registros”. Uma lista de edição de re- Adianti Studio Professional 59 gistros permite que o usuário edite registros diretamente na datagrid, por meio de al- gum componente de entrada de dados (Ex: TEntry). Figura 84 Menu para criação de lista de edição de registros Ao acessarmos a opção “Nova lista de edição de registros”, o assistente será aberto. Nesta primeira etapa são necessárias algumas definições: ❏ Base de dados: base de dados que será utilizada pela lista; ❏ Modelo: classe de modelo (TRecord) que representa a tabela que será mani- pulada pela lista; ❏ Chave primária: definir qual é o campo de chave primária da tabela; ❏ Nome da lista: nome da classe de controle que será criada; ❏ Campo de edição: campo que será editado diretamente na datagrid; ❏ Componente: componente que será utilizado para edição do campo. A figura a seguir, apresenta de maneira consolidada as definições necessárias para a geração de uma lista de edição de registros. A partir do momento em que todas defi- nições obrigatórias forem preenchidas, o botão “Próxima página” pode ser acionado, progredindo para o próximo estágio da geração automática. Adianti Studio Professional 60 Figura 85 Lista de edição de registros – definição de propriedades Após as definições da primeira etapa do assistente, é exibida a etapa de definição de colunas. Na segunda etapa, que pode ser vista na próxima figura, são exibidas as co- lunas da tabela escolhida, lidas diretamente a partir da tabela da base de dados. Na listagem de campos, devemos excluir as colunas que não desejamos que sejam exibi- das na lista de edição. Para as colunas que serão exibidas, devemos definir o seu ró- tulo correto (título da coluna), o alinhamento da coluna (esquerda, centro, direita), se a coluna é ordenável, e se a coluna é editável (inline). Figura 86 Lista de edição de registros– definição dos campos Adianti Studio Professional 61 Após a definição de quais colunas farão parte da listagem, surge o momento de defi- nir quais serão os campos utilizados para a filtragem da mesma, bem como quais os operadores (=, like) serão utilizados para cada campo. Nesta tela, basta eliminarmos quais campos não serão utilizados como filtro, e para cada campo, definir o operador. Figura 87 Lista de edição de registros– definição dos filtros A partir das definições realizadas no assistente de criação de lista de edição de regis- tros, podemos clicar no botão “Salvar” para gerar o código da página. A partir deste momento, o código do programa é gerado em memória, respeitando as definições re- alizadas no assistente. Então, basta salvarmos o arquivo na pasta app/control ou em algum subdiretório, com o nome da classe acrescido de .php, ou de .class.php. Figura 88 Lista de edição de registros– código gerado Adianti Studio Professional 62 Na figura a seguir, temos a execução do código gerado. O programa é totalmente funcional, e permite a localização de registros por meio do formulário superior. A partir do filtro realizado, será montada uma datagrid com um campo editável. Para a coluna selecionada para edição (preço neste caso), será exibido o componente esco- lhido em cada uma das linhas da datagrid (Ex: TEntry). A alteração na base de da- dos é realizada no momento em que o botão de salvar é acionado. Figura 89 Lista de edição de registros– programa em execução 6 REST SERVICES CAPÍTULO 6 REST Services Neste capítulo aprenderemos a construir um serviço REST no Adianti Fra- mework. 6.1 Habilitando o servidor REST Uma aplicação baseada no Template, já acompanha o arquivo rest.php.dist no di- retório raiz. Para habilitar o servidor REST, basta renomear o arquivo para rest.php. O servidor REST estará habilitado. Obs: Aqui não trataremos da implementação da segurança das requisições, não deixe de acompanhar o livro sobre o Framework e também nosso fórum para artigos sobre isto. 6.2 Criando uma classe de serviço REST O Adianti Studio oferece a funcionalidade de criar uma classe de serviço REST, que é uma classe que disponibiliza funções de uma classe de modelo (Active Record) para o mundo externo. Para criar uma classe de serviço REST, podemos acionar o menu “REST”, opção “Nova classe de serviço”. Figura 90 REST – nova classe de serviço Adianti Studio Professional 64 Na próxima etapa, o Studio solicitará a base de dados e a classe de modelo sobre a qual o serviço REST será construído. Figura 91 REST – parâmetros da classe de serviço A partir das seleções realizadas, é gerada uma classe para serviço REST. Esta classe possui, em seu início, a definição da base de dados, e da classe de modelo que serão servidas. Você perceberá que não há código fonte nesta classe, apenascomentários. Estes comentários explicam quais são os métodos disponíveis, que por sua vez são herdados da classe pai AdiantiRecordService. Figura 92 REST – código da classe de serviço 6.3 Consumindo um serviço REST Para consumir um serviço REST, é necessário conhecer a API. Para simplificar este processo, o Studio gera também um arquivo contendo exemplos de chamadas REST. São chamadas que vão explicam desde a manipulação de registros individuais ou co- leção de registros. Figura 93 REST – geração de código cliente Adianti Studio Professional 65 Ao selecionar a opção para geração de código de exemplo REST, o Studio solicitará a URL em que o sistema está rodando, bem como a classe de modelo. Figura 94 REST – parâmetros para geração de código cliente A partir da seleção realizada, será gerado o código-fonte com exemplos de chamada REST para várias operações como: carregar registro, salvar registro, alterar registro, ex- cluir registro, carregar vários registros baseado em um filtro, e excluir vários registros baseado em um filtro. Figura 95 REST – código cliente gerado 7 STUDIO FORM DESIGNER CAPÍTULO 7 Studio Form Designer Neste capítulo conheceremos a ferramenta de desenho de formulários do Adianti Studio. 7.1 Visão Geral Não bastasse as facilidades geradas pelos assistentes de criação de páginas, o Studio Pro disponibiliza o Studio Form Designer, uma ferramenta voltada para o desenho de interfaces para o Adianti Framework, que pode ser acessado por meio do botão “Form Designer” da barra de ferramentas Adianti, como pode ser visto na figura a se- guir. Figura 96 Botão para acessar o Studio Form Designer A partir do momento em que clicamos no botão “Form Designer”, a janela do Desig- ner é aberta, conforme a figura a seguir. Veja o significado de cada item: B Barra de ferramentas: funcionalidades básicas como novo, abrir e salvar ar- quivo, recortar, copiar, colar, desfazer, refazer e gerar código; C Painel de componentes: containers e widgets a serem usados no formulário; D Área de desenho: área de livre desenho de um formulário; E Propriedades do objeto: exibe as propriedades do objeto selecionado. Adianti Studio Professional 67 Figura 97 Principais áreas do Studio Form Designer A barra de ferramentas do Studio Designer contém as funcionalidades básicas para operação de um formulário, conforme pode ser visto na figura a seguir. Figura 98 Botões da barra de ferramentas As funcionalidades enumeradas pela figura são: B Novo: cria um novo formulário; C Abrir: permite abrir um formulário existente na extensão .form.xml; D Salvar: salva o formulário atual na extensão .form.xml; E Selecionar: permite selecionar um objeto na tela ou movê-lo; F Excluir: permite excluir um objeto do formulário; G Recortar: permite selecionar um objeto para ser recortado para a memória; H Copiar: permite selecionar um objeto para ser copiado para a memória; I Colar: permite selecionar uma região para colar o objeto que está na memó- ria; J Desfazer: desfaz a última operação; K Refazer: refaz a última operação desfeita; L Exibir grade: exibe ou esconde o fundo em forma de grade; Adianti Studio Professional 68 M Exportar para PNG: permite exportar o formulário como imagem; N Gerar código-fonte: gera o código-fonte PHP que irá controlar e exibir o for- mulário desenhado. Na figura a seguir, podemos visualizar os principais containers e widgets que podem ser utilizados na construção de um formulário. Figura 99 Containers e widgets disponíveis Os containers e widgets enumerados pela figura são: B Notebook: permite acrescentar um container do tipo TNotebook ao formulá- rio. O container poderá ter várias abas, basta clicar 2x sobre o objeto para adi- cionar uma nova. Para excluir uma aba, basta clicar no botão “x” da aba; C Frame: permite acrescentar um container do tipo TFrame ao formulário. Um frame poderá ter um título (definido no painel de propriedades); D Label: permite acrescentar um rótulo de texto (TLabel) ao formulário. Carac- terísticas como fonte e estilo (negrito, itálico e sublinhado) podem ser defini- dos no painel de propriedades; E Botão: permite acrescentar um botão (TButton) ao formulário. No painel de propriedades pode ser definido o ícone do botão, o nome do método que o mesmo executará e também um template (rotina padrão do framework como salvar); Adianti Studio Professional 69 F Entry: permite acrescentar um campo de entrada de texto (TEntry) ao formu- lário. No painel de propriedades podemos definir uma máscara para o campo e também se o mesmo será editável; G Caixa de senha: permite acrescentar um campo de entrada de senha (TPassword) ao formulário. No painel de propriedades podemos definir se o mesmo será editável; H Seletor de datas: permite acrescentar um campo de seleção de datas (TDate) ao formulário. No painel de propriedades podemos definir a máscara (forma- to) da data. Ex: dd/mm/yyyy; I Busca de registros: permite acrescentar um botão de seleção de registros (TSeekbutton) ao formulário. No painel de propriedades, devemos selecionar o banco de dados (database) e modelo (model) sobre os quais a busca será re- alizada, bem como o campo a ser exibido (display) e o objeto a receber o re- torno (receiver); J Spinner: permite acrescentar um campo de seleção numérica com ajustes para mais e para menos (TSpinner) ao formulário. K Slider: permite acrescentar um campo de seleção numérica em forma de régua com um seletor no centro (TSlider) ao formulário. L Imagem: permite acrescentar uma imagem (TImage) ao formulário. M Texto: permite acrescentar um campo de entrada de texto com várias linhas (TText) ao formulário. No painel de propriedades, definimos seu tamanho; N Checkbutton: permite acrescentar um campo para seleção não exclusiva de itens (TCheckGroup) ao formulário. No painel de propriedades, podemos defi- nir os itens da seleção; O Checkbutton de BD: permite acrescentar um campo para seleção não exclu- siva de itens a partir do banco de dados (TDBCheckGroup) ao formulário. No painel de propriedades, podemos selecionar o banco de dados (database) e modelo (model) de onde os itens serão carregados, bem como a chave do re- gistro (key) e o valor a ser exibido ao usuário (display). P Radiobutton: permite acrescentar um campo para seleção exclusiva de itens (TRadioGroup) ao formulário. No painel de propriedades, podemos definir os itens da seleção; Q Radiobutton de BD: permite acrescentar um campo para seleção exclusiva de itens a partir do banco de dados (TDBRadioGroup) ao formulário. No pai- nel de propriedades, podemos selecionar o banco de dados (database) e mo- delo (model) de onde os itens serão carregados, bem como a chave do registro (key) e o valor a ser exibido ao usuário (display). R Combobox: permite acrescentar um campo para seleção exclusiva de itens em forma de lista (TCombo) ao formulário. No painel de propriedades, pode- mos definir os itens da seleção; Adianti Studio Professional 70 S Combobox de BD: permite acrescentar um campo para seleção exclusiva de items em forma de lista a partir do banco de dados (TDBCombo) ao formulário. No painel de propriedades, podemos selecionar o banco de dados (database) e modelo (model) de onde os itens serão carregados, bem como a chave do re- gistro (key) e o valor a ser exibido ao usuário (display). T Datagrid: permite acrescentar uma datagrid (TDataGrid) ao formulário. A datagrid virá vazia. É necessário acrescentar paginador, colunas e ações; U Paginador de datagrid: permite acrescentar um paginador de datagrid (TPageNavigation) a uma datagrid. Deve ser clicado sobre a datagrid para realizar esta ação; V Coluna de datagrid: permite acrescentar uma coluna (TDataGridColumn) a uma datagrid . Deve ser clicado sobre a datagrid para realizar esta ação; W Ação de datagrid: permite acrescentar uma ação (TDataGridAction) a uma datagrid. Deve ser clicado sobre a datagrid para realizar esta ação. Na figura a seguir, podemos conferir como posicionar um componente no formulá- rio.
Compartilhar