Chamar rotina por um botão

Bom dia, é possivel e se sim como faço, para chamar uma tela ou uma user function por um botão dentro de uma rotina?

seria criar um botão dentro da tabela de Preços > F11 e esse botão chamar a rotina Preços de Mercado

Talvez terá que usar algum ponto de entrada, pois nao pode modificar o fonte padrão e neste ponto usará a função (nLastkey) ela gerá ações a partir de um botão escolhido. aiii chama a function desejada.

adicionei em uma outro comentario meu objetivo com imagens, se puder olhar porfavor

Olá Andreas, segue o PE OM010MNU responsável por adicionar novas opções no menu do fonte Omsa010, basta trocar o u_suaFuncao() e MsgInfo pela chamada do seu fonte.

Se resolver marca como resposta!


#INCLUDE "PROTHEUS.CH"
/*/{Protheus.doc} User Function OMSA010
    (Este Ponto de Entrada permite incluir novas opções no array aRotina.
    Ponto de Entrada disparado antes da abertura do Browser, caso o Browser inicial da rotina esteja habilitado, ou antes da apresentação do Menu de opções, caso o Browser inicial esteja desabilitado.)
    @type  Function
    @author Leandro Lemos
    @since 27/07/2023
    @version P12
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
    @example
    (examples)
    @see (https://tdn.totvs.com/pages/releaseview.action?pageId=631314486)
    /*/
User Function OM010MNU()
    Private bFuncF11        := {||MsgInfo("Pressionou F11","F11")}

    aadd(aRotina,{'Preços de Mercado','u_SuaFuncao()' , 0 , 3,0,NIL})

    SETKEY(VK_F11,bFuncF11)
Return

Valeu, vai ser útil para mim tbm

bom dia, adicionei em uma outro comentario meu objetivo com imagens, se puder olhar porfavor

Criei um botão, da mesma forma do confirmar e o do cancelar, e queria que esse botão chamasse outro fonte ao clicar nele (fonte que o botão está, não é padrão e sim criado por nós, assim como o fonte a ser chamado)

como nas imagens a baixo(botao preços de mercado)

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Andreas, para chamar outra função através do botão, basta especificar a função desejada no Action.

Exemplo:


// onde U_SUAFUNCAO() é a função que deseja chamar
@030, 600 Button oBtn1 Prompt 'Confirmar' Size 35, 15 Action (U_SUAFUNCAO()) Of Panel Pixel

Lembrando que se a função estiver em outro fonte (sem ser o atual da tela), ela precisa ser uma User Function para que você tenha acesso.

Opcionalmente, você pode colocar essa chamada tanto via botão ou via tecla do teclado, exemplo:


// dessa forma será executado tanto se o usuário clicar no botão ou se apertar F11

SetKey(VK_F11, { || U_SUAFUNCAO() })

@030, 600 Button oBtn1 Prompt 'Confirmar (F11)' Size 35, 15 Action (U_SUAFUNCAO()) Of Panel Pixel

Documentação SetKey: https://tdn.totvs.com/display/tec/SetKey

Mais informações sobre @...Button: https://solutio.inf.br/button/