Progress DCA Desenvolvendo Aplicações Caracter Parte 1 Tecnologia 1 Agenda Parte 1 9 Introdução ao Progress 9 Movimentação dos Dados 9 Manipulando os Dados 9 Blocos 9 Localizando Registros 9 Variáveis 9 Processamento Condicional Parte 2 9 Frames 9 Includes 9 Relatórios 9 Programação Orientada a Eventos 2 Agenda 9 Widgets 9 Tipos de Widgets 9 Menus 9 Tabelas Temporárias (TEMP-TABLE) Parte 3 9 Procedures 9 Compartilhamento de Dados 9 Importação e Exportação de Dados 9 Tratamento de Erros 9 Transações 9 Bloqueio de Registro 9 Funções 3 Introdução ao Progress INTRODUÇÃO AO PROGRESS 4 Introdução ao Progress 9 Completo ambiente de desenvolvimento de aplicações. 9 É composto por: Sistema Gerenciador de Banco de Dados Relacional. Linguagem de 4a. Geração. Ferramentas de Programação. 5 Benefícios FLEXÍVEL ABERTO COMPLETO 6 Benefícios 9 Flexível Assegura portabilidade das aplicações em outras plataformas. 9 Aberto Suporta o padrão industrial. Assegura opções de desenvolvimento heterogêneo. 9 Completo Permite construção de grandes aplicações. Produz soluções Client/Server. 7 Componentes Lógicos 9 Base de Dados Tabela • Registro • Campo Índice 8 Componentes Lógicos Cliente Empresa Banco = Base Dados 9 Componentes Lógicos Tabela Registro Nome Campo Índice 10 Componentes Físicos .BI .DB .LG .LK 11 Componentes Físicos .DB DATABASE: Contém os dados atuais e descrições da base .BI BEFORE-IMAGE: Contém a imagem dos dados de uma transação 12 Componentes Físicos .LG .LK LOG: Contém as referências dos usuários, hora de entrada, saída e programas acessados (histórico). LOCK: Informa se a base está sendo acessada. 13 Componentes da Linguagem 9 Blocos 9 Declarações 9 Funções 9 Operadores 9 Variáveis 9 Expressões 9 Símbolos especiais 9 Elementos da interface com o usuário (atributos e métodos 9 Eventos 14 Tipos de Dados do Progress Tipo Character Integer Decimal Logical Date Formato x(8) Aceita: A – Alfabetico ! – Maiusculas >>>,>>9 Aceita: z – espaço 9 – mostra “0” >>>,>>9.99 Yes/No Aceita: True/False MM/DD/AAAA Rowid Recid Exemplo “x(40)” –> string alfanumérica “AAA-9999” –> MCZ-9283 “!x(10)” –> STRING ALFANUMÉRICA “>>>,>>9” –> 1.500 “999,999” –> 001.500 “zzz,zz9” –> 1.500 “>>>,>>9.99” –> 1.500,45 “999,999.99” –> 001.500,45 “zzz,zz9.99” –> 1.500,45 Yes No 12/31/9999 --->>>>>9 15 Movimentação dos Dados MOVIMENTAÇÃO DOS DADOS 16 Localização dos Dados BASE DE DADOS BUFFER TELA BUFFER REGISTRO 17 Movimentando Dados BASE DE DADOS → TELA BASE DE DADOS BUFFER REGISTRO BUFFER TELA 18 Movimentando Dados TELA → BASE DE DADOS BASE DE DADOS BUFFER REGISTRO BUFFER TELA ENTRADA USUÁRIO 19 Regras para Movimentação de Dados 9 Os programas não podem manipular os dados da base de dados até que eles sejam copiados para o buffer de registro. 9 O usuário não pode interagir com os dados até que eles sejam copiados do buffer de registro para o buffer de tela. 9 As alterações que são feitas no buffer de tela ou buffer de registro não são atualizadas automaticamente em outro buffer. Deve-se programar o controle de movimentação entre os buffers. 20 Comandos de Movimentação de Dados Comando Banco de Dados Buffer de Registro Buffer de Tela Usuário ASSIGN CREATE DELETE DISPLAY ENABLE FIND FOR EACH GET INSERT PROMPT-FOR RELEASE SET UPDATE 21 Manipulando os Dados MANIPULANDO OS DADOS 22 Insert 9 Cria um novo registro no banco, permite que o usuário faça alterações e atualiza as informações no banco. 9 Executa as ações de CREATE, DISPLAY, PROMPT-FOR e ASSIGN. 9 Ex.: INSERT customer. 23 Create 9 Cria um novo registro no banco, inicializa com os valores defaults (padrãos) e deixa uma cópia do registro no buffer de registro. 9 Ex.: CREATE customer. 24 Update 9 Mostra os valores, permite ao usuário alterar e atualiza os dados no banco. 9 Executa as ações de DISPLAY, PROMPT-FOR e ASSIGN. 9 Ex.: UPDATE customer. UPDATE customer EXCEPT cust-num. 25 Display 9 Mostra os valores na Tela. 9 Move os dados do Buffer de Registro para o Buffer de Tela. 9 Os dados devem sempre ter sido previamente movidos para o Buffer de Registro. 9 Ex.: DISPLAY customer. DISP customer.cust-num. 26 Set 9 Permite que o usuário altere as informações e atualiza o banco de dados. 9 Executa as ações de PROMPT-FOR e ASSIGN. 9 Ex.: SET customer. SET customer.name. 27 Prompt-For 9 Solicita uma entrada de dados ao usuário e disponibiliza no buffer de tela. 9 Ex.: PROMPT-FOR customer.cust-num. FIND customer WHERE customer.cust-num = INPUT customer.cust-num NO-ERROR. IF AVAILABLE customer THEN DISPLAY customer EXCEPT customer.comments WITH 1 COLUMN. 28 Assign 9 Atualiza a informação no Banco de Dados. 9 Copia os dados do buffer de tela para seus respectivos campos e/ou variáveis no buffer de registro. 9 Ex.: DEF VAR i-cust-num AS integer NO-UNDO. PROMPT-FOR i-cust-num. FIND FIRST customer EXCLUSIVE-LOCK. ASSIGN customer.cust-num = i-cust-num. 29 Delete 9 Elimina um registro do buffer de registro e do banco de dados. 9 Os dados devem sempre ter sido previamente movidos para o Buffer de Registro. 9 Ex.: REPEAT: PROMPT-FOR customer.cust-num. FIND customer USING customer.cust-num. DELETE customer. END. 30 Quadro de Comandos INSERT UPDATE SET CREATE DISPLAY PROMPT-FOR ASSIGN 31 Observe a Movimentação insert customer. create customer. update customer. create customer. display customer. prompt-for customer. assign customer. 32 Quadro de Comandos INSERT UPDATE SET DELETE CREATE DISPLAY PROMPT-FOR ASSIGN FIND FOR EACH RELEASE 33 Laboratório 1 LABORATÓRIO 1 Exercício disponível no material de apoio 34 Blocos BLOCOS 35 Tipos de Blocos 9 REPEAT 9 FOR EACH 9 DO 9 PROCEDURES 9 TRIGGERS 36 Repeat 9 Laço (repetição) automático. Continua a interagir até encontrar um END-ERROR ou outra condição de término definida pelo usuário. 9 Ex: REPEAT WITH 1 COLUMN: CREATE customer. UPDATE customer. END. 37 For Each 9 Lê um registro a cada interação do bloco e copia os dados do banco para o buffer de registro. 9 Ex: FOR EACH customer: DISPLAY customer.cust-num customer.name. END. 38 Do 9 Individualiza um grupo de comandos dentro de um bloco simples. 9 Ex: FOR EACH customer: DISPLAY customer.cust-num. IF credit-limit > 15000 THEN DO: UPDATE customer.name customer.address. MESSAGE "Registro Alterado". END. END. 39 Desvio de Execução de Blocos 9 Forma de desviar a seqüência de execução de determinado bloco. 9 Comandos: – NEXT – LEAVE 9 Ex: FOR EACH customer: DISPLAY customer.cust-num. IF credit-limit > 15000 THEN NEXT. IF credit-limit = 10000 THEN LEAVE. UPDATE customer.name customer.address. END. 40 Laboratório 2 LABORATÓRIO 2 Exercício disponível no material de apoio 41 Localizando Registros LOCALIZANDO REGISTROS 42 Find 9 Busca apenas um registro em uma tabela. – FIRST (primeiro) – LAST (último) – NEXT (próximo) – PREV (anterior) 9 Ex.: FIND FIRST customer WHERE customer.credit-limit > 15000 NO-ERROR. IF AVAILABLE customer THEN DISPLAY customer WITH 1 COLUMN. 43 Where 9 Limita os registros a serem mostrados em uma leitura de uma determinada tabela. 9 Ex: FOR EACH customer WHERE customer.credit-limit > 15000: DISPLAY customer.cust-num customer.credit-limit. END. 9 OPERADORES: NOT AND OR > >= <> < <= 44 Using 9 Substitui o WHERE, utilizando o dado informado no buffer de tela. 9 Ex: REPEAT WITH 1 COLUMN: PROMPT-FOR customer.cust-num. FIND customer USING customer.cust-num. DISPLAY customer. END. WHERE customer.cust-num = INPUT customer.cust-num 45 Of 9 Substitui o WHERE, utilizando o índice para fazer o relacionamento entre tabelas. 9 Ex: FIND FIRST customer. FOR EACH order OF customer: DISPLAY order.order-num END. WHERE order.cust-num = customer.cust-num 46 By 9 Usa-se a opção BY para classificação de registros por um campo não indexado. 9 Ex: FOR EACH customer BY balance DESCENDING: DISPLAY customer.balance customer.name customer.phone. END. 9 Default: ordenação ascendente 47 Use-Index 9 A opção USE-INDEX permite que você escolha qualquer índice definido para selecionar registros. 9 Ex: FOR EACH customer USE-INDEX name: DISPLAY customer.balance customer.name customer.phone. END. 48 Begins 9 Verifica se a 1ª expressão inicia com a 2ª expressão. 9 Utiliza um índice caso exista. 9 Ex: FOR EACH customer WHERE customer.name BEGINS “S”: DISPLAY customer.cust-num customer.name customer.phone. END. 49 Matches 9 Compara uma expressão do tipo caracter com um padrão e retorna o valor verdadeiro se a expressão for atendida. 9 Não utiliza índice. 9 Ex: FOR EACH customer WHERE customer.address MATCHES “*st”: DISPLAY customer.cust-num customer.name customer.address. END. 50 Contains 9 Faz a busca por determinada palavra ou combinação delas, em atributos do tipo word-index. 9 Ex: FOR EACH item WHERE item.item-name CONTAINS “ball”: DISPLAY item.item-num item.item-name item.price. END. 51 Buffer 9 Funciona como um espelho da tabela. 9 Ex: DEFINE BUFFER bf-cliente FOR customer. FIND FIRST customer. UPDATE customer.cust-num customer.name. FIND bf-cliente WHERE bf-cliente.cust-num = customer.cust-num. DISPLAY bf-cliente.name bf-cliente.phone. UPDATE customer.address. 52 Query 9 Pesquisa agrupada de registro do banco de dados. 9 Exemplos: Definir a query: DEFINE QUERY nome-da-query FOR tabela SCROLLING. Abrir a query: OPEN QUERY nome-da-query FOR EACH tabela. Acessar os registros: GET FIRST nome-da-query. 53 Get 9 Retorna um registro de uma query previamente aberta. 9 Ex: – – – – GET GET GET GET FIRST nome-da-query. NEXT nome-da-query. PREV nome-da-query. LAST nome-da-query. 54 Exemplo: Query + Get DEFINE QUERY qr-cust FOR customer SCROLLING. OPEN QUERY qr-cust FOR EACH customer. GET FIRST qr-cust. REPEAT: DISP customer. GET NEXT qr-cust. END. 55 Laboratório 3 LABORATÓRIO 3 Exercício disponível no material de apoio 56 Variáveis VARIÁVEIS 57 Variáveis 9 Ex.: DEFINE VARIABLE nome-variavel AS Tipo de dado LIKE Tabela.atributo INITIAL “ABC” NO-UNDO. 9 Ex.: DEFINE VARIABLE c-customer AS char NO-UNDO. DEF VAR i-cust-num LIKE customer.cust-num NO-UNDO. 58 Message 9 Envia uma mensagem para a tela. 9 Sintaxe: MESSAGE “texto” [ UPDATE variavel ] [ VIEW-AS ALERT-BOX [ QUESTION | INFORMATION | WARNING | ERROR ] ] [ BUTTONS YES-NO | YES-NO-CANCEL | OK | OK-CANCEL | RETRY-CANCEL ] [ TITLE “título” ]. 59 Exemplo: Message DEF VAR l-resp AS logical INITIAL no NO-UNDO. MESSAGE “Confirma Atualização?” UPDATE l-resp VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE “Atualização de Dados”. 60 Laboratório 4 LABORATÓRIO 4 Exercício disponível no material de apoio 61 Processamento Condicional PROCESSAMENTO CONDICIONAL 62 Processamento Condicional SOLICITA NUM. CLIENTE BUSCA REGISTRO NO BANCO DE DADOS SIM NÃO ENCONTROU? ALTERA INFORMAÇÕES ADICIONA NOVO 63 Processamento Condicional: IF IF expression THEN comando. ELSE DO: comando. comando. BLOCO comando. END. 64 Processamento Condicional: Case CASE expression: WHEN value THEN comando. WHEN value THEN DO: bloco. END. WHEN value THEN comando. OTHERWISE DO: bloco. END. END CASE. 65 Laboratório 5 LABORATÓRIO 5 Exercício disponível no material de apoio 66 Agradecimento Obrigada! [email protected] http://universidade.datasul.com.br Este material é de propriedade da DATASUL S.A., sendo proibida a sua reprodução em qualquer meio, total ou parcial, sem aprovação por escrito. Todos os direitos estão reservados. A informação contida aqui é confidencial e não pode ser utilizada fora da empresa ou das franquias que fazem parte da nossa rede, não podendo ser divulgada para clientes, parceiros ou outra empresa ou indivíduo sem o prévio consentimento de um diretor da DATASUL S.A. As opiniões expressas aqui estão sujeitas a modificação sem aviso prévio. 67