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

    Nosso programa já possui, então, a capacidade de navegar pra frente e pra trás nos registros, bem como a capacidade de salvar alterações, permitindo inclusive cancelar (desfazer) as alterações.

    O código até agora estaria assim:

    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();
        } 
    // function cancelar()
    Continua...
    Última edição: Fevereiro 10, 2014
  2. 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 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
              
    '      <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: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.


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

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

    Continua...
    Última edição: Fevereiro 9, 2014
  3. 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 () */


    FUNCTION salvar RETURNS LOGICAL ().

        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.

        RETURN 
    TRUE.

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


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



    /* ************************************************************************* */
    /* ***                                                                   *** */       
    /* ***       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().
              
    END CASE.
                    
              
    montaTela().

           
    END/* post */






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







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

    Continua...
  4. Agnaldo

    Agnaldo Membro Ativo

    Vamos implementar agora a opção de incluir (e na continuação a opção excluir).
    As imagens para os botões estão em anexo.

    Continua...

    Arquivos Anexados:

  5. Agnaldo

    Agnaldo Membro Ativo

    Vamos então colocar mais uma opção na régua do menu, no caso, a opção incluir.
    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: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.
    Estamos chamando ali a função incluir.
    O botão incluir vai basicamente
    a) limpar os campos da tela, para que possamos digitar numa tela limpa
    b) permitir que o código seja informado (normalmente ele esta em formato readonly)

    Teremos então algo assim:
    PHP:
    function incluir()
        {
            
    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(opcao)
    O nosso botão incluir fara, via de regra, apenas isso, ou seja, limpar a tela.
    A partir daí o usuário irá interagir com a tela.
    O botão cancelar já permite cancelar (desfazer) uma alteração na tela.
    Ele também terá o mesmo efeito sobre a ação de incluir, ou seja, desfará o que foi feito na tela.
    Porém a ação de reset do botão cancela não volta o campo codigo a ser readonly.
    Isso deve ser feito "na mão".
    Nossa função cancelar então será assim:
    PHP:
    function cancelar()
        {
            if (
    document.form.erroNaValidacao.value=="SIM")
                    
    navegarPara("corrente")
                else
                    {
                       
    document.form.reset();
                       
    document.form.codigo.readOnly true;
                    }
        } 
    // function cancelar()
    O botão salvar precisa ter a capacidade de salvar tanto um alteração quanto uma inclusão.
    Para tanto, a forma mais simples é termos uma variável/campo que indique se estamos em modo alteração ou em modo inclusão.
    Vamos precisar de mais uma variável no lado Progress.
    Código:
    DEFINE VARIABLE emModoIncluir   AS CHARACTER.
    
    E ele deverá ser mostrada na tela, como um campo hidden.
    PHP:
       {&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.
    Dessa forma, quando selecionamos o botão incluir podemos setar esse campo indicando que estamos em modo de inclusão.
    Nossa função Javascript incluir teria algo assim?
    PHP:
    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(opcao)
    Agora, quando selecionamos a opção incluir, além de limpar a tela, habilitar o campo codigo e posicionar o cursor, também setamos o flag emModoIncluir.
    Dessa forma, quando selecionarmos a opção salvar o lado Progress poderá ler esse flag para saber se estamos salvando uma alteração ou uma inclusão.
    A nossa função salvar, do lado Progress, já foi testada e esta funcionando sem problemas para a situação de salvar uma alteração.
    Para não mexermos no que já esta funcionando vamos apenas fazer um IF nela.
    Se for modo incluir fazemos uma coisa, senão, fazemos o que já tem na função.

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

    Agnaldo Membro Ativo

    A nossa função salvar, do lado Progress, seria assim:
    Código:
    FUNCTION salvar RETURNS LOGICAL ().
    
        ASSIGN emModoIncluir = GET-VALUE("emModoIncluir").
        IF emModoIncluir = "SIM"
           THEN
               DO:
    
               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 () */
    
    Notem que mantivemos o código anterior, que salva a alteração (já estava testado).
    Podemos agora apenas fazer a parte nova da função, na opção THEN do IF.
    Código:
    FUNCTION salvar RETURNS LOGICAL ().
    
        ASSIGN emModoIncluir = GET-VALUE("emModoIncluir").
        IF emModoIncluir = "SIM"
           THEN
               DO:
    
               END.
           ELSE
    
    Última edição: Fevereiro 9, 2014

Compartilhe esta Página