Arquivos ADVPL | Dicas e soluções - Logos Technology https://logostechnology.com.br/category/advpl/ Consultoria Especializada no Sistema de Gestão TOTVS e Mobilidade para Automação de Processos Thu, 18 Jan 2024 14:57:15 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.9 https://logostechnology.com.br/wp-content/uploads/2022/03/favicon.png Arquivos ADVPL | Dicas e soluções - Logos Technology https://logostechnology.com.br/category/advpl/ 32 32 ADVPL: Tipos e Parâmetros da Função ParamBox em ADVPL https://logostechnology.com.br/funcao-parambox-em-advpl/ https://logostechnology.com.br/funcao-parambox-em-advpl/#respond Thu, 13 Apr 2023 17:35:59 +0000 https://logostechnology.com.br/?p=4667 A função ParamBox cria uma tela de interação com usuário com os parâmetros passado pra ela como array. Essa informação não está mais disponível no TDN, a totvs não recomenda o uso da ParamBox por ser uma função interna. O conteúdo publicado aqui é de origem do ano de 2012 e pode ter sofrido alterações. […]

O post ADVPL: Tipos e Parâmetros da Função ParamBox em ADVPL apareceu primeiro em Logos Technology.

]]>
A função ParamBox cria uma tela de interação com usuário com os parâmetros passado pra ela como array.

Essa informação não está mais disponível no TDN, a totvs não recomenda o uso da ParamBox por ser uma função interna. O conteúdo publicado aqui é de origem do ano de 2012 e pode ter sofrido alterações. Fica de responsabilidade do desenvolvedor querer usá-lo ou não.

Segue alguns tipos de ParamBox: 

aAdd(aParamBox,{1,”Data”  ,Ctod(Space(8)),””,””,””,””,50,.F.}) // Tipo data
// Tipo 1 -> MsGet()
//           [2]-Descricao
//           [3]-String contendo o inicializador do campo
//           [4]-String contendo a Picture do campo
//           [5]-String contendo a validacao
//           [6]-Consulta F3
//           [7]-String contendo a validacao When
//           [8]-Tamanho do MsGet
//           [9]-Flag .T./.F. Parametro Obrigatorio ?

aAdd(aParamBox,{2,”Informe o mês”,1,aCombo,50,””,.F.})
// Tipo 2 -> Combo
//           [2]-Descricao
//           [3]-Numerico contendo a opcao inicial do combo
//           [4]-Array contendo as opcoes do Combo
//           [5]-Tamanho do Combo
//           [6]-Validacao
//           [7]-Flag .T./.F. Parametro Obrigatorio ?
// Cuidado, há um problema nesta opção quando selecionado a 1ª opção.

aAdd(aParamBox,{3,”Mostra deletados”,1,{“Sim”,”Não”},50,””,.F.})
// Tipo 3 -> Radio
//           [2]-Descricao
//           [3]-Numerico contendo a opcao inicial do Radio
//           [4]-Array contendo as opcoes do Radio
//           [5]-Tamanho do Radio
//           [6]-Validacao
//           [7]-Flag .T./.F. Parametro Obrigatorio ?

aAdd(aParamBox,{4,”Marca todos ?”,.F.,”Marque todos se necessário for.”,90,””,.F.})
// Tipo 4 -> Say + CheckBox
//           [2]-Descricao
//           [3]-Indicador Logico contendo o inicial do Check
//           [4]-Texto do CheckBox
//           [5]-Tamanho do Radio
//           [6]-Validacao
//           [7]-Flag .T./.F. Parametro Obrigatorio ?

aAdd(aParamBox,{5,”Marca todos ?”,.F.,50,””,.F.})
// Tipo 5 -> Somente CheckBox
//           [2]-Descricao
//           [3]-Indicador Logico contendo o inicial do Check
//           [4]-Tamanho do Radio
//           [5]-Validacao
//           [6]-Flag .T./.F. Parametro Obrigatorio ?

aAdd(aParamBox,{6,”Buscar arquivo”,Space(50),””,””,””,50,.F.,”Todos os arquivos (*.*) |*.*”})
// Tipo 6 -> File
//           [2]-Descricao
//           [3]-String contendo o inicializador do campo
//           [4]-String contendo a Picture do campo
//           [5]-String contendo a validacao
//           [6]-String contendo a validacao When
//           [7]-Tamanho do MsGet
//           [8]-Flag .T./.F. Parametro Obrigatorio ?
//           [9]-Texto contendo os tipos de arquivo, exemplo: “Arquivos .CSV |*.CSV”
//           [10]-Diretorio inicial do cGetFile
//           [11]-Número relativo a visualização, podendo ser por diretório ou por arquivo (0,1,2,4,8,16,32,64,128)

