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

009 - Usando form´s - outros input´s do html

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

  1. Agnaldo

    Agnaldo Membro Ativo

    Tempo estimado de leitura: menos de 15 minutos

    Embora o html não tenha tipagem de dados no form, ou seja, tudo é caracter, ele possui diversos tipos visuais, tais quais usamos na programação para ambiente gráfico (gui).

    Vamos imaginar uma tela para consulta.
    A especificação poderia dizer algo como:
    • Deverá receber o código inicial e final do cliente (de / até)
    • Receber o período em que as compras foram feitas
    • Poderá listar as compras feitas através de um representante especifico ou de todos.
    • Terá como opções poder listar apenas os clientes que possuem compraa feitas, ou listar também as ordens de compra deles ou ainda listar tanto as ordens de compra quantos os itens das mesmas
    • Poderá consultar todas ou somente as já entregues
    Nossa tela poderia ser algo assim:

    [​IMG]

    Pelo mockup acima podemos ver que, além do campo texto comum (equivalente ao fill-in do Progress) também temos, em "termos Progress", o equivalente a um combo-box, para selecionar um representante.
    Temos o leque de opções, na forma de botões de radio. E um check-box (toogle-box), para escolher o equivalente a um sim ou não.
    Ou seja, os elementos visuais do form deixaram a interface, além de mais agradável ao uso, mais bonita.

    Vamos montar nosso código então...

    Temos abaixo o esqueleto inicial do nosso programa.
    Como ele pode ficar um poco grande, já deixamos separado os blocos para funções e/ou procedures, afim de deixar o bloco principal menor.
    Notem também que, uma vez que iremos interagir com a página, já escrevemos o bloco do "request method" para identificar GET/POST, e també já definimos as variáveis que serão usadas para ler os dados vindos da tela.
    Criaremos também uma variável "mensagem" que ira guardar possíveis mensagens de erro.
    PHP:
    /* ************************************************************************* */
    /* ***                                                                   *** */   
    /* ***       Bloco de variaveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

    DEFINE VARIABLE codigoInicial  AS INTEGER.
    DEFINE VARIABLE codigoFinal    AS INTEGER.
    DEFINE VARIABLE dataInicial    AS DATE.
    DEFINE VARIABLE dataFinal      AS DATE.
    DEFINE VARIABLE representante  AS CHARACTER.
    DEFINE VARIABLE opcoes         AS CHARACTER.
    DEFINE VARIABLE jaEmbarcados   AS LOGICAL.
                                          
    DEFINE VARIABLE mensagem       AS CHARACTER.



    /* ************************************************************************* */
    /* ***                                                                   *** */   
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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





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





    /* ************************************************************************* */
    /* ***                                                                   *** */   
    /* ***       Bloco principal (Main Block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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

    /* Abre a página html */
    {&out'<html>' SKIP
           
    '<head>' SKIP
           
    '<title>Consulta ordens de compra</title>' SKIP
           
    '</head>' SKIP
           
    '<body>' SKIP(1).

    IF 
    REQUEST_METHOD "GET"
       
    THEN
           
    DO:

           
    END.
       ELSE
           DO:

           
    END.

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



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

    A primeira vez que o programa roda estamos em GET. Deveremos desenhar a tela de filtro de pesquisa.
    Após isso, iremos interagir com a a tela e, pressionando o botão pesquisar, daremos um post dos dados para o servidor.
    Nosso programa irá rodar, então, em POST, irá pegar os dados que vieram da tela, irá trata-los, "desenhará a tela de filtro novamente" e então desenhará a resposta (consulta).

    A tela que mostra os parâmetros da consulta (filtros da pesquisa) é "desenhada", é montada, duas vezes. Uma no método GET e outra no POST.

    Sendo assim, vamos montar uma sub-rotina para desenhar a tela de filtro.
    Usaremos aqui uma função para isso. Vamos chama-la de montaTelaDeFiltro.
    Tal função será chamada no método GET e no método POST.
    E uma coisa que faremos, quando inciar o programa (método get) é iniciar os parâmetros do filtro com algum valor.


    Continua...
    Última edição: Janeiro 7, 2014
    brazjuniorgyn, jbscps e fdantas curtiram isso.
  2. Agnaldo

    Agnaldo Membro Ativo

    Teremos algo assim:
    PHP:
    /* ************************************************************************* */
    /* ***                                                                   *** */      
    /* ***       Bloco de variaveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

    DEFINE VARIABLE codigoInicial  AS INTEGER.
    DEFINE VARIABLE codigoFinal    AS INTEGER.
    DEFINE VARIABLE dataInicial    AS DATE.
    DEFINE VARIABLE dataFinal      AS DATE.
    DEFINE VARIABLE representante  AS CHARACTER.
    DEFINE VARIABLE opcoes         AS CHARACTER.
    DEFINE VARIABLE jaEmbarcados   AS LOGICAL.
                                            
    DEFINE VARIABLE mensagem       AS CHARACTER.



    /* ************************************************************************* */
    /* ***                                                                   *** */      
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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





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

    FUNCTION montaTelaDeFiltro RETURNS LOGICAL ().

       
    /* *** Desenha um form html para solicitar o código do cliente *** */
       
    {&out'<div align="center">' SKIP
              
    '   <form method="post" name="form" action="consulta">' SKIP
              
    '      <table border="0" cellspacing="2" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Cliente de:</td>' SKIP
              
    '            <td><input type="text" name="codigoInicial" value="' codigoInicial '" size="4" maxlength="4"></td>' SKIP
              
    '            <td> até <input type="text" name="codigoFinal" value="' codigoFinal '" size="4" maxlength="4"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Período de:</td>' SKIP
              
    '            <td><input type="text" name="dataInicial" value="' dataInicial '" size="10" maxlength="10"></td>' SKIP
              
    '            <td> até <input type="text" name="dataFinal" value="' dataFinal '" size="10" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <select name="representante" size="1">' SKIP
              
    '                  <option value="Todos"' (IF representante 'Todos' THEN (' SELECTED') ELSE ('')) '>Todos</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 align="right">Opções:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <input type="radio" name="opcoes" value="clientes"' (IF opcoes 'clientes' THEN ' CHECKED' ELSE '''>Clientes ' SKIP
              
    '               <input type="radio" name="opcoes" value="ordens"' (IF opcoes 'ordens' THEN ' CHECKED' ELSE '''>Ordens ' SKIP
              
    '               <input type="radio" name="opcoes" value="itens"' (IF opcoes 'itens' THEN ' CHECKED' ELSE '''>Itens' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
     
                                                                                                                                            {&
    out'         <tr>' SKIP
              
    '            <td align="right">&nbsp;</td>' SKIP
              
    '            <td colspan="2"><input type="checkbox" name="jaEmbarcados" value="ON"' (IF jaEmbarcados THEN ' CHECKED' ELSE '''>Somente os já embarcados</td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td colspan="3" align="center"><input type="submit" name="btnEnviar" value="Pesquisar"></td>' SKIP
              
    '         </tr>' SKIP
              
    '      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       RETURN 
    TRUE.

    END FUNCTION. /* montaTelaDeFiltro RETURNS LOGICAL () */



    /* ************************************************************************* */
    /* ***                                                                   *** */      
    /* ***       Bloco principal (Main Block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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

    /* Abre a página html */
    {&out'<html>' SKIP
           
    '<head>' SKIP
           
    '<title>Consulta ordens de compra</title>' SKIP
           
    '</head>' SKIP
           
    '<body>' SKIP(1).

    IF 
    REQUEST_METHOD "GET"
       
    THEN
           
    DO:
              
    ASSIGN codigoInicial 1
                     codigoFinal   
    9999
                     representante 
    "todos"
                     
    opcoes        "clientes"
                     
    /* banco Sports normalmente tem dados antigos */
                     
    dataInicial   DATE(01,01,1993)
                     
    dataFinal     DATE(04,30,1993).

              
    montaTelaDeFiltro().
           
    END.
       ELSE
           DO:
              
    montaTelaDeFiltro().
           
    END.

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



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


    Que irá produzir algo como:

    [​IMG]

    Quando o botão "Pesquisar" for pressionado, os dados serão enviados para o servidor e o método post será o usado.
    Nosso próximo passo agora é, então, no método post, ler os dados e gerar nossa consulta.
    Basicamente é usar GET-VALUE...
    Código:
    ASSIGN codigoInicial = INTEGER(GET-VALUE("codigoInicial"))
           codigoFinal   = INTEGER(GET-VALUE("codigoFinal"))
           dataInicial   = DATE(GET-VALUE("dataInicial"))
           dataFinal     = DATE(GET-VALUE("dataFinal"))
           representante = GET-VALUE("representante")
           opcoes        = GET-VALUE("opcoes")
           jaEmbarcados  = (IF GET-VALUE("jaEmbarcados") = "ON" THEN TRUE ELSE FALSE) NO-ERROR.
    
    Notem que nossas variáveis tinham sido definidas com tipos de dados.
    Nesse ponto aproveitamos para fazer a conversão do tipo caracter para o tipo apropriado, uma vez que GET-VALUE devolve apenas CHAR.
    Como não podemos garantir 100% que a conversão será feita com sucesso, usamos a opção NO-ERROR no ASSIGN.
    Dessa forma, se houver algum erro na conversão de tipos podemos capturar o error com ERROR-STATUS.
    Fazemos isso e usamos uma variável "mensagem" para guardar a mensagem de erro.
    Código:
    ASSIGN codigoInicial = INTEGER(GET-VALUE("codigoInicial"))
           codigoFinal   = INTEGER(GET-VALUE("codigoFinal"))
           dataInicial   = DATE(GET-VALUE("dataInicial"))
           dataFinal     = DATE(GET-VALUE("dataFinal"))
           representante = GET-VALUE("representante")
           opcoes        = GET-VALUE("opcoes")
           jaEmbarcados  = (IF GET-VALUE("jaEmbarcados") = "ON" THEN TRUE ELSE FALSE) NO-ERROR.
    
    IF ERROR-STATUS:ERROR
       THEN
           ASSIGN mensagem = "Erro no formato dos dados recebidos".
    
    Uma forma de "ajudar" a garantir que os dados vindos do browser tenha conteúdo compatível com os tipos usados no servidor é usar Javascript para trata-los a nível de client (browser).
    Como não é o foco "agora", vou fazer um teste simples apenas no campo codigoInicial e codigoFinal, usando JS (JavaScript).
    No campo, faço uma chamada para a função de teste:
    Código:
    '<td><input type="text" name="codigoInicial" value="' codigoInicial '" size="4" maxlength="4" onkeypress="return somenteNumero(event)"></td>' SKIP
    
    E minha função JavaScript seria algo assim:
    Código:
       {&out} '<script language="JavaScript">' SKIP(1).
    
       {&out} '   function somenteNumero(e)' SKIP
              '      ~{' SKIP
              '         var tecla=(window.event)?event.keyCode:e.which;' SKIP
              '         if ((tecla>47 && tecla<58))' SKIP
              '                return true;' SKIP
              '            else' SKIP
              '                ~{' SKIP
             '                   if (tecla==8 || tecla==0)' SKIP
              '                          return true;' SKIP
             '                      else' SKIP
              '                          return false;' SKIP
              '                }' SKIP
              '      }' SKIP(1).
    
       {&out} '</script>' SKIP(1).
    
    Obs.: Estamos usando, por hora, colocar a função JS dentro do programa mesmo. Mas adiante usaremos ela como um arquivo externo.

    Continua...
    Última edição: Janeiro 7, 2014
    brazjuniorgyn e fdantas curtiram isso.
  3. Agnaldo

    Agnaldo Membro Ativo

    Então...
    1. Lemos os dados com GET-VALUE já tentando fazer a conversão de tipo.
    2. Usamos ERROR-STATUS para testar.
    3. Desenhamos novamente a tela de filtro (que mostrará a mensagem caso tenha ocorrido).
    4. E caso não tenha mensagem de erro da conversão, podemos fazer nossa regra da consulta, ou seja, nosso for each´s...
    PHP:


    /* ************************************************************************* */
    /* ***                                                                   *** */     
    /* ***       Bloco de variaveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

    DEFINE VARIABLE codigoInicial  AS INTEGER.
    DEFINE VARIABLE codigoFinal    AS INTEGER.
    DEFINE VARIABLE dataInicial    AS DATE.
    DEFINE VARIABLE dataFinal      AS DATE.
    DEFINE VARIABLE representante  AS CHARACTER.
    DEFINE VARIABLE opcoes         AS CHARACTER.
    DEFINE VARIABLE jaEmbarcados   AS LOGICAL.
                                          
    DEFINE VARIABLE mensagem       AS CHARACTER.



    /* ************************************************************************* */
    /* ***                                                                   *** */     
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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





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

    FUNCTION montaTelaDeFiltro RETURNS LOGICAL ().

       {&
    out'<script language="JavaScript">' SKIP(1).


       {&
    out'   function somenteNumero(e)' SKIP
              
    '      ~{' SKIP
              
    '         var tecla=(window.event)?event.keyCode:e.which;' SKIP
              
    '         if ((tecla>47 && tecla<58))' SKIP
              
    '                return true;' SKIP
              
    '            else' SKIP
              
    '                ~{' SKIP
              
    '                   if (tecla==8 || tecla==0)' SKIP
              
    '                          return true;' SKIP
              
    '                      else' SKIP
              
    '                          return false;' SKIP
              
    '                }' SKIP
              
    '      }' SKIP(1).


       {&
    out'</script>' SKIP(1).


       
    /* *** Desenha um form html para solicitar o código do cliente *** */
       
    {&out'<div align="center">' SKIP
              
    '   <form method="post" name="form" action="consulta" onsubmit="return validaForm()">' SKIP
              
    '      <table border="0" cellspacing="2" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Cliente de:</td>' SKIP
              
    '            <td><input type="text" name="codigoInicial" value="' codigoInicial '" size="4" maxlength="4" onkeypress="return somenteNumero(event)"></td>' SKIP
              
    '            <td> até <input type="text" name="codigoFinal" value="' codigoFinal '" size="4" maxlength="4" onkeypress="return somenteNumero(event)"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Período de:</td>' SKIP
              
    '            <td><input type="text" name="dataInicial" value="' dataInicial '" size="10" maxlength="10"></td>' SKIP
              
    '            <td> até <input type="text" name="dataFinal" value="' dataFinal '" size="10" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <select name="representante" size="1">' SKIP
              
    '                  <option value="Todos"' (IF representante 'Todos' THEN (' SELECTED') ELSE ('')) '>Todos</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 align="right">Opções:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <input type="radio" name="opcoes" value="clientes"' (IF opcoes 'clientes' THEN ' CHECKED' ELSE '''>Clientes ' SKIP
              
    '               <input type="radio" name="opcoes" value="ordens"' (IF opcoes 'ordens' THEN ' CHECKED' ELSE '''>Ordens ' SKIP
              
    '               <input type="radio" name="opcoes" value="itens"' (IF opcoes 'itens' THEN ' CHECKED' ELSE '''>Itens' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.

                                                                                                                                            {&
    out'         <tr>' SKIP
              
    '            <td align="right">&nbsp;</td>' SKIP
              
    '            <td colspan="2"><input type="checkbox" name="jaEmbarcados" value="ON"' (IF jaEmbarcados THEN ' CHECKED' ELSE '''>Somente os já embarcados</td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td colspan="3" align="center"><input type="submit" name="btnEnviar" value="Pesquisar"></td>' SKIP
              
    '         </tr>' SKIP
              
    '      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    DO:
                 {&
    out'<script language="Javascript">' SKIP
                        
    '   alert("' mensagem '");' SKIP
                        
    '</script>' SKIP(1).
              
    END.

       RETURN 
    TRUE.

    END FUNCTION. /* montaTelaDeFiltro RETURNS LOGICAL () */



    /* ************************************************************************* */
    /* ***                                                                   *** */     
    /* ***       Bloco principal (Main Block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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

    /* Abre a página html */
    {&out'<html>' SKIP
           
    '<head>' SKIP
           
    '<title>Consulta ordens de compra</title>' SKIP
           
    '</head>' SKIP
           
    '<body>' SKIP(1).

    IF 
    REQUEST_METHOD "GET"
       
    THEN
           
    DO:
              
    ASSIGN codigoInicial 1
                     codigoFinal   
    9999
                     representante 
    "todos"
                     
    opcoes        "clientes"
                     
    /* banco Sports normalmente tem dados antigos */
                     
    dataInicial   DATE(01,01,1993)
                     
    dataFinal     DATE(04,30,1993).

              
    montaTelaDeFiltro().
           
    END.
       ELSE
           DO:
              
    /* *** Le os dados da interface *** */
              
    ASSIGN codigoInicial INTEGER(GET-VALUE("codigoInicial"))
                     
    codigoFinal   INTEGER(GET-VALUE("codigoFinal"))
                     
    dataInicial   DATE(GET-VALUE("dataInicial"))
                     
    dataFinal     DATE(GET-VALUE("dataFinal"))
                     
    representante GET-VALUE("representante")
                     
    opcoes        GET-VALUE("opcoes")
                     
    jaEmbarcados  = (IF GET-VALUE("jaEmbarcados") = "ON" THEN TRUE ELSE FALSENO-ERROR.

              IF 
    ERROR-STATUS:ERROR
                 THEN
                     ASSIGN mensagem 
    "Erro no formato dos dados recebidos".


              
    montaTelaDeFiltro().

              IF 
    mensagem ""
                 
    THEN
                     
    DO:

                     
    END.

           
    END.

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



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

    Vamos nos focar agora nessa parte, que será onde faremos as regras da consulta.
    Código:
              IF mensagem = ""
                 THEN
                     DO:
    
                     END.
    

    Continua...
    Última edição: Janeiro 7, 2014
    brazjuniorgyn e fdantas curtiram isso.
  4. Agnaldo

    Agnaldo Membro Ativo

    Agora basta fazermos a regra de for each´s para pesquisar os dados e mostra-los.
    Aqui há várias formas de fazer.

    Vou colocar o código em dois pedaços ...

    PHP:

    /* ************************************************************************* */
    /* ***                                                                   *** */      
    /* ***       Bloco de variaveis                                          *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

    DEFINE VARIABLE codigoInicial  AS INTEGER.
    DEFINE VARIABLE codigoFinal    AS INTEGER.
    DEFINE VARIABLE dataInicial    AS DATE.
    DEFINE VARIABLE dataFinal      AS DATE.
    DEFINE VARIABLE representante  AS CHARACTER.
    DEFINE VARIABLE opcoes         AS CHARACTER.
    DEFINE VARIABLE jaEmbarcados   AS LOGICAL.
                                           
    DEFINE VARIABLE mensagem       AS CHARACTER.
    DEFINE VARIABLE corDeFundo     AS CHARACTER.


    /* ************************************************************************* */
    /* ***                                                                   *** */      
    /* ***       Bloco de includes                                           *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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





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

    FUNCTION montaTelaDeFiltro RETURNS LOGICAL ().

       {&
    out'<script language="JavaScript">' SKIP(1).

       {&
    out'   function somenteNumero(e)' SKIP
              
    '      ~{' SKIP
              
    '         var tecla=(window.event)?event.keyCode:e.which;' SKIP
              
    '         if ((tecla>47 && tecla<58))' SKIP
              
    '                return true;' SKIP
              
    '            else' SKIP
              
    '                ~{' SKIP
              
    '                   if (tecla==8 || tecla==0)' SKIP
              
    '                          return true;' SKIP
              
    '                      else' SKIP
              
    '                          return false;' SKIP
              
    '                }' SKIP
              
    '      }' SKIP(1).

       {&
    out'</script>' SKIP(1).


       
    /* *** Desenha um form html para solicitar o código do cliente *** */
       
    {&out'<div align="center">' SKIP
              
    '   <form method="post" name="form" action="consulta" onsubmit="return validaForm()">' SKIP
              
    '      <table border="0" cellspacing="2" cellpadding="1">' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Cliente de:</td>' SKIP
              
    '            <td><input type="text" name="codigoInicial" value="' codigoInicial '" size="4" maxlength="4" onkeypress="return somenteNumero(event)"></td>' SKIP
              
    '            <td> até <input type="text" name="codigoFinal" value="' codigoFinal '" size="4" maxlength="4" onkeypress="return somenteNumero(event)"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Período de:</td>' SKIP
              
    '            <td><input type="text" name="dataInicial" value="' dataInicial '" size="10" maxlength="10"></td>' SKIP
              
    '            <td> até <input type="text" name="dataFinal" value="' dataFinal '" size="10" maxlength="10"></td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td align="right">Representante:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <select name="representante" size="1">' SKIP
              
    '                  <option value="Todos"' (IF representante 'Todos' THEN (' SELECTED') ELSE ('')) '>Todos</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 align="right">Opções:</td>' SKIP
              
    '            <td colspan="2">' SKIP
              
    '               <input type="radio" name="opcoes" value="clientes"' (IF opcoes 'clientes' THEN ' CHECKED' ELSE '''>Clientes ' SKIP
              
    '               <input type="radio" name="opcoes" value="ordens"' (IF opcoes 'ordens' THEN ' CHECKED' ELSE '''>Ordens ' SKIP
              
    '               <input type="radio" name="opcoes" value="itens"' (IF opcoes 'itens' THEN ' CHECKED' ELSE '''>Itens' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
     
                                                                                                                                            {&
    out'         <tr>' SKIP
              
    '            <td align="right">&nbsp;</td>' SKIP
              
    '            <td colspan="2"><input type="checkbox" name="jaEmbarcados" value="ON"' (IF jaEmbarcados THEN ' CHECKED' ELSE '''>Somente os já embarcados</td>' SKIP
              
    '         </tr>' SKIP.

       {&
    out'         <tr>' SKIP
              
    '            <td colspan="3" align="center"><input type="submit" name="btnEnviar" value="Pesquisar"></td>' SKIP
              
    '         </tr>' SKIP
              
    '      </table>' SKIP
              
    '   </form>' SKIP
              
    '</div>' SKIP.

       IF 
    mensagem <> ""
          
    THEN
              
    DO:
                 {&
    out'<script language="Javascript">' SKIP
                        
    '   alert("' mensagem '");' SKIP
                        
    '</script>' SKIP(1).
              
    END.

       RETURN 
    TRUE.

    END FUNCTION. /* montaTelaDeFiltro RETURNS LOGICAL () */


    FUNCTION trataDadosDoFiltro RETURNS LOGICAL().

        IF 
    codigoInicial codigoFinal
           THEN
               ASSIGN mensagem 
    "* Código final deve ser maior ou igual ao código inical\n".

        IF 
    dataInicial dataFinal
           THEN
               ASSIGN mensagem 
    "* Data final deve ser maior ou igual à data inicial\n".

        IF 
    mensagem ""
           
    THEN
               
    DO:
                  IF 
    NOT CAN-FIND(FIRST Customer WHERE Customer.Cust-Num >= codigoInicial NO-LOCK)
                     
    THEN
                         ASSIGN mensagem 
    "* Não exixtem clientes para a faixa informada".
               
    END.

        RETURN 
    TRUE.

    END FUNCTION. /* trataDadosDoFiltro RETURNS LOGICAL() */


    Continua ....
    brazjuniorgyn e fdantas curtiram isso.
  5. Agnaldo

    Agnaldo Membro Ativo

    PHP:

    FUNCTION mostraCabecalhoDasOrdens RETURNS LOGICAL ().

        {&
    out'      <tr align="center" bgcolor="LightCyan">' SKIP
               
    '         <td><b>Ordem</b></td>' SKIP
               
    '         <td><b>Data</b></td>' SKIP
               
    '         <td><b>Embarque</b></td>' SKIP
               
    '         <td><b>Prev. entrega</b></td>' SKIP
               
    '         <td><b>Representante de venda</b></td>' SKIP
               
    '      </tr>' SKIP.

    END FUNCTION. /* mostraCabecalhoDasOrdens RETURNS LOGICAL () */


    FUNCTION mostraDadosDasOrdens RETURNS LOGICAL ().

        {&
    out'      <tr align="center" bgcolor="' corDeFundo '">' SKIP
               
    '         <td>' Order.Order-Num FORMAT "9999" '</td>' SKIP
               
    '         <td>' Order.Order-Date FORMAT "99/99/9999" '</td>' SKIP
               
    '         <td>' Order.Ship-Date FORMAT "99/99/9999" '</td>' SKIP
               
    '         <td>' Order.Promise-Date FORMAT "99/99/9999" '</td>' SKIP
               
    '         <td align="left">' IF AVAILABLE SalesRep THEN SalesRep.Rep-Name ELSE Order.Sales-Rep '</td>' SKIP
               
    '      </tr>' SKIP.

    END FUNCTION. /* mostraDadosDasOrdens RETURNS LOGICAL () */


    FUNCTION mostraItensDasOrdens RETURNS LOGICAL ().

        {&
    out'      <tr align="center" id="itensDaOrdem' Order.Order-Num '">' SKIP
               
    '         <td colspan="5">' SKIP
               
    '            <table bgcolor="' corDeFundo '" border="1" cellspacing="0" cellpadding="2" width=100%" style="border-collapse:collapse">' SKIP
               
    '               <tr>' SKIP
               
    '                  <td colspan="7" align="center"><b><i>Itens da ordem de compra ' Order.Order-Num FORMAT "9999" '</b></i></td>' SKIP
               
    '               </tr>' SKIP
               
    '               <tr align="center">' SKIP
               
    '                  <td><b>Seq</b>' SKIP
               
    '                  <td><b>Item</b></td>' SKIP
               
    '                  <td><b>Descrição</b></td>' SKIP
               
    '                  <td><b>Qtda.</b></td>' SKIP
               
    '                  <td><b>Preço</b></td>' SKIP
               
    '                  <td><b>Desconto</b></td>' SKIP
               
    '                  <td><b>Total</b></td>' SKIP
               
    '               </tr>' SKIP.
        FOR 
    EACH Order-Line WHERE Order-Line.Order-Num Order.Order-Num NO-LOCK:
             
    FIND Item WHERE Item.Item-Num Order-Line.Item-Num NO-LOCK NO-ERROR.
             {&
    out'               <tr>' SKIP
                    
    '                  <td align="center">' Order-Line.Line-Num FORMAT "999" '</td>' SKIP
                    
    '                  <td align="center">' Order-Line.Item-Num FORMAT "99999" '</td>' SKIP
                    
    '                  <td>' (IF AVAILABLE Item THEN Item.Item-Name ELSE "Não cadastrado"'</td>' SKIP
                    
    '                  <td align="right">' Order-Line.Qty '</td>' SKIP
                    
    '                  <td align="right">' Order-Line.Price FORMAT "->>>,>>9.99" '</td>' SKIP
                    
    '                  <td align="right">' Order-Line.Discount ' %</td>' SKIP
                    
    '                  <td align="right">' Order-Line.Extended-Price FORMAT "->>>,>>9.99" '</td>' SKIP
                    
    '               </tr>' SKIP.
        
    END.
        {&
    out'            </table>' SKIP
               
    '         </td>' SKIP
               
    '      </tr>' SKIP.

    END FUNCTION. /* mostraItensDasOrdens RETURNS LOGICAL () */



    /* ************************************************************************* */
    /* ***                                                                   *** */     
    /* ***       Bloco principal (Main Block)                                *** */
    /* ***                                                                   *** */
    /* ************************************************************************* */

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

    /* Abre a página html */
    {&out'<html>' SKIP
           
    '<head>' SKIP
           
    '<title>Consulta ordens de compra</title>' SKIP
           
    '</head>' SKIP
           
    '<body>' SKIP(1).

    IF 
    REQUEST_METHOD "GET"
       
    THEN
           
    DO:
              
    ASSIGN codigoInicial 1
                     codigoFinal   
    9999
                     representante 
    "todos"
                     
    opcoes        "clientes"
                     
    /* banco Sports normalmente tem dados antigos */
                     
    dataInicial   DATE(01,01,1993)
                     
    dataFinal     DATE(04,30,1993).

              
    montaTelaDeFiltro().
           
    END.
       ELSE
           DO:
              
    /* *** Le os dados da interface *** */
              
    ASSIGN codigoInicial INTEGER(GET-VALUE("codigoInicial"))
                     
    codigoFinal   INTEGER(GET-VALUE("codigoFinal"))
                     
    dataInicial   DATE(GET-VALUE("dataInicial"))
                     
    dataFinal     DATE(GET-VALUE("dataFinal"))
                     
    representante GET-VALUE("representante")
                     
    opcoes        GET-VALUE("opcoes")
                     
    jaEmbarcados  = (IF GET-VALUE("jaEmbarcados") = "ON" THEN TRUE ELSE FALSENO-ERROR.

              IF 
    ERROR-STATUS:ERROR
                 THEN
                     ASSIGN mensagem 
    "Erro no formato dos dados recebidos".
                 ELSE
                     
    trataDadosDoFiltro().

              
    montaTelaDeFiltro().

              IF 
    mensagem ""
                 
    THEN
                     
    DO:
                        {&
    out'<div align="center">' SKIP
                               
    '   <table border="1" cellspacing="0" cellpadding="2" style="border-collapse:collapse">' SKIP.
                        FOR 
    EACH Customer WHERE Customer.Cust-Num >= codigoInicial AND Customer.Cust-Num <= codigoFinal NO-LOCK,
                            
    EACH Order WHERE Order.Cust-Num Customer.Cust-Num AND
                                             (
    Order.Order-Date >= dataInicial AND Order.Order-Date <= dataFinal) AND
                                             (IF 
    representante "todos" THEN TRUE ELSE Order.Sales-Rep representante) AND
                                             (IF 
    jaEmbarcados THEN Order.Ship-Date <> ? ELSE TRUENO-LOCK
                            
    BREAK BY Customer.Cust-Num BY Order.Order-Num:

                            IF 
    FIRST-OF(Customer.Cust-Num)
                               
    THEN
                                   
    DO:
                                      {&
    out'      <tr>' SKIP
                                             
    '         <td colspan="5"><b>Cliente ' Customer.Cust-Num FORMAT "9999" ' - ' Customer.Name '</b></td>' SKIP
                                             
    '      </tr>' SKIP.
                                      IF 
    opcoes "ordens" OR opcoes "itens"
                                         
    THEN
                                             mostraCabecalhoDasOrdens
    ().
                                   
    END.

                            IF 
    opcoes "ordens" OR opcoes "itens"
                               
    THEN
                                   
    DO:
                                      IF 
    corDeFundo "#F0FFFF"
                                         
    THEN
                                             ASSIGN corDeFundo 
    "#F0F8FF".
                                         ELSE
                                             
    ASSIGN corDeFundo "#F0FFFF"
                                       IF 
    FIRST-OF(Order.Order-Num)
                                          
    THEN
                                              
    DO:
                                                 
    FIND SalesRep WHERE SalesRep.Sales-Rep Order.Sales-Rep NO-LOCK NO-ERROR.
                                                 
    mostraDadosDasOrdens().
                                                 IF 
    opcoes "itens"
                                                    
    THEN
                                                        mostraItensDasOrdens
    ().
                                              
    END.
                                   
    END.
                        
    END.
                        {&
    out'   </table>' SKIP
                               
    '</div>' SKIP.
                     
    END.
           
    END.

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



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



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



    Curtiu?
    Até o próximo post.​
    Última edição: Janeiro 21, 2014
    brazjuniorgyn e fdantas curtiram isso.
  6. jaisonantoniazzi

    jaisonantoniazzi Membro Ativo

    Parabéns pelo artigo, mas não seria melhor ter iniciado a partir de um Html Mapping?

Compartilhe esta Página