Nosso Blog

ADVPL: Como Chamar uma Função de Usuário no Protheus?

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 possi­vel 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

Está gostando do conteúdo? Compartilhe!

Como você quer falar com a gente?

Queremos te ouvir e apresentar uma Consultoria Especializada TOTVS® diferente do que existe no mercado.

Atendemos todo o brasil

Ligue

0800 800 0515

E-mail

contato@logostechnology.com.br

São Paulo

R. Dr. César, 1161 – Conjunto 1004 – Santana, São Paulo – SP, 02013-004

Campinas

R. Maria Conceição F. de Andrade, 621, Nova Campinas, SP, 13092-190

Redes sociais

Logos Technology © 2023 – Todos os direitos reservados