aAdd(aParamBox,{7,”Monte o filtro”,”SX5″,”X5_FILIAL==xFilial(‘SX5’)”})
// Tipo 7 -> Montagem de expressao de filtro
//           [2]-Descricao
//           [3]-Alias da tabela
//           [4]-Filtro inicial

aAdd(aParamBox,{8,”Digite a senha”,Space(15),””,””,””,””,80,.F.})
// Tipo 8 -> MsGet Password
//           [2]-Descricao
//           [3]-String contendo o inicializador do campo
//           [4]-String contendo a Picture do campo
//           [5]-String contendo a validacao
//           [6]-Consulta F3
//           [7]-String contendo a validacao When
//           [8]-Tamanho do MsGet
//           [9]-Flag .T./.F. Parametro Obrigatorio ?

aAdd(aParamBox,{9,”Texto aleatório, apenas demonstrativo.”,150,7,.T.})
// Tipo 9 -> Somente uma mensagem, formato de um título
//           [2]-Texto descritivo
//           [3]-Largura do texto
//           [4]-Altura do texto
//           [5]-Valor lógico sendo: .T. => fonte tipo VERDANA e .F. => fonte tipo ARIAL

aAdd(aParamBox,{10,”Cliente”,Space(6),”SA1″,40,”C”,6,”.T.”})
// Tipo 10 -> Range de busca
//            [2] = Título
//            [3] = Inicializador padrão
//            [4] = Consulta F3
//            [5] = Tamanho do GET
//            [6] = Tipo do dado, somente (C=caractere e D=data)
//            [7] = Tamanho do espaço
//            [8] = Condição When

aAdd(aParamBox,{11,”Informe o motivo”,””,”.T.”,”.T.”,.T.})
// Tipo 11 -> MultiGet (Memo)
//            [2] = Descrição
//            [3] = Inicializador padrão
//            [4] = Validação
//            [5] = When
//            [6] = Campo com preenchimento obrigatório .T.=Sim .F.=Não (incluir a validação na função ParamOk)

// Parametros da função Parambox()
// ——————————-
// 1 – < aParametros > – Vetor com as configurações
// 2 – < cTitle >      – Título da janela
// 3 – < aRet >        – Vetor passador por referencia que contém o retorno dos parâmetros
// 4 – < bOk >         – Code block para validar o botão Ok
// 5 – < aButtons >    – Vetor com mais botões além dos botões de Ok e Cancel
// 6 – < lCentered >   – Centralizar a janela
// 7 – < nPosX >       – Se não centralizar janela coordenada X para início
// 8 – < nPosY >       – Se não centralizar janela coordenada Y para início
// 9 – < oDlgWizard >  – Utiliza o objeto da janela ativa
//10 – < cLoad >       – Nome do perfil se caso for carregar
//11 – < lCanSave >    – Salvar os dados informados nos parâmetros por perfil
//12 – < lUserSave >   – Configuração por usuário

// Caso alguns parâmetros para a função não seja passada será considerado DEFAULT as seguintes abaixo:
// DEFAULT bOk   := {|| (.T.)}
// DEFAULT aButtons := {}
// DEFAULT lCentered := .T.
// DEFAULT nPosX  := 0
// DEFAULT nPosY  := 0
// DEFAULT cLoad     := ProcName(1)
// DEFAULT lCanSave := .T.
// DEFAULT lUserSave := .F.

Visite também (ADVPL: Como chamar uma função de usuário no Protheus?)

ADVPL: Como chamar uma função de usuário no Protheus?

O post ADVPL: Tipos e Parâmetros da Função ParamBox em ADVPL apareceu primeiro em Logos Technology.

]]>
https://logostechnology.com.br/funcao-parambox-em-advpl/feed/ 0
ADVPL: Como Chamar uma Função de Usuário no Protheus? https://logostechnology.com.br/advpl-como-chamar-uma-funcao-de-usuario-no-protheus/ https://logostechnology.com.br/advpl-como-chamar-uma-funcao-de-usuario-no-protheus/#respond Wed, 12 Apr 2023 16:52:56 +0000 https://logostechnology.com.br/?p=4662 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 […]

O post ADVPL: Como Chamar uma Função de Usuário no Protheus? apareceu primeiro em Logos Technology.

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

O post ADVPL: Como Chamar uma Função de Usuário no Protheus? apareceu primeiro em Logos Technology.

]]>
https://logostechnology.com.br/advpl-como-chamar-uma-funcao-de-usuario-no-protheus/feed/ 0