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

Duvida Como descobrir se a execução vem de uma Function

Discussão em 'Progress 4GL' iniciado por renato.schlogel, Fevereiro 4, 2015.

  1. Eilleen

    Eilleen Membro Ativo

    Se for o caso do exemplo que passei no post anterior, queria ver o código da "procedureDestino", pra ver se tem algum outro jeito de tratar o problema que está ocorrendo...
  2. renato.schlogel

    renato.schlogel Membro Participativo

    Obrigado Agnaldo, e a todos.

    É exatamente como a Eilleen fez.
    Olha ai o problema.....:

    obs:Em anexo tem o arquivo.

    Código:
    def var vl-msg as char init 'uma mensagem qualquer~n'
                               .
    def frame f-tela
       vl-msg no-label view-as editor size 76 by 8
       with overlay side-labels centered 1 down row 12 col 2 width 78
       title ' MINHA MENSAGEM '.
    
    def var vl-cont as int.
    
    do vl-cont = 1 to 30.
       vl-msg = vl-msg + '~numa mensagem qualquer ' + String(vl-cont).
    end.
    
    Procedure UmProcedimentoQualquer.
    b-1:
    do on error undo b-1, leave b-1.
    
       message 'Execucao iniciada por um procedimento' skip view-as alert-box.
    
       run meuProcedimento.
      
       return 'UmProcedimentoQualquer_ok'.
    end.
    message 'Ocorreu erro no ' program-name(1).
    readkey pause 9.
    End Procedure.
    
    
    Function umaFuncaoQualquer return log().
    b-1:
    do on error undo b-1, leave b-1.
    
       message 'Execucao iniciada por uma funcao' skip view-as alert-box.
       run meuProcedimento.
      
       return yes.
    end.
    message 'Ocorreu erro no ' program-name(1).
    readkey pause 9.
    End Function.
    
    
    Procedure meuProcedimento.
    b-1:
    do on error undo b-1, leave b-1 with frame f-tela.
    
       disp vl-msg.
    
       /* a ideia era essa:
       if foiChamadoPorFuncao() then
          readeky.
       else do. */
    
          enable vl-msg.
          wait-for return,recall,go,tab of vl-msg.
          disable vl-msg.
    
       /* end.*/  
      
       hide frame f-tela no-pause.
       return 'meuProcedimento_ok'.
    end.
    message 'Ocorreu erro no ' program-name(1).
    readkey pause 9.
    End Procedure.
    
    
    run UmProcedimentoQualquer.
    umaFuncaoQualquer().
    

    Arquivos Anexados:

  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Exatamento Eilleen, ele quer saber se a PROCEDURE foi chamada de outra procedure ou de uma function e não de onde a FUNCTION foi chamada.
  4. Agnaldo

    Agnaldo Membro Ativo

    Mas basta dar uma varrida no vetor do PROGRAM-NAME

    Código:
    PROCEDURE p3:
        MESSAGE " Programa: "  ENTRY(2,PROGRAM-NAME(1)," ") SKIP(1)
                "1a. a ser chamada: " ENTRY(1,PROGRAM-NAME(3)," ") SKIP
                "2a. a ser chamada: " ENTRY(1,PROGRAM-NAME(2)," ") SKIP
                "3a. a ser chamada: " ENTRY(1,PROGRAM-NAME(1)," ")
        VIEW-AS ALERT-BOX.
    END PROCEDURE.
    
    PROCEDURE p2:
        RUN p3.
    END PROCEDURE.
    
    PROCEDURE p1:
        RUN p2.
    END PROCEDURE.
    
    RUN p1.
    
    
    renato.schlogel curtiu isso.
  5. Agnaldo

    Agnaldo Membro Ativo

    Se PROGRAM-NAME possui apenas UMA entrada, é um programa, se possui duas, é de uma procedure/funcao/trigger .
  6. Agnaldo

    Agnaldo Membro Ativo

    E para saber se o "nome" é de uma função ou procedure, basta ver a "assinatura" da mesma

    Código:
    IF THIS-PROCEDURE:GET-SIGNATURE(rotina) BEGINS "procedure"
       THEN 
           é PROCEDURE
       ELSE
           IF THIS-PROCEDURE:GET-SIGNATURE(rotina) BEGINS "function"
              THEN 
                  é função
    
    
    Eilleen e renato.schlogel curtiram isso.

Compartilhe esta Página