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

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 Moderador 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 Moderador 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