1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

013 - CRUD (manutenção de cadastros)

Discussão em 'Ambiente Web - Webspeed e/ou StarWeb FrameWork' iniciado por Agnaldo, Fevereiro 2, 2014.

  1. Agnaldo

    Agnaldo Membro Ativo

    Tempo estimado de leitura: menos de 45 minutos


    Uma defição de CRUD, vinda da Wikepédia.
    "CRUD (acrônimo de Create, Read, Update e Delete em língua Inglesa) para as quatro operações básicas utilizadas em bancos de dados relacionais (RDBMS) ou em interface para usuários para criação, consulta, atualização e destruição de dados."
    Clique aqui para ver a definição completa.

    Aqui não há muito o que falar, apenas fazer e, existem várias maneiras, vários estilos, de ser feito.
    Mãos à obra então.

    Começando...

    Nos nossos exemplos até agora, que sempre foram mera extração de dados, usamos as tabelas do banco Sports.
    Tais tabelas (do banco Sports) possuem diversas regras de validação de campos bem como triggers de tabela.
    Como nessa fase ainda não vamos tratar isso, iremos usar uma tabela à parte, limpa de regras.
    Vamos criar uma tabela chamada de "clientes".
    O .df e o .d dela estão em anexo.
    Obs.: Foi colocada a extensão .txt para passar pela regra de envio do forum.

    O esqueleto inicial do nosso programa será algo assim:
    PHP:
    /* ************************************************************************* */
    /* ***                                                                   *** */    
    /* ***       Bloco de variáveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */


    /* *** Variáveis de tela *** */
    DEFINE VARIABLE codigo  AS INTEGER.
    DEFINE VARIABLE nome    AS CHARACTER.

    DEFINE VARIABLE mensagem AS CHARACTER.





    /* ************************************************************************* */
    /* ***                                                                   *** */    
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */
                                 
    /* Include com as funcionalidades web */
    src/web/method/wrap-cgi.}



    /* ************************************************************************* */
    /* ***                                                                   *** */    
    /* ***       Bloco de funções                                            *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */



    FUNCTION montaTela RETURNS LOGICAL ().

       
    /* *** Desenha a página html *** */
       
    {&out'<html>' SKIP
              
    '<head>' SKIP
              
    '<title>Cadastro</title>' SKIP
              
    '</head>' SKIP
              
    '<body>' SKIP.


       {&
    out'<div align="center">' SKIP
              
    '   <form name="form" method="post" action="cadastro">' SKIP
              
    '      <table border="1" cellspacing="1" cellpadding="1">' SKIP
              
    '         <tr>' SKIP
              
    '            <td align="right">Aluno:</td>' SKIP
              
    '            <td><input type="text" name="codigo" value="' codigo '" size="5" maxlength="4"></td>' SKIP
              
    '         </tr>' SKIP
              
    '         <tr>' SKIP
              
    '            <td align="right">Nome:</td>' SKIP
              
    '            <td><input type="text" name="nome" value="' nome '" size="36" maxlength="35"></td>' SKIP
              
    '         </tr>' SKIP
              
    '      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    {&out'<hr>' SKIP
                     
    '<b><i>' mensagem '</i></b>' SKIP.


       
    /* *** Fecha a página html *** */
       
    {&out'</body>' SKIP
              
    '</html>' SKIP.

       RETURN 
    TRUE.
                                 
    END FUNCTION. /* montaTela RETURNS LOGICAL () */



    /* ************************************************************************* */
    /* ***                                                                   *** */    
    /* ***       Bloco principal (main block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */


    /* *** Gera o header html *** */
    output-content-type("text/html").

    IF 
    REQUEST_METHOD "GET"
       
    THEN
           
    DO:
              
    FIND FIRST Clientes NO-LOCK NO-ERROR.
              IF 
    AVAILABLE Clientes
                 THEN
                     ASSIGN codigo 
    Clientes.Codigo
                            nome   
    Clientes.Nome.
                 ELSE
                     
    ASSIGN mensagem "Tabela esta vazia"
                            
    codigo   0
                            nome     
    "".

              
    montaTela().  

           
    END/* get */
       
    ELSE
           DO:

           
    END/* post */






    /* ************************************************************************* */
    /* ***                                                                   *** */    
    /* ***       Bloco de procedures                                         *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */







    /* *** Fim do arquivo *** */


    Que nos dará essa simples tela.
    [​IMG]

    Notem que definimos dua variáveis, codigo e nome, que iram servir para receber o "codigo e nome" da tabela clientes. .
    Na entrada do programa, método GET, já buscamos um registro inicial e o mostramos.
    Definimos uma função "montaTela". Ela será a nossa "tela" propriamente dito.

    Vamos partir disso para montar as demais funcionalidades.

    Continua...

    Arquivos Anexados:

    Última edição: Fevereiro 10, 2014
  2. Agnaldo

    Agnaldo Membro Ativo

    A tabela clientes possui outros campos.
    Vamos iniciar colocando os demais campos na nossa tela.
    Para tanto, precisamos definir as variáveis que iremos usar.
    Código:
    /* *** Variáveis de tela *** */
    DEFINE VARIABLE codigo          AS INTEGER.
    DEFINE VARIABLE nome            AS CHARACTER.
    DEFINE VARIABLE dataDeEntrada   AS DATE.
    DEFINE VARIABLE grandePorte     AS LOGICAL.
    DEFINE VARIABLE limiteDeCredito AS DECIMAL.
    DEFINE VARIABLE representante   AS CHARACTER.
    DEFINE VARIABLE situacao        AS CHARACTER.
    DEFINE VARIABLE tipo            AS CHARACTER.
    
    E alterar nossa função montaTela, colocando os demais campos para serem mostrados.
    PHP:
    FUNCTION montaTela RETURNS LOGICAL ().

       
    /* *** Desenha a página html *** */
       
    {&out'<html>' SKIP
              
    '<head>' SKIP
              
    '<title>Cadastro</title>' SKIP
              
    '</head>' SKIP
              
    '<body>' SKIP.


       {&
    out'<div align="center">' SKIP
              
    '   <form name="form" method="post" action="cadastro">' SKIP
              
    '      <table border="0" cellspacing="1" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Aluno:</td>' SKIP
              
    '            <td><input type="text" name="codigo" value="' codigo '" size="5" maxlength="4"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Nome:</td>' SKIP
              
    '            <td><input type="text" name="nome" value="' nome '" size="36" maxlength="35"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Data de entrada:</td>' SKIP
              
    '            <td><input type="text" name="dataDeEntrada" value="' (IF dataDeEntrada = ? THEN '' ELSE STRING(dataDeEntrada,"99/99/9999")) '" size="11" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Limite de crédito:</td>' SKIP
              
    '            <td><input type="text" name="limiteDeCredito" value="' TRIM(STRING(limiteDeCredito,"->>>,>>>,>>9.99")) '" size="16" maxlength="15"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td>' SKIP
              
    '               <select name="representante" size="1">' SKIP.

        FOR 
    EACH SalesRep NO-LOCK:
            {&
    out'                   <option value="' SalesRep.Sales-rep '"' (IF representante SalesRep.Sales-rep THEN (' SELECTED') ELSE ('')) '>' SalesRep.Sales-rep " - " SalesRep.Rep-name '</option>' SKIP.
        
    END.

        {&
    out'               </select>' SKIP
               
    '            </td>' SKIP
               
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="situacao" value="ATIVO"'   (IF tipo 'ATIVO'   THEN ' selected' ELSE '''>Cliente ativo' SKIP
              
    '               <input type="radio" name="situacao" value="INATIVO"' (IF tipo 'INATIVO' THEN ' selected' ELSE '''>Cliente inativo' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="tipo" value="FISICA"'   (IF tipo 'FISICA' THEN   ' selected' ELSE '''>Pessoa fisica' SKIP
              
    '               <input type="radio" name="tipo" value="JURIDICA"' (IF tipo 'JURIDICA' THEN ' selected' ELSE '''>Pessoa juridica' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

        {&
    out'         <tr>' SKIP
               
    '            <td>&nbsp;</td>' SKIP
               
    '            <td><input type="checkbox" name="grandePorte" value="ON"' (IF grandePorte THEN ' checked' ELSE '''> Cliente de grande porte</td>' SKIP
               
    '         </tr>' SKIP.



       {&
    out'      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    {&out'<hr>' SKIP
                     
    '<b><i>' mensagem '</i></b>' SKIP.


       
    /* *** Fecha a página html *** */
       
    {&out'</body>' SKIP
              
    '</html>' SKIP.

       RETURN 
    TRUE.
                                     
    END FUNCTION. /* montaTela RETURNS LOGICAL () */
    Podemos então alterar no bloco principal a parte que atribui valores às variáveis.
    Código:
    IF REQUEST_METHOD = "GET"  
       THEN
           DO:
              FIND FIRST Clientes NO-LOCK NO-ERROR.
              IF AVAILABLE Clientes
                 THEN
                     ASSIGN codigo          = Clientes.Codigo
                            nome            = Clientes.Nome
                            dataDeEntrada   = Clientes.DataDeEntrada
                            limiteDeCredito = Clientes.LimiteDeCredito
                            representante   = Clientes.Representante
                            situacao        = Clientes.Situacao
                            tipo            = Clientes.Tipo
                            grandePorte     = Clientes.GrandePorte.
                 ELSE
                     ASSIGN mensagem        = "Tabela esta vazia"
                            codigo          = 0
                            nome            = ""
                            dataDeEntrada   = ?
                            limiteDeCredito = 0
                            representante   = ""
                            situacao        = ""
                            tipo            = ""
                            grandePorte     = NO.
    
              montaTela().      
    
           END. /* get */
       ELSE    
           DO:
    
           END. /* post */
    
    Continua...
  3. Agnaldo

    Agnaldo Membro Ativo

    Juntando tudo isso, teremos o seguinte código.
    PHP:
    /* ************************************************************************* */ 
    /* ***                                                                   *** */        
    /* ***       Bloco de variáveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */ 


    /* *** Variáveis de tela *** */
    DEFINE VARIABLE codigo          AS INTEGER.
    DEFINE VARIABLE nome            AS CHARACTER.
    DEFINE VARIABLE dataDeEntrada   AS DATE.
    DEFINE VARIABLE grandePorte     AS LOGICAL.
    DEFINE VARIABLE limiteDeCredito AS DECIMAL.
    DEFINE VARIABLE representante   AS CHARACTER.
    DEFINE VARIABLE situacao        AS CHARACTER.
    DEFINE VARIABLE tipo            AS CHARACTER.
    DEFINE VARIABLE mensagem AS CHARACTER.





    /* ************************************************************************* */ 
    /* ***                                                                   *** */        
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */ 
                                     
    /* Include com as funcionalidades web */
    src/web/method/wrap-cgi.}



    /* ************************************************************************* */ 
    /* ***                                                                   *** */        
    /* ***       Bloco de funções                                            *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */ 



    FUNCTION montaTela RETURNS LOGICAL ().

       
    /* *** Desenha a página html *** */
       
    {&out'<html>' SKIP
              
    '<head>' SKIP
              
    '<title>Cadastro</title>' SKIP
              
    '</head>' SKIP
              
    '<body>' SKIP.


       {&
    out'<div align="center">' SKIP
              
    '   <form name="form" method="post" action="cadastro">' SKIP
              
    '      <table border="0" cellspacing="1" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Aluno:</td>' SKIP
              
    '            <td><input type="text" name="codigo" value="' codigo '" size="5" maxlength="4"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Nome:</td>' SKIP
              
    '            <td><input type="text" name="nome" value="' nome '" size="36" maxlength="35"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Data de entrada:</td>' SKIP
              
    '            <td><input type="text" name="dataDeEntrada" value="' (IF dataDeEntrada = ? THEN '' ELSE STRING(dataDeEntrada,"99/99/9999")) '" size="11" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Limite de crédito:</td>' SKIP
              
    '            <td><input type="text" name="limiteDeCredito" value="' TRIM(STRING(limiteDeCredito,"->>>,>>>,>>9.99")) '" size="16" maxlength="15"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td>' SKIP
              
    '               <select name="representante" size="1">' SKIP
              
    '                   <option value=""' (IF representante "" THEN (' SELECTED') ELSE ('')) '>Selecione um representante</option>' SKIP.
        FOR 
    EACH SalesRep NO-LOCK:
            {&
    out'                   <option value="' SalesRep.Sales-rep '"' (IF representante SalesRep.Sales-rep THEN (' SELECTED') ELSE ('')) '>' SalesRep.Sales-rep " - " SalesRep.Rep-name '</option>' SKIP.
        
    END.

        {&
    out'               </select>' SKIP
               
    '            </td>' SKIP
               
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="situacao" value="ATIVO"'   (IF situacao 'ATIVO'   THEN ' checked' ELSE '''>Cliente ativo' SKIP
              
    '               <input type="radio" name="situacao" value="INATIVO"' (IF situacao 'INATIVO' THEN ' checked' ELSE '''>Cliente inativo' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="tipo" value="FISICA"'   (IF tipo 'FISICA' THEN   ' checked' ELSE '''>Pessoa fisica' SKIP
              
    '               <input type="radio" name="tipo" value="JURIDICA"' (IF tipo 'JURIDICA' THEN ' checked' ELSE '''>Pessoa juridica' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

        {&
    out'         <tr>' SKIP
               
    '            <td>&nbsp;</td>' SKIP
               
    '            <td><input type="checkbox" name="grandePorte" value="ON"' (IF grandePorte THEN ' checked' ELSE '''> Cliente de grande porte</td>' SKIP
               
    '         </tr>' SKIP.



       {&
    out'      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    {&out'<hr>' SKIP
                     
    '<b><i>' mensagem '</i></b>' SKIP.


       
    /* *** Fecha a página html *** */
       
    {&out'</body>' SKIP
              
    '</html>' SKIP.

       RETURN 
    TRUE.
                                     
    END FUNCTION. /* montaTela RETURNS LOGICAL () */



    /* ************************************************************************* */ 
    /* ***                                                                   *** */        
    /* ***       Bloco principal (main block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */ 


    /* *** Gera o header html *** */
    output-content-type("text/html").

    IF 
    REQUEST_METHOD "GET"  
       
    THEN
           
    DO:
              
    FIND FIRST Clientes NO-LOCK NO-ERROR.
              IF 
    AVAILABLE Clientes
                 THEN
                     ASSIGN codigo          
    Clientes.Codigo
                            nome            
    Clientes.Nome
                            dataDeEntrada   
    Clientes.DataDeEntrada
                            limiteDeCredito 
    Clientes.LimiteDeCredito
                            representante   
    Clientes.Representante
                            situacao        
    Clientes.Situacao
                            tipo            
    Clientes.Tipo
                            grandePorte     
    Clientes.GrandePorte.
                 ELSE
                     
    ASSIGN mensagem        "Tabela esta vazia"
                            
    codigo          0
                            nome            
    ""
                            
    dataDeEntrada   = ?
                            
    limiteDeCredito 0
                            representante   
    ""
                            
    situacao        ""
                            
    tipo            ""
                            
    grandePorte     NO.

              
    montaTela().      

           
    END/* get */
       
    ELSE    
           DO:

           
    END/* post */






    /* ************************************************************************* */ 
    /* ***                                                                   *** */        
    /* ***       Bloco de procedures                                         *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */ 





    /* *** Fim do arquivo *** */


    Quer irá nos gerar algo assim como saída
    [​IMG]


    Continua ...
  4. Agnaldo

    Agnaldo Membro Ativo

    Vamos começar agora a colocar as funcionalidades do nosso programa.
    Iremos colocar uma régua de menu no mesmo, com imagens.

    Primeiro, uma régua de navegação, com as funções de navegar para o primeiro e último.
    As imagens estão em anexo.
    Na função montaTela, após o último campo, vamos montar nossa régua de botões, nosso menu.

    Teremos algo assim, colocando os dois botões para navegar para primeiro e último.
    PHP:
       {&out'         <tr>' SKIP
              
    '            <td colspan="2"><hr></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td colspan="2" align="center">' SKIP
              
    '               <a href="Javascript:navegarPara(~'primeiro~')"><img src="/webforum4each/imagens/btn_primeiro.png" border="0"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'ultimo~')"><img src="/webforum4each/imagens/btn_ultimo.png" border="0"></a>' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
    Notem, fizemos uma linha separadora, com a tag <hr> e então nossa linha de botões/imagens.
    Estamos chamando no click da imagem (link) a função Javascript "navegarPara", passando para ela como parâmetro a ação que queremos tomar.

    Nesse exemplo usaremos o código Javascript externo.
    Sendo assim, no começo da página fazemos uma chama para o arquivo .js em uso.
    Algo como
    PHP:
       /* *** Desenha a página html *** */
       
    {&out'<html>' SKIP
              
    '<head>' SKIP
              
    '<title>Cadastro</title>' SKIP
              
    '<script src="/webforum4each/js/cadastro.js"></script>' SKIP
              
    '</head>' SKIP
              
    '<body>' SKIP.
    E o nosso arquivo .js (cadastro.js) teria o seguinte conteúdo.
    PHP:
    function navegarPara(opcao)
        {
            
    alert('selecionou ' opcao);
        } 
    // function navegaPara(opcao)
    Isso nos dará uma tela inicial dessa forma:
    [​IMG]

    E quando clicamos num dos botões, teremos algo assim:
    [​IMG]

    Se a mensagem do "alert" apareceu então nossa chamada para a função esta correta.
    Sabendo que a função Javascript esta sendo chamada de maneira correta, podemos agora alterar a função "navegarPara" com o conteúdo correto dela.

    Nossa função irá fazer um submit dos form para o servidor.
    Para tanto, basta chamarmos o método submit do form.
    Nosso form tem o nome (propriedade name) de form.
    Algo assim:
    PHP:
    '   <form name="form" method="post" action="cadastro">' SKIP
    Então na nossa função Javascript navegarPara basta termos:
    Código:
    function navegarPara(opcao)
        { 
            document.form.submit();
        } // function navegaPara(opcao)
    
    Isso chamara o metodo submit do form, enviando o mesmo para o servidor.

    Mas não adianta apenas enviar a chamada para o servidor.
    É preciso informa a ele, o servidor, ou seja, ao nosso programa, que opção do menu ele deve executar.
    Para isso vamos criar no form um campo a mais.
    Vamos chama-lo de "opcaoDoMenu".
    Mas esse campo não deve ficar visível, como os demais campos de form que já usamos.
    Para isso, então, vamos usa-lo como um campo hidden.
    Algo assim:
    PHP:
    '      <input type="hidden" name="opcaoDoMenu" value="">' SKIP
    Essa definição ficaria nesse ponto.
    PHP:
       {&out'<div align="center">' SKIP
              
    '   <form name="form" method="post" action="cadastro">' SKIP
              
    '      <input type="hidden" name="opcaoDoMenu" value="">' SKIP
              
    '      <table border="0" cellspacing="1" cellpadding="1">' SKIP.
    Agora sim, tendo um campo que guarde "o que" queremos fazer, podemos simplesmente dar um valor para ele, fazer o submit, e o lado 4GL do programa poder ler esse campo e fazer a opção do menu desejada.
    Nossa função Javascript, navegarPara, seria algo como:
    PHP:
    function navegarPara(opcao)
        { 
            
    document.form.opcaoDoMenu.value opcao;
            
    document.form.submit();
        } 
    // function navegaPara(opcao)
    Então, quando clicamos num botão, chamamos a função Javascript navegarPara.
    Chamamos a função passando um valor para ela.
    Essa valor passado nada mais é que a opção do menu, opção do botão, que escolhemos.
    Por enquanto temos apenas as opções primeiro e ultimo.
    A função navegarPara recebe essa opção e grava a mesma no campo html oculto "opcaoDoMenu".
    Em seguida faz o submit do form, enviando o mesmo para os servidor (para o nosso programa).
    Basta agora que, no nosso programa, nós leiamos o valor do parâmetro opcaoDoMenu e façamos algo baseado nessa opção.

    Continua...

    Arquivos Anexados:

    Última edição: Fevereiro 3, 2014
  5. Agnaldo

    Agnaldo Membro Ativo

    Teríamos então, até agora, o seguinte código:
    PHP:
    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       Bloco de variáveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */


    /* *** Variáveis de tela *** */
    DEFINE VARIABLE codigo          AS INTEGER.
    DEFINE VARIABLE nome            AS CHARACTER.
    DEFINE VARIABLE dataDeEntrada   AS DATE.
    DEFINE VARIABLE grandePorte     AS LOGICAL.
    DEFINE VARIABLE limiteDeCredito AS DECIMAL.
    DEFINE VARIABLE representante   AS CHARACTER.
    DEFINE VARIABLE situacao        AS CHARACTER.
    DEFINE VARIABLE tipo            AS CHARACTER.
    DEFINE VARIABLE mensagem AS CHARACTER.





    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */
                                    
    /* Include com as funcionalidades web */
    src/web/method/wrap-cgi.}



    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       Bloco de funções                                            *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */



    FUNCTION montaTela RETURNS LOGICAL ().

       
    /* *** Desenha a página html *** */
       
    {&out'<html>' SKIP
              
    '<head>' SKIP
              
    '<title>Cadastro</title>' SKIP
              
    '<script src="/webforum4each/js/cadastro.js"></script>' SKIP
              
    '</head>' SKIP
              
    '<body>' SKIP.


       {&
    out'<div align="center">' SKIP
              
    '   <form name="form" method="post" action="cadastro">' SKIP
              
    '      <input type="hidden" name="opcaoDoMenu" value="">' SKIP
              
    '      <table border="0" cellspacing="1" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Cliente:</td>' SKIP
              
    '            <td><input type="text" name="codigo" value="' codigo '" size="5" maxlength="4"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Nome:</td>' SKIP
              
    '            <td><input type="text" name="nome" value="' nome '" size="36" maxlength="35"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Data de entrada:</td>' SKIP
              
    '            <td><input type="text" name="dataDeEntrada" value="' (IF dataDeEntrada = ? THEN '' ELSE STRING(dataDeEntrada,"99/99/9999")) '" size="11" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Limite de crédito:</td>' SKIP
              
    '            <td><input type="text" name="limiteDeCredito" value="' TRIM(STRING(limiteDeCredito,"->>>,>>>,>>9.99")) '" size="16" maxlength="15"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td>' SKIP
              
    '               <select name="representante" size="1">' SKIP
              
    '                   <option value=""' (IF representante "" THEN (' SELECTED') ELSE ('')) '>Selecione um representante</option>' SKIP.
        FOR 
    EACH SalesRep NO-LOCK:
            {&
    out'                   <option value="' SalesRep.Sales-rep '"' (IF representante SalesRep.Sales-rep THEN (' SELECTED') ELSE ('')) '>' SalesRep.Sales-rep " - " SalesRep.Rep-name '</option>' SKIP.
        
    END.

        {&
    out'               </select>' SKIP
               
    '            </td>' SKIP
               
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="situacao" value="ATIVO"'   (IF situacao 'ATIVO'   THEN ' checked' ELSE '''>Cliente ativo' SKIP
              
    '               <input type="radio" name="situacao" value="INATIVO"' (IF situacao 'INATIVO' THEN ' checked' ELSE '''>Cliente inativo' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td>' SKIP
              
    '               <input type="radio" name="tipo" value="FISICA"'   (IF tipo 'FISICA' THEN   ' checked' ELSE '''>Pessoa fisica' SKIP
              
    '               <input type="radio" name="tipo" value="JURIDICA"' (IF tipo 'JURIDICA' THEN ' checked' ELSE '''>Pessoa juridica' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td>&nbsp;</td>' SKIP
              
    '            <td><input type="checkbox" name="grandePorte" value="ON"' (IF grandePorte THEN ' checked' ELSE '''> Cliente de grande porte</td>' SKIP
              
    '         </tr>' SKIP.
                                  
       {&
    out'         <tr>' SKIP
              
    '            <td colspan="2"><hr></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td colspan="2" align="center">' SKIP
              
    '               <a href="Javascript:navegarPara(~'primeiro~')"><img src="/webforum4each/imagens/btn_primeiro.png" border="0"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'ultimo~')"><img src="/webforum4each/imagens/btn_ultimo.png" border="0"></a>' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
      

       {&
    out'      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    {&out'<hr>' SKIP
                     
    '<b><i>' mensagem '</i></b>' SKIP.


       
    /* *** Fecha a página html *** */
       
    {&out'</body>' SKIP
              
    '</html>' SKIP.

       RETURN 
    TRUE.
                                    
    END FUNCTION. /* montaTela RETURNS LOGICAL () */



    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       Bloco principal (main block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */


    /* *** Gera o header html *** */
    output-content-type("text/html").

    IF 
    REQUEST_METHOD "GET" 
       
    THEN
           
    DO:
              
    FIND FIRST Clientes NO-LOCK NO-ERROR.
              IF 
    AVAILABLE Clientes
                 THEN
                     ASSIGN codigo          
    Clientes.Codigo
                            nome            
    Clientes.Nome
                            dataDeEntrada   
    Clientes.DataDeEntrada
                            limiteDeCredito 
    Clientes.LimiteDeCredito
                            representante   
    Clientes.Representante
                            situacao        
    Clientes.Situacao
                            tipo            
    Clientes.Tipo
                            grandePorte     
    Clientes.GrandePorte.
                 ELSE
                     
    ASSIGN mensagem        "Tabela esta vazia"
                            
    codigo          0
                            nome            
    ""
                            
    dataDeEntrada   = ?
                            
    limiteDeCredito 0
                            representante   
    ""
                            
    situacao        ""
                            
    tipo            ""
                            
    grandePorte     NO.

              
    montaTela().     

           
    END/* get */
       
    ELSE   
           DO:

           
    END/* post */




    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       Bloco de procedures                                         *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */





    /* *** Fim do arquivo *** */



    Continua...
    Última edição: Fevereiro 9, 2014
  6. Agnaldo

    Agnaldo Membro Ativo

    Basta agora que tratemos a opção do menu a ser executada.
    Como foi dado um submit do form, e nosso form possui o method post, estamos agora executando o método post.
    Ou seja, o nosso REQUEST_METHOD indica para usarmos o metodo post (e não mais o get).
    No nosso bloco principal
    Código:
    IF REQUEST_METHOD = "GET"
       THEN
           DO:
              FIND FIRST Clientes NO-LOCK NO-ERROR.
              IF AVAILABLE Clientes
                 THEN
                     ASSIGN codigo          = Clientes.Codigo
                            nome            = Clientes.Nome
                            dataDeEntrada   = Clientes.DataDeEntrada
                            limiteDeCredito = Clientes.LimiteDeCredito
                            representante   = Clientes.Representante
                            situacao        = Clientes.Situacao
                            tipo            = Clientes.Tipo
                            grandePorte     = Clientes.GrandePorte.
                 ELSE
                     ASSIGN mensagem        = "Tabela esta vazia"
                            codigo          = 0
                            nome            = ""
                            dataDeEntrada   = ?
                            limiteDeCredito = 0
                            representante   = ""
                            situacao        = ""
                            tipo            = ""
                            grandePorte     = NO.
    
              montaTela().    
    
           END. /* get */
       ELSE  
           DO:
    
           END. /* post */
    
    Iremos trabalhar na parte de baixo (ELSE).

    A primeira coisa que faremos é ler o parâmetro "opcaoDoMenu", pois ele indica o que devemos fazer.
    Para tanto precisamos de uma variável Progress para guardar esse informação.
    No bloco de definição de variáveis vamos definir mais uma então.
    Ficando com algo assim:
    Código:
    /* *** Variáveis de tela *** */
    DEFINE VARIABLE codigo          AS INTEGER.
    DEFINE VARIABLE nome            AS CHARACTER.
    DEFINE VARIABLE dataDeEntrada   AS DATE.
    DEFINE VARIABLE grandePorte     AS LOGICAL.
    DEFINE VARIABLE limiteDeCredito AS DECIMAL.
    DEFINE VARIABLE representante   AS CHARACTER.
    DEFINE VARIABLE situacao        AS CHARACTER.
    DEFINE VARIABLE tipo            AS CHARACTER.
    
    DEFINE VARIABLE opcaoDoMenu     AS CHARACTER.
    
    DEFINE VARIABLE mensagem        AS CHARACTER.
    
    Agora sim, no bloco principal, na parte do post, podemos ler esse parâmetro para a variável que definimos.
    Código:
    ASSIGN opcaoDoMenu = GET-VALUE("opcaoDoMenu").
    
    Agora fica simples.
    Basicamente é um programa de navegação em 4GL.
    Fazemos um IF para testar a opção do menu.
    Se for primeiro fazemos um FIND FIRST, se for último um FIND LAST.
    Se o registro estiver disponível, movemos seus dados para as variáveis de tela correspondentes.
    Caso contrário, limpamos as variáveis.
    Em seguida mostramos, chamando a função montaTela.
    O bloco fica assim:
    Código:
           DO:
              ASSIGN opcaoDoMenu = GET-VALUE("opcaoDoMenu").
              IF opcaoDoMenu = "primeiro"
                 THEN
                     FIND FIRST Clientes NO-LOCK NO-ERROR.
                 ELSE
                     IF opcaoDoMenu = "ultimo"
                        THEN
                            FIND LAST Clientes NO-LOCK NO-ERROR.
    
              IF AVAILABLE Clientes
                 THEN
                     ASSIGN codigo          = Clientes.Codigo
                            nome            = Clientes.Nome
                            dataDeEntrada   = Clientes.DataDeEntrada
                            limiteDeCredito = Clientes.LimiteDeCredito
                            representante   = Clientes.Representante
                            situacao        = Clientes.Situacao
                            tipo            = Clientes.Tipo
                            grandePorte     = Clientes.GrandePorte.
                 ELSE
                     ASSIGN mensagem        = "Tabela esta vazia"
                            codigo          = 0
                            nome            = ""
                            dataDeEntrada   = ?
                            limiteDeCredito = 0
                            representante   = ""
                            situacao        = ""
                            tipo            = ""
                            grandePorte     = NO.
                   
              montaTela().
    
           END. /* post */
    
    Continua...
    Última edição: Fevereiro 2, 2014

Compartilhe esta Página