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

014 - CRUD + pesquisa

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

  1. Agnaldo

    Agnaldo Membro Ativo

    Tempo estimado de leitura: menos de 15 minutos

    No tópico 014 vimos a parte de CRUD.
    No tópico 012 o exemplo mostrava como abrir uma tela de pesquisa e localizar um registro.

    Vamos juntar esses dois exemplos, o que irá nos permitir colocar um a tela de pesquisa, simples, no nosso exemplo de CRUD.

    Inicialmente pegamos o exemplo do tópico 013 e vamos colocar nele um botão a mais na régua de menu.
    Será o botão pesquisar. O mesmo se encontra em anexo.

    Nossa régua de menu então será assim:
    PHP:
       {&out'         <tr>' SKIP
              
    '            <td colspan="2" align="center">' SKIP
              
    '               <a href="Javascript:navegarPara(~'primeiro~')"><img src="/webforum4each/imagens/btn_primeiro.png" border="0" alt="Primeiro"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'anterior~')"><img src="/webforum4each/imagens/btn_anterior.png" border="0" alt="Anterior"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'proximo~')"><img src="/webforum4each/imagens/btn_proximo.png" border="0" alt="Próximo"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'ultimo~')"><img src="/webforum4each/imagens/btn_ultimo.png" border="0" alt="Último"></a>' SKIP
              
    '               &nbsp; &nbsp; ' SKIP
              
    '               <a href="Javascript:incluir()"><img src="/webforum4each/imagens/btn_incluir.png" border="0" alt="Incluir"></a>' SKIP
              
    '               <a href="Javascript:excluir()"><img src="/webforum4each/imagens/btn_excluir.png" border="0" alt="Excluir"></a>' SKIP
              
    '               <a href="Javascript:salvar()"><img src="/webforum4each/imagens/btn_salvar.png" border="0" alt="Salvar"></a>' SKIP
              
    '               <a href="Javascript:cancelar()"><img src="/webforum4each/imagens/btn_cancelar.png" border="0" alt="Cancelar"></a>' SKIP
              
    '               &nbsp; &nbsp; ' SKIP
              
    '               <a href="Javascript:pesquisar()"><img src="/webforum4each/imagens/btn_pesquisar.png" border="0" alt="Pesquisar"></a>' SKIP
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
    Estamos chamando a função javascript pesquisar.
    Vamos alterar o .js, incluindo essa função.
    Basicamente o que teremos nela é um window.open que ira chamar a tela de zoom, de seleção.
    Algo assim:
    PHP:
    function pesquisar()
        {
            
    window.open("zoom-clientes","zoom","toolbar=0,location=0,diretories=0,status=1,menubar=0,scrollbars=0,resizable=0,width=300,height=300,left=10,top=10");
        }
    Pronto.
    No programa de cadastro só isso é suficiente.
    O resto sera feito no programa de zoom, de pesquisa (zoom-clientes.p).

    O programa de zoom visto no tópico 012 é semelhante a esse:
    PHP:


    /*
    *
    * zoom-clientes.p
    *
    */

    DEFINE VARIABLE limiteDaPagina AS INTEGER INITIAL 10.
    DEFINE VARIABLE contaRegistros 
    AS INTEGER.
    DEFINE VARIABLE opcao          AS CHARACTER.
    DEFINE VARIABLE ponteiro       AS CHARACTER.
    DEFINE VARIABLE posicao        AS CHARACTER.
    DEFINE VARIABLE corDeFundo     AS CHARACTER.
    DEFINE QUERY q1 FOR Clientes SCROLLING.

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

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

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



    ASSIGN opcao    GET-VALUE("opcao").
           
    ponteiro GET-VALUE("ponteiro").


    OPEN QUERY q1 FOR EACH Clientes NO-LOCK INDEXED-REPOSITION.

    GET FIRST q1 NO-LOCK.
    IF 
    NOT AVAILABLE Clientes
       THEN
           
    {&out'<h1>Tabela esta vazia</h1>' SKIP.
       ELSE
           DO:
              CASE 
    opcao:
                  
    WHEN "primeiro" THEN
                       
    DO:
                          
    GET FIRST q1 NO-LOCK.
                          
    ASSIGN posicao "inicio".
                       
    END.
                  
    WHEN "ultimo" THEN
                       
    DO:
                          
    GET LAST q1 NO-LOCK.
                          
    REPOSITION q1 BACKWARDS limiteDaPagina.
                          
    GET NEXT q1 NO-LOCK.
                          
    ASSIGN posicao "final".
                       
    END.
                  
    WHEN "proximo" THEN
                       
    DO:
                          
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                          
    REPOSITION q1 FORWARD (limiteDaPagina 1).
                          
    GET NEXT q1 NO-LOCK.
                          IF 
    NOT AVAILABLE Clientes
                             THEN
                                 
    DO:
                                    
    GET LAST q1 NO-LOCK.
                                    
    REPOSITION q1 BACKWARDS limiteDaPagina.
                                    
    GET NEXT q1 NO-LOCK.
                                    
    ASSIGN posicao "final".
                                 
    END.
                             ELSE
                                 DO:
                                    
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                                    
    REPOSITION q1 FORWARD 1.
                                    GET NEXT q1 NO
    -LOCK.
                                 
    END.
                       
    END.
                  
    WHEN "anterior" THEN
                       
    DO:
                          
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                          
    REPOSITION q1 BACKWARDS ((limiteDaPagina 2) - 1).
                          
    GET PREV q1 NO-LOCK.
                          IF 
    NOT AVAILABLE Clientes
                             THEN
                                 ASSIGN posicao 
    "inicio".
                          
    GET NEXT q1 NO-LOCK.
                       
    END.
                  
    OTHERWISE
                       
    DO:
                          
    GET FIRST q1 NO-LOCK.
                          
    ASSIGN posicao "inicio".
                       
    END.
              
    END CASE.
      
              {&
    out'<div align="center">' SKIP
                     
    '   <table border="1" cellspacing="2" cellpadding="1" style="border-collapse:collapse">' SKIP
                     
    '      <tr bgcolor="#FFFFCC">' SKIP
                     
    '         <td><b>Código</b></td>' SKIP
                     
    '         <td><b>Nome do cliente</b></td>' SKIP
                     
    '      </tr>' SKIP.
              DO WHILE 
    AVAILABLE Clientes AND contaRegistros limiteDaPagina:
                 
    ASSIGN ponteiro STRING(ROWID(Clientes)).
                 IF 
    corDeFundo "#FFFFF0"
                    
    THEN
                        ASSIGN corDeFundo 
    "#EEEEE0".           
                    ELSE
                        
    ASSIGN corDeFundo "#FFFFF0".           
                 {&
    out'      <tr bgcolor="' corDeFundo '">' SKIP
                        
    '         <td align="center"><a href="javascript:fechaZoom(~'' STRING(ROWID(Clientes)) '~')">' Clientes.Codigo FORMAT "9999" '</a></td>' SKIP
                        
    '         <td>' Clientes.Nome '</td>' SKIP
                        
    '      </tr>' SKIP.
                 
    GET NEXT q1 NO-LOCK.
                 
    ASSIGN contaRegistros contaRegistros 1.
              END
    .

              {&
    out'      <tr>' SKIP
                     
    '         <td colspan="2" align="center">' SKIP.

              IF 
    NOT posicao "inicio"
                 
    THEN
                     
    {&out'            <a href="zoom-clientes.p?opcao=primeiro"><img src="/webforum4each/imagens/btn_primeiro.png" alt="Primeiro" border="0"></a>' SKIP
                            
    '            <a href="zoom-clientes.p?opcao=anterior&ponteiro=' ponteiro '"><img src="/webforum4each/imagens/btn_anterior.png" alt="Anterior" border="0"></a>' SKIP.

              IF 
    NOT posicao "final"
                 
    THEN
                     
    {&out'            <a href="zoom-clientes.p?opcao=proximo&ponteiro=' ponteiro '"><img src="/webforum4each/imagens/btn_proximo.png" alt="Proximo" border="0"></a>' SKIP
                            
    '            <a href="zoom-clientes.p?opcao=ultimo"><img src="/webforum4each/imagens/btn_ultimo.png" alt="Ultimo" border="0"></a>' SKIP.

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

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


    /* Fecha a página html */
    {&out'</body>' SKIP
           
    '</html>' SKIP(1).
    O que mudou em relação ao exemplo do tópico 012, além da tabela, é a parte da do link.
    Lá passavamos o código do cliente. Aqui vamos passar o rowid dele.
    PHP:
                 {&out'      <tr bgcolor="' corDeFundo '">' SKIP
                        
    '         <td align="center"><a href="javascript:fechaZoom(~'' STRING(ROWID(Clientes)) '~')">' Clientes.Codigo FORMAT "9999" '</a></td>' SKIP
                        
    '         <td>' Clientes.Nome '</td>' SKIP
                        
    '      </tr>' SKIP.
    E a função fechaZoom será ligeiramente diferente.
    Algo assim:
    PHP:
    {&out'<script language="Javascript">' SKIP
           
    '    function fechaZoom(valor)' SKIP
           
    '        ~{' SKIP
           
    '            window.opener.document.form.ponteiro.value = valor;' SKIP
           
    '            window.opener.navegarPara("corrente");' SKIP
           
    '            window.close();' SKIP
           
    '        }' SKIP
           
    '</script>' SKIP(1).
    O link sobre o campo do grid chama a função fechaZoom, passando o ponteiro.
    A função fechaZoom irá passar o "novo" ponteiro selecionado para a tela pai (tela de cadastro).
    Em seguida, fará uma chamada para navegarPara pedindo que execute a parte de buscar corrente.
    Uma vez que o ponteiro foi atualizado com o que foi selecionado, a função buscar corrente irá buscar o registro desse novo ponteiro.

    Continua...

    Arquivos Anexados:

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

    Agnaldo Membro Ativo

    Abaixo o código completo do três arquivos usados.

    Arquivo .js do programa de cadastro.
    PHP:

    function navegarPara(opcao)
        {      
            
    document.form.opcaoDoMenu.value opcao;
            
    document.form.submit();
        } 
    // function navegaPara(opcao)


    function salvar()
        {      
            
    document.form.opcaoDoMenu.value "salvar";
            
    document.form.submit();
        } 
    // function salvar()


    function cancelar()
        {      
            if (
    document.form.erroNaValidacao.value=="SIM"
                    
    navegarPara("corrente")
                else
                    {
                       
    document.form.reset();
                       
    document.form.codigo.readOnly true;
                    }
        } 
    // function cancelar()


    function incluir()
        {      
            
    document.form.emModoIncluir.value   "SIM";
           
            
    document.form.codigo.readOnly false;

            
    document.form.codigo.value          "";
            
    document.form.nome.value            "";
            
    document.form.dataDeEntrada.value   "";
            
    document.form.limiteDeCredito.value "";
            
    document.form.representante.value   "";
            
    document.form.situacao[0].checked   true;
            
    document.form.tipo[0].checked       true;
            
    document.form.grandePorte.checked   false;

            
    document.form.codigo.focus();
        } 
    // function incluir()


    function excluir()
        {      
            if (
    confirm("Comfirma a exlusão do registro corrente?")) 
               {
                  
    document.form.opcaoDoMenu.value "excluir";
                  
    document.form.submit();
               }
        } 
    // function excluir()


    function pesquisar()
        {
            
    window.open("zoom-clientes","zoom","toolbar=0,location=0,diretories=0,status=1,menubar=0,scrollbars=0,resizable=0,width=300,height=300,left=10,top=10");
        }
    Continua...
  3. Agnaldo

    Agnaldo Membro Ativo

    Programa .p de cadastro
    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 opcaoDoMenu     AS CHARACTER.
    DEFINE VARIABLE ponteiro        AS CHARACTER.
    DEFINE VARIABLE erroNaValidacao AS CHARACTER.
    DEFINE VARIABLE emModoIncluir   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
              
    '      <input type="hidden" name="ponteiro" value="' ponteiro '">' SKIP
              
    '      <input type="hidden" name="erroNaValidacao" value="' erroNaValidacao '">' SKIP
              
    '      <input type="hidden" name="emModoIncluir" value="' emModoIncluir '">' 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" readOnly></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" alt="Primeiro"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'anterior~')"><img src="/webforum4each/imagens/btn_anterior.png" border="0" alt="Anterior"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'proximo~')"><img src="/webforum4each/imagens/btn_proximo.png" border="0" alt="Próximo"></a>' SKIP
              
    '               <a href="Javascript:navegarPara(~'ultimo~')"><img src="/webforum4each/imagens/btn_ultimo.png" border="0" alt="Último"></a>' SKIP
              
    '               &nbsp; &nbsp; ' SKIP
              
    '               <a href="Javascript:incluir()"><img src="/webforum4each/imagens/btn_incluir.png" border="0" alt="Incluir"></a>' SKIP
              
    '               <a href="Javascript:excluir()"><img src="/webforum4each/imagens/btn_excluir.png" border="0" alt="Excluir"></a>' SKIP
              
    '               <a href="Javascript:salvar()"><img src="/webforum4each/imagens/btn_salvar.png" border="0" alt="Salvar"></a>' SKIP
              
    '               <a href="Javascript:cancelar()"><img src="/webforum4each/imagens/btn_cancelar.png" border="0" alt="Cancelar"></a>' SKIP
              
    '               &nbsp; &nbsp; ' SKIP
              
    '               <a href="Javascript:pesquisar()"><img src="/webforum4each/imagens/btn_pesquisar.png" border="0" alt="Pesquisar"></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.

       IF 
    emModoIncluir "SIM"
          
    THEN
              
    DO:
                 {&
    out'<script language="Javascript">' SKIP
                        
    '   document.form.codigo.readOnly = false;' SKIP
                        
    '</script>' SKIP.
              
    END.

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

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


    FUNCTION moveDadosParaVariaveisDeTela RETURNS LOGICAL ().

        IF 
    AVAILABLE Clientes
           THEN
               
    DO:
                  
    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.

                  
    ASSIGN ponteiro STRING(ROWID(Clientes)).
               
    END

        RETURN 
    TRUE.

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


    FUNCTION limpaVariaveisDeTela RETURNS LOGICAL ().

        
    ASSIGN codigo          0
               nome            
    ""
               
    dataDeEntrada   = ?
               
    limiteDeCredito 0
               representante   
    ""
               
    situacao        ""
               
    tipo            ""
               
    grandePorte     NO.

        RETURN 
    TRUE.

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


    Continua...
  4. Agnaldo

    Agnaldo Membro Ativo

    PHP:

    FUNCTION lerCamposDaTela RETURNS LOGICAL ().

        
    ASSIGN codigo INTEGER(GET-VALUE("codigo")) NO-ERROR.
        IF 
    ERROR-STATUS:ERROR 
           THEN 
               ASSIGN mensagem 
    "Erro no formato do campo código<br>".

        
    ASSIGN nome TRIM(GET-VALUE("nome")).
        IF 
    nome "" 
           
    THEN
               ASSIGN mensagem 
    mensagem "Campo nome não pode ser branco<br>".

        
    ASSIGN dataDeEntrada DATE(GET-VALUE("dataDeEntrada")) NO-ERROR.
        IF 
    ERROR-STATUS:ERROR
           THEN
               ASSIGN mensagem 
    mensagem "Erro no formato do campo data<br>".

        
    ASSIGN limiteDeCredito DECIMAL(GET-VALUE("limiteDeCredito")) NO-ERROR.
        IF 
    ERROR-STATUS:ERROR
           THEN
               ASSIGN mensagem 
    mensagem "Erro no formato do campo limite de crédito<br>".

        
    ASSIGN representante GET-VALUE("representante").
        IF 
    NOT CAN-FIND(SalesRep WHERE SalesRep.Sales-rep representante
           
    THEN
               ASSIGN mensagem 
    mensagem "Representante não cadastrado<br>".

        
    ASSIGN situacao    GET-VALUE("situacao")
               
    tipo        GET-VALUE("tipo")
               
    grandePorte = IF GET-VALUE("grandePorte") = "" THEN NO ELSE YES.

        IF 
    mensagem ""
           
    THEN
               
    RETURN TRUE.
           ELSE
               RETURN 
    FALSE.

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



    FUNCTION primeiro RETURNS LOGICAL ().

        
    FIND FIRST Clientes NO-LOCK NO-ERROR.
        IF 
    AVAILABLE Clientes
           THEN
               moveDadosParaVariaveisDeTela
    ().
           ELSE
               DO:
                  
    limpaVariaveisDeTela().
                  
    ASSIGN mensagem "Tabela esta vazia".
               
    END.

        RETURN 
    TRUE.

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


    FUNCTION ultimo RETURNS LOGICAL ().

        
    FIND LAST Clientes NO-LOCK NO-ERROR.
        IF 
    AVAILABLE Clientes
           THEN
               moveDadosParaVariaveisDeTela
    ().
           ELSE
               DO:
                  
    limpaVariaveisDeTela().
                  
    ASSIGN mensagem "Tabela esta vazia".
               
    END.

        RETURN 
    TRUE.

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


    FUNCTION anterior RETURNS LOGICAL ().

        
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
        IF 
    AVAILABLE Clientes
           THEN
               
    DO:
                  
    FIND PREV Clientes NO-LOCK NO-ERROR.
                  IF 
    AVAILABLE Clientes
                     THEN
                         moveDadosParaVariaveisDeTela
    ().
                     ELSE
                         DO:
                            
    ASSIGN mensagem "Este já é o primeiro registro".
                            
    primeiro().
                         
    END.
               
    END.
           ELSE
               DO:
                  
    ASSIGN mensagem "Registro corrente não esta mais disponivel. O primeiro esta sendo mostrado".
                  
    primeiro().                                                                              
               
    END.

        RETURN 
    TRUE.

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


    FUNCTION proximo RETURNS LOGICAL ().

        
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
        IF 
    AVAILABLE Clientes
           THEN
               
    DO:
                  
    FIND NEXT Clientes NO-LOCK NO-ERROR.
                  IF 
    AVAILABLE Clientes
                     THEN
                         moveDadosParaVariaveisDeTela
    ().
                     ELSE
                         DO:
                            
    ASSIGN mensagem "Este já é o úlitmo registro".
                            
    ultimo().
                         
    END.
               
    END.
           ELSE
               DO:
                  
    ASSIGN mensagem "Registro corrente não esta mais disponivel. O último esta sendo mostrado".
                  
    ultimo().                                                                              
               
    END.

        RETURN 
    TRUE.

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


    FUNCTION salvar RETURNS LOGICAL ().

        
    ASSIGN emModoIncluir GET-VALUE("emModoIncluir").
        IF 
    emModoIncluir "SIM"
           
    THEN
               
    DO:
                  IF 
    lerCamposDaTela()
                     
    THEN
                         
    DO:
                            IF 
    CAN-FIND(Clientes WHERE Clientes.codigo codigo NO-LOCK
                               
    THEN
                                   ASSIGN mensagem        
    "Já existe um cliente cadastrado com o código " STRING(codigo) + "<br>" "Inclusão não realizada"
                                          
    erroNaValidacao "SIM".
                               ELSE
                                   DO:
                                      
    CREATE Clientes.
                                      
    ASSIGN Clientes.Codigo          codigo
                                             Clientes
    .Nome            nome
                                             Clientes
    .DataDeEntrada   dataDeEntrada
                                             Clientes
    .LimiteDeCredito limiteDeCredito
                                             Clientes
    .Representante   representante
                                             Clientes
    .Situacao        situacao
                                             Clientes
    .Tipo            tipo
                                             Clientes
    .GrandePorte     grandePorte.

                                      
    ASSIGN ponteiro STRING(ROWID(Clientes)).

                                      
    ASSIGN mensagem      "Inclusão realizada com sucesso"
                                             
    emModoIncluir "".
                                   
    END.
                         
    END.
                     ELSE
                         
    ASSIGN erroNaValidacao "SIM".
               
    END.
           ELSE
               DO:
                  IF 
    lerCamposDaTela()
                     
    THEN
                         
    DO:
                            
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroEXCLUSIVE-LOCK NO-WAIT NO-ERROR.
                            IF 
    NOT AVAILABLE Clientes
                               THEN
                                   
    IF LOCKED Clientes
                                      THEN
                                          
    DO:
                                             
    ASSIGN mensagem "Registro em uso por outro usuário. Tente novamente.".
                                             
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
                                          
    END.
                                      ELSE
                                          DO:
                                             
    ASSIGN mensagem "Registro corrente não esta mais disponivel. O primeiro esta sendo mostrado.".
                                             
    primeiro().
                                          
    END.
                               ELSE
                                   DO:
                                      
    ASSIGN Clientes.Nome            nome
                                             Clientes
    .DataDeEntrada   dataDeEntrada
                                             Clientes
    .LimiteDeCredito limiteDeCredito
                                             Clientes
    .Representante   representante
                                             Clientes
    .Situacao        situacao
                                             Clientes
    .Tipo            tipo
                                             Clientes
    .GrandePorte     grandePorte.
       
                                      
    ASSIGN mensagem "Alteração realizada com sucesso"
                                   
    END.
                         
    END.
                     ELSE
                         DO:
                            
    ASSIGN erroNaValidacao "SIM".
                            
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
                         
    END.
               
    END.

        RETURN 
    TRUE.

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


    Continua...
  5. Agnaldo

    Agnaldo Membro Ativo

    PHP:


    FUNCTION buscaCorrente RETURNS LOGICAL ().

        
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
        IF 
    AVAILABLE Clientes
           THEN
               moveDadosParaVariaveisDeTela
    ().
           ELSE
               DO:
                  
    ASSIGN mensagem "Registro corrente não esta mais disponivel. O primeiro esta sendo mostrado".
                  
    primeiro().                                                                              
               
    END.

        RETURN 
    TRUE.

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


    FUNCTION excluir RETURNS LOGICAL ().

        
    DEFINE BUFFER bfClientes FOR Clientes.

        
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroEXCLUSIVE-LOCK NO-WAIT NO-ERROR.
        IF 
    NOT AVAILABLE Clientes
           THEN
               
    IF LOCKED Clientes
                  THEN
                      
    DO:
                         
    ASSIGN mensagem "Registro em uso por outro usuário. Tente novamente.".
                         
    FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
                      
    END.
                  ELSE
                      DO:
                         
    ASSIGN mensagem "Registro corrente não esta mais disponivel. O primeiro esta sendo mostrado.".
                         
    primeiro().
                      
    END.
           ELSE
               DO:
                  
    FIND bfClientes WHERE ROWID(bfClientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
                  
    FIND NEXT bfClientes NO-LOCK NO-ERROR.
                  IF 
    AVAILABLE bfClientes
                     THEN
                         ASSIGN ponteiro 
    STRING(ROWID(bfClientes)).
                     ELSE
                         DO:
                            
    FIND bfClientes WHERE ROWID(bfClientes) = TO-ROWID(ponteiroNO-LOCK NO-ERROR.
                            
    FIND PREV bfClientes NO-LOCK NO-ERROR.
                            IF 
    AVAILABLE bfClientes
                               THEN
                                   ASSIGN ponteiro 
    STRING(ROWID(bfClientes)).
                               ELSE
                                   
    ASSIGN ponteiro = ?.
                         
    END.

                  
    ASSIGN mensagem "Exclusão do registro " STRING(Clientes.Codigo) + " realizada com sucesso"
                  
    DELETE Clientes.
                  
    buscaCorrente().
               
    END.

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




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


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

    IF 
    REQUEST_METHOD "GET"  
       
    THEN
           
    DO:
              
    primeiro().
              
    montaTela().      
           
    END/* get */
       
    ELSE    
           DO:
              
    ASSIGN opcaoDoMenu GET-VALUE("opcaoDoMenu")
                     
    ponteiro    GET-VALUE("ponteiro").
             
              CASE 
    opcaoDoMenu:
                  
    WHEN "primeiro" THEN primeiro().
                  
    WHEN "ultimo"   THEN ultimo().
                  
    WHEN "anterior" THEN anterior().
                  
    WHEN "proximo"  THEN proximo().
                  
    WHEN "corrente" THEN buscaCorrente(). 
                  
    WHEN "salvar"   THEN salvar().
                  
    WHEN "excluir"  THEN excluir().
              
    END CASE.
                     
              
    montaTela().

           
    END/* post */






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







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


    Continua...
  6. Agnaldo

    Agnaldo Membro Ativo

    E o programa de zoom, de pesquisa.

    PHP:

    /*
    *
    * zoom-clientes.p
    *
    */

    DEFINE VARIABLE limiteDaPagina AS INTEGER INITIAL 10.
    DEFINE VARIABLE contaRegistros 
    AS INTEGER.
    DEFINE VARIABLE opcao          AS CHARACTER.
    DEFINE VARIABLE ponteiro       AS CHARACTER.
    DEFINE VARIABLE posicao        AS CHARACTER.
    DEFINE VARIABLE corDeFundo     AS CHARACTER.
    DEFINE QUERY q1 FOR Clientes SCROLLING.

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

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

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


    {&
    out'<script language="Javascript">' SKIP
           
    '    function fechaZoom(valor)' SKIP
           
    '        ~{' SKIP
           
    '            window.opener.document.form.ponteiro.value = valor;' SKIP
           
    '            window.opener.navegarPara("corrente");' SKIP
           
    '            window.close();' SKIP
           
    '        }' SKIP
           
    '</script>' SKIP(1).


    ASSIGN opcao    GET-VALUE("opcao").
           
    ponteiro GET-VALUE("ponteiro").


    OPEN QUERY q1 FOR EACH Clientes NO-LOCK INDEXED-REPOSITION.

    GET FIRST q1 NO-LOCK.
    IF 
    NOT AVAILABLE Clientes
       THEN
           
    {&out'<h1>Tabela esta vazia</h1>' SKIP.
       ELSE
           DO:
              CASE 
    opcao:
                  
    WHEN "primeiro" THEN
                       
    DO:
                          
    GET FIRST q1 NO-LOCK.
                          
    ASSIGN posicao "inicio".
                       
    END.
                  
    WHEN "ultimo" THEN
                       
    DO:
                          
    GET LAST q1 NO-LOCK.
                          
    REPOSITION q1 BACKWARDS limiteDaPagina.
                          
    GET NEXT q1 NO-LOCK.
                          
    ASSIGN posicao "final".
                       
    END.
                  
    WHEN "proximo" THEN
                       
    DO:
                          
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                          
    REPOSITION q1 FORWARD (limiteDaPagina 1).
                          
    GET NEXT q1 NO-LOCK.
                          IF 
    NOT AVAILABLE Clientes
                             THEN
                                 
    DO:
                                    
    GET LAST q1 NO-LOCK.
                                    
    REPOSITION q1 BACKWARDS limiteDaPagina.
                                    
    GET NEXT q1 NO-LOCK.
                                    
    ASSIGN posicao "final".
                                 
    END.
                             ELSE
                                 DO:
                                    
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                                    
    REPOSITION q1 FORWARD 1.
                                    GET NEXT q1 NO
    -LOCK.
                                 
    END.
                       
    END.
                  
    WHEN "anterior" THEN
                       
    DO:
                          
    REPOSITION q1 TO ROWID TO-ROWID(ponteiroNO-ERROR.
                          
    REPOSITION q1 BACKWARDS ((limiteDaPagina 2) - 1).
                          
    GET PREV q1 NO-LOCK.
                          IF 
    NOT AVAILABLE Clientes
                             THEN
                                 ASSIGN posicao 
    "inicio".
                          
    GET NEXT q1 NO-LOCK.
                       
    END.
                  
    OTHERWISE
                       
    DO:
                          
    GET FIRST q1 NO-LOCK.
                          
    ASSIGN posicao "inicio".
                       
    END.
              
    END CASE.
        
              {&
    out'<div align="center">' SKIP
                     
    '   <table border="1" cellspacing="2" cellpadding="1" style="border-collapse:collapse">' SKIP
                     
    '      <tr bgcolor="#FFFFCC">' SKIP
                     
    '         <td><b>Código</b></td>' SKIP
                     
    '         <td><b>Nome do cliente</b></td>' SKIP
                     
    '      </tr>' SKIP.
              DO WHILE 
    AVAILABLE Clientes AND contaRegistros limiteDaPagina:
                 
    ASSIGN ponteiro STRING(ROWID(Clientes)).
                 IF 
    corDeFundo "#FFFFF0"
                    
    THEN
                        ASSIGN corDeFundo 
    "#EEEEE0".             
                    ELSE
                        
    ASSIGN corDeFundo "#FFFFF0".             
                 {&
    out'      <tr bgcolor="' corDeFundo '">' SKIP
                        
    '         <td align="center"><a href="javascript:fechaZoom(~'' STRING(ROWID(Clientes)) '~')">' Clientes.Codigo FORMAT "9999" '</a></td>' SKIP
                        
    '         <td>' Clientes.Nome '</td>' SKIP
                        
    '      </tr>' SKIP.
                 
    GET NEXT q1 NO-LOCK.
                 
    ASSIGN contaRegistros contaRegistros 1.
              END
    .

              {&
    out'      <tr>' SKIP
                     
    '         <td colspan="2" align="center">' SKIP.

              IF 
    NOT posicao "inicio"
                 
    THEN
                     
    {&out'            <a href="zoom-clientes.p?opcao=primeiro"><img src="/webforum4each/imagens/btn_primeiro.png" alt="Primeiro" border="0"></a>' SKIP
                            
    '            <a href="zoom-clientes.p?opcao=anterior&ponteiro=' ponteiro '"><img src="/webforum4each/imagens/btn_anterior.png" alt="Anterior" border="0"></a>' SKIP.

              IF 
    NOT posicao "final"
                 
    THEN
                     
    {&out'            <a href="zoom-clientes.p?opcao=proximo&ponteiro=' ponteiro '"><img src="/webforum4each/imagens/btn_proximo.png" alt="Proximo" border="0"></a>' SKIP
                            
    '            <a href="zoom-clientes.p?opcao=ultimo"><img src="/webforum4each/imagens/btn_ultimo.png" alt="Ultimo" border="0"></a>' SKIP.

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

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


    /* Fecha a página html */
    {&out'</body>' SKIP
           
    '</html>' SKIP(1).
    Curtiu?
    Até o próximo post
    liliane e madmau curtiram isso.

Compartilhe esta Página