Função para alterar um parâmetro lógico (SX6)

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi para alterar parâmetros do tipo lógico (que pode ser utilizada pelo usuário comum).

Imagine uma situação em que constatemente os usuários solicitama a alteração de um parâmetro para .T. ou para .F., para otimizar esse tempo, desenvolvi uma rotina que pode ser inserida no Ações Relacionadas ou que pode ser chamada em qualquer outro lugar, para a alteração do parâmetro.

Ela é simples, é uma tela com 3 botões, o de Habilitar, o de Desabilitar e o de Cancelar. Abaixo um print.

Função para alterar parâmetro

Função para alterar parâmetro

Sendo que após ela ser confirmada, ela encerra a thread atual, para a rotina ser re-aberta (recarregar o parâmetro na memória).

Abaixo o código fonte desenvolvido.

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zAltPar
Função que altera parâmetros do tipo Lógico (deve ser um parâmetro com conteúdo lógico na SX6, por exemplo, "MV_CHVNFE")
@author Atilio
@since 25/04/2017
@version 1.0
@type function
	@param cParametro, Character, Código do parâmetro que será atualizado
/*/

User Function zAltPar(cParametro)
	Local aArea    := GetArea()
	Local lConsAtu := Nil
	Local lConsNov := Nil
	Local nOpcao   := 0
	Local aBotoes  := {}
	Local cMensag  := ""
	Default cParametro := ""
	
	//Se tiver parâmetro
	If !Empty(cParametro)
		lConsAtu := GetNewPar(cParametro, .F.)
		
		//Adiciona os botões
		aAdd(aBotoes, Iif(lConsAtu,  "Manter Habilitado",   "Habilitar"))   //Opção 1
		aAdd(aBotoes, Iif(!lConsAtu, "Manter Desabilitado", "Desabilitar")) //Opção 2
		aAdd(aBotoes, "Cancelar")                                           //Opção 3
		
		//Mostra o aviso e pega o botão
		cMensag := "Atualmente o parâmetro esta " + Iif(lConsAtu, "HABILITADO", "DESABILITADO") + "." + CRLF
		cMensag += "Deseja alterar?"
		nOpcao := Aviso("Atenção", cMensag, aBotoes, 2)
		
		//Definindo a opção nova
		If nOpcao == 1
			lConsNov := .T.
		ElseIf nOpcao == 2
			lConsNov := .F.
		EndIf
		
		//Se não for nulo
		If lConsNov != Nil
			//Se o conteúdo novo for diferente do atual
			If lConsNov != lConsAtu
				PutMV(cParametro, lConsNov)
				
				Final("Atenção", "A tela será fechada e deve ser aberta novamente!")
			EndIf
		EndIf
	EndIf
	
	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.

2 Responses

  1. Eduardo Amarante disse:

    Que Homem. Meu Deus!

Deixe uma resposta