Função para criar parâmetros (SX6) via código fonte em AdvPL

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi que serve para criar parâmetros específicos via código fonte em AdvPL.

AdvPL

AdvPL

A função recebe um array, com 4 posições, a primeira é o código do parâmetro, a segunda é o tipo, a terceira é a descrição e a última posição é o conteúdo. Abaixo um exemplo de como executar.

Local aPars := {}

aAdd(aPars, {"MV_X_EMAIL", "C", "e-Mail da empresa",        "email@teste.com"} )
aAdd(aPars, {"MV_X_HPAGE", "C", "Site da empresa",          "www.teste.com"} )
aAdd(aPars, {"MV_X_USERS", "C", "Usuários administradores", "000000;"} )

u_zCriaPar(aPars)

A utilidade é quando você deseja replicar vários parâmetros em várias bases, assim preparando um único fonte, e depois executando no fórmulas das bases.

Abaixo o código fonte completo.

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zCriaPar
Função para criação de parâmetros (SX6)
@type function
@author Atilio
@since 12/11/2015
@version 1.0
	@param aPars, Array, Array com os parâmetros do sistema
	@example
	u_zCriaPar(aParametros)
	@see https://terminaldeinformacao.com
	@obs Abaixo a estrutura do array:
		[01] - Parâmetro (ex.: "MV_X_TST")
		[02] - Tipo (ex.: "C")
		[03] - Descrição (ex.: "Parâmetro Teste")
		[04] - Conteúdo (ex.: "123;456;789")
/*/

User Function zCriaPar(aPars)
	Local nAtual		:= 0
	Local aArea		:= GetArea()
	Local aAreaX6		:= SX6->(GetArea())
	Default aPars		:= {}
	
	DbSelectArea("SX6")
	SX6->(DbGoTop())
	
	//Percorrendo os parâmetros e gerando os registros
	For nAtual := 1 To Len(aPars)
		//Se não conseguir posicionar no parâmetro cria
		If !(SX6->(DbSeek(xFilial("SX6")+aPars[nAtual][1])))
			RecLock("SX6",.T.)
				//Geral
				X6_VAR		:=	aPars[nAtual][1]
				X6_TIPO	:=	aPars[nAtual][2]
				X6_PROPRI	:=	"U"
				//Descrição
				X6_DESCRIC	:=	aPars[nAtual][3]
				X6_DSCSPA	:=	aPars[nAtual][3]
				X6_DSCENG	:=	aPars[nAtual][3]
				//Conteúdo
				X6_CONTEUD	:=	aPars[nAtual][4]
				X6_CONTSPA	:=	aPars[nAtual][4]
				X6_CONTENG	:=	aPars[nAtual][4]
			SX6->(MsUnlock())
		EndIf
	Next
	
	RestArea(aAreaX6)
	RestArea(aArea)
Return

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

8 Responses

  1. Juca disse:

    Parabéns pelo site. Otimas informações, principalmente sobre Protheus, que é muito escasso encontrar coisas legais e bacanas na internet. Até mais…

  2. Pedro disse:

    Seu post foi muito útil!! Muito obrigado!
    Só um detalhe, na linha 21 tem essa atribuição: Local aPars := {}
    Ela está limpando o array que está vindo como parâmetro.

  3. Ricardo Batista Mendes disse:

    Está disparando erro quando tento criar um parametro do tipo data…
    Será que precisa de algum tratamento especifico?

  4. Jose de Aguiar Ferreira Real Neto disse:

    Boa tarde

    Esse tipo de função não passa pelo codanalyse. Sei que essa função tem no maximo 4 anos. Teria alguma dica?

    • Dan_Atilio disse:

      Bom dia Jose.
      No caso qualquer manipulação do dicionário via código fonte não poderá ser mais realizada via AdvPL.
      Então caso você precise manipular parâmetros customizados, você pode criar uma tabela, por exemplo Z01, e nela você cadastra o parâmetro e faz a manipulação dele.
      Já para parâmetros padrões do sistema, não vejo alternativas por enquanto, há não ser que a TOTVS libere alguma forma de manipular, ai talvez seria interessante abrir um chamado perguntando se eles irão criar algum PutMV novo.

Deixe uma resposta