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

UPDATE – Pessoal, não é recomendado utilizar atualização direta em tabelas do dicionário de dados, esse exemplo, é de meados de 2015!

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        := {}
     
    Alert("Função Descontinuada, Cuidado!")

    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 (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

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

Terminal de Informação