A partir do release 12.1.25 não é possível chamar uma função de usuário (User Function) pelo Lançamento Padronizado, maneira que muitos desenvolvedores ADVPL utilizavam para testarem e validarem suas rotinas desenvolvidas. Dessa forma, o desenvolvedor deve criar o acesso a rotina no menu pelo configurador do Protheus a fim de executá-la.
Uma maneira de agilizar esse processo é criar uma função de usuário que “chame” outras funções conforme for passado por parâmetro.
Exemplo lógico:
– Crie uma função de usuário com o nome por exemplo: ExecFonte()
– Nessa função crie uma tela onde o usuário possa informar no parâmetro a função que ele deseja executar.
– A função ExecFonte() valida se existe no RPO a função digitada e a executa.
Dessa forma você pode criar no menu do Protheus o acesso a função ExecFonte() apenas uma vez e por meio dela pode chamar diversas funções, a qual deseja testar e validar. Isso visa diminuir seu tempo nos testes, visto que não será necessário adicionar no menu do Protheus as novas rotinas a medida que for desenvolvendo.
Segue exemplo da User Function:
#INCLUDE "PROTHEUS.CH"
/*/{Protheus.doc} ExecFonte
(Essa user function tende a executar uma funcao de usuario que seja informada por parametro
A partir do release 25 do protheus nao e mais possivel executar funcoes de usuario pelo
lancamento padronizado. Sendo assim, criamos essa rotina para que seja colocada no menu do Protheus 12
e por meio dela o desenvolver possa executar suas rotinas sem a necessidade de ficar colocando-as nos menus)
@type Function
@author Augusto
@since 04/06/2020
@version 0.02
@see (https://logostechnology.zendesk.com/hc/pt-br/articles/360049701433-Como-chamar-uma-fun%C3%A7%C3%A3o-de-usu%C3%A1rio-no-Protheus-)
/*/
USER FUNCTION ExecFonte()
LOCAL cNomefuncao := "" //variavel que deve receber o nome do fonte digitado
LOCAL aPergs := {} //Array que armazena as perguntas do ParamBox()
//adiciona elementos no array de perguntas
aAdd( aPergs , {1, "Nome do fonte ", space(10), "", "", "", "", 40, .T.} )
//If que valida o OK do parambox() e passa o conteudo do parametro para a variavel
IF ParamBox(aPergs, "DIGITAR NOME DO ARQUIVO .PRW" )
cNomefuncao := ALLTRIM( MV_PAR01 )
ELSE
RETURN
ENDIF
//Caso o usuario digite o U_ ou () no nome do fonte, retira esses caracteres
cNomefuncao := StrTran( cNomefuncao , "U_" , "" )
cNomefuncao := StrTran( cNomefuncao , "()" , "" )
//Valida se a funcao existe no rpo
IF !FindFunction( cNomefuncao )
MsgAlert( "Funcao nao encontrada no RPO" , "ops!" )
RETURN u_ExecFonte()
ENDIF
//complementa a variavel e executa macro substituicao chamando a rotina
cNomefuncao := "U_"+cNomefuncao+"()"
&cNomefuncao
RETURN
Conheça mais sobre nossa consultoria Totvs Protheus e obtenha o máximo de resultado por um custo acessível Consultoria TOTVS