1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Urgente Chamar programa "filho" sem passar pelo programa "pai"

Discussão em 'Progress 4GL' iniciado por ds201, Agosto 19, 2021.

  1. ds201

    ds201 Membro Participativo

    Boa tarde a todos

    Meu cliente precisa executar um programa "filho" diretamente partindo de um programa customizado, sem usar o programa que originalmente fazia a tarefa de executar o programa "filho".
    Os programas em questão usam as técnicas de BO.

    Internamente o programa chamador prepara os parâmetros que serão enviados para o programa chamado.
    O que esta complicando o meu trabalho é que o programa chamado recebe três parâmetros, e eu não estou conseguindo fazer a montagem dos mesmos.
    Alguém tem um exemplo que possa me passar?

    Obrigado


    Programa chamador:
    &Scoped-define FRAME-NAME fPage0
    &Scoped-define SELF-NAME btAdd
    &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btAdd wMasterDetail
    ON CHOOSE OF btAdd IN FRAME fPage0 /* Add */
    OR CHOOSE OF MENU-ITEM miAdd IN MENU mbMain DO:
    RUN addRecord IN THIS-PROCEDURE (INPUT "fxx/filho.w":U).
    END.

    /* _UIB-CODE-BLOCK-END */
    &ANALYZE-RESUME


    Programa chamado (fxx/filho.w):
    /* Parameters Definitions --- */
    DEFINE INPUT PARAMETER prTable AS ROWID NO-UNDO.
    DEFINE INPUT PARAMETER pcAction AS CHARACTER NO-UNDO.
    DEFINE INPUT PARAMETER phCaller AS HANDLE NO-UNDO.


  2. rafael.andrade

    rafael.andrade Membro Master Equipe de Suporte

    Porque você não faz o RUN direto?

    Código:
    DEF VAR vProg AS HANDLE.
    DEF VAR prTable AS ROWID.
    DEF VAR pcAction AS CHARACTER.
    DEF VAR phCaller AS HANDLE.
    
    RUN fxx/filho.w PERSISTENT SET vProg(INPUT prTable,
                                         INPUT pcAction,
                                         INPUT phCaller).
    
  3. rafael.andrade

    rafael.andrade Membro Master Equipe de Suporte

    Ou somente:

    Código:
    DEF VAR prTable AS ROWID.
    DEF VAR pcAction AS CHARACTER.
    DEF VAR phCaller AS HANDLE.
    
    RUN fxx/filho.w (INPUT prTable,
                     INPUT pcAction,
                     INPUT phCaller).
    
  4. ds201

    ds201 Membro Participativo

    Muito obrigado pelo apoio.
    Valeu.
  5. ds201

    ds201 Membro Participativo

    Boa noite

    Montei a lógica assim:

    DEF VAR prTable AS ROWID.
    DEF VAR pcAction AS CHAR.
    DEF VAR phCaller AS HANDLE.

    find last minha-tabela
    no-lock
    no-error.

    assign
    prTable = rowid(minha-tabela)
    pcAction = "Add"
    phCaller = THIS-PROCEDURE:handle.

    RUN fxx/filho.w (INPUT prTable,
    INPUT pcAction,
    INPUT phCaller).


    Mas esta dando o erro 6456. A mensagem de erro diz que
    "Procedure xxx.ped has no entry point for getDBOParentHandle. (6456)"

    Tenho a impressão que o erro esta na linha
    phCaller = THIS-PROCEDURE:handle.
    Mas não tenho certeza.
    Alguma luz?
  6. ds201

    ds201 Membro Participativo

    Continuando...

    Eu inclui no programa chamador o código abaixo:

    procedure getDBOParentHandle :

    define output parameter pDBOHandle as handle no-undo.
    return "OK":U.
    end.

    Que eu não tenho certeza se esta correto.
    Agora o erro reportado e:

    O programa (chamado) será finalizado pois os objetos de negócios necessários para a execução não foram inicializados corretamente ou o usuário corrente não tinha permissão para executa-los.

    A coisa só piora...




Compartilhe esta Página