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

    Nossa função salvar será algo assim então:
    Código:
    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(ponteiro) EXCLUSIVE-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(ponteiro) NO-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(ponteiro) NO-LOCK NO-ERROR.
                         END.
               END.
    
        RETURN TRUE.
    
    END FUNCTION. /* salvar RETURNS LOGICAL () */
    
    Nosso modo incluir então funciona assim.
    Se clicarmos em incluir, entramos em modo de inclusão na tela.
    Selecionando cancelar, fazemos o reset do form e volta a tela ao estado anterior.
    Se damos o salvar e o lado Progress devolve um erro, por causa da validação dos campos (IF lerCamposDaTela()) ou por causa de chave duplicada, irá voltar à tela, com os dados da inclusão.
    Se na sequencia damos um novo cancelar ele irá cancelar a inclusão, não dando reset, pois o form já havia ido ao servidor e voltado, mas buscando o registro corrente que havia na tela, uma vez que a variável ponteiro ainda mantém a informação de quem estava na tela antes de iniciar a inclusão, permitindo que a chamada a busca corrente possa ser realizada (igual ocorre na alteração).
    Mas se, após o erro ainda continuamos fazendo a inclusão, o campo codigo vai estar em readOnly.
    Precisamos aqui acertar para que na volta à tela ele continue permitindo a alteração do código, uma vez que ainda estamos em modo de inclusão.
    Faremos isso na função montaTela, no final dela, com algo assim:
    Código:
       IF emModoIncluir = "SIM"
          THEN
              DO:
                 {&out} '<script language="Javascript">' SKIP
                        '   document.form.codigo.readOnly = false;' SKIP
                        '</script>' SKIP.
              END.
    
    Continua...
    Última edição: Fevereiro 10, 2014
    brazjuniorgyn curtiu isso.
  2. Agnaldo

    Agnaldo Membro Ativo

    Dessa forma o campo código continua permitindo escrita nele, uma vez que a tag readonly foi setada no html e alterada ao final da página, quando necessário, pelo nosso código JS.
    A função montaTela completa seria assim:
    PHP:
    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: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
              
    '            </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 () */

    Continua...
  3. Agnaldo

    Agnaldo Membro Ativo

    Já temos a imagem para o botão de excluir.
    Podemos fazer a parte de exclusão, colocando o botão na régua de botões:
    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
              
    '            </td>' SKIP
              
    '         </tr>' SKIP.
    Bem como montar a função Javascript excluir.
    Como excluir é uma ação "destrutiva", vamos pedir confirmação do usuário.
    Nossa função Javascript seria:
    PHP:
    function excluir()
        { 
            if (
    confirm("Comfirma a exlusão do registro corrente?"))
               {
                  
    document.form.opcaoDoMenu.value "excluir";
                  
    document.form.submit();
               }
        } 
    // function excluir()
    Agora basta colocarmos a opção excluir no CASE do bloco principal do lado 4GL.
    Código:
              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.
    
    E montarmos a função com a regra.
    Código:
    FUNCTION excluir RETURNS LOGICAL ().
    
        DEFINE BUFFER bfClientes FOR Clientes.
    
        FIND Clientes WHERE ROWID(Clientes) = TO-ROWID(ponteiro) EXCLUSIVE-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(ponteiro) NO-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(ponteiro) NO-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(ponteiro) NO-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 () */
    
    Notem que usamos um buffer auxiliar para localizar o registro adjascente ao que estava sendo excluído, guardando em ponteiro o mesmo. Dessa forma podemos, após a excluir o registro alvo, chamarmos a função buscaCorrente (que se baseia no ponteiro) para mostrar o registro seguinte (ou anterior) ao que foi apagado.

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

    Agnaldo Membro Ativo

    Fechando esse exemplo, então, teriamos:

    Arquivo .js
    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()

    Continua...
  5. Agnaldo

    Agnaldo Membro Ativo

    Arquivo .p
    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
              
    '            </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 () */

    Continua...
  6. Agnaldo

    Agnaldo Membro Ativo

    PHP:
    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 () */


    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 () */
    Continua...

Compartilhe esta Página