Função que valida todos os campos de uma grid

Função que valida todos os campos de uma grid

Olá pessoal…

Hoje vou mostrar uma função desenvolvida que serve para validar todos os campos de um aCols conforme a parametrização do aHeader.

AdvPL
AdvPL

Imagine o seguinte cenário, você fez um ponto de entrada para atualizar o aCols da tela de pedidos de venda, e deixou com que o usuário digitasse os campos, porém, as validações padrões dos campos não foram executadas, para isso, foi desenvolvido uma rotina, onde ao atualizar o aCols e o aHeader, ele executa as validações de campo e mostra uma mensagem dos campos que deram problema.

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zVldGrid
Executa as validações da Grid
@author Atilio
@since 18/02/2017
@version 1.0
@type function
/*/

User Function zVldGrid()
	Local aArea      := GetArea()
	Local lOk        := .T.
	Local aColsAux   := aCols
	Local aHeaderAux := aHeader
	Local nLinBkp    := n
	Local nAtual     := 0
	Local nColAtu    := 0
	Local cCampoAtu  := 0
	Local cVldPad    := ""
	Local cVldUsr    := ""
	Local cMsgAux    := ""
	Local cVarBkp    := __ReadVar
	
	//Percorre as linhas
	For nAtual := 1 To Len(aColsAux)
		n := nAtual
		
		//Percorre o cabeçalho da linha atual
		For nColAtu := 1 To Len(aHeaderAux)
			cCampoAtu := aHeaderAux[nColAtu][2]
			__ReadVar := cCampoAtu
			cVldPad := GetSX3Cache(cCampoAtu, 'X3_VALID')
			cVldUsr := GetSX3Cache(cCampoAtu, 'X3_VLDUSR')
			
			//Se tiver validação padrão, executa
			If !Empty(cVldPad)
				lOk := &(cVldPad)
				If !lOk
					cMsg += "- Campo "+cCampoAtu+CRLF
				EndIf
			EndIf
			
			//Se tiver ok e tiver validação de usuário, executa
			If lOk .And. !Empty(cVldUsr)
				lOk := &(cVldUsr)
				If !lOk
					cMsg += "- Campo "+cCampoAtu+CRLF
				EndIf
			EndIf
		Next
	Next
	
	//Caso tenha mensagem de erro nos campos, mostra ao usuário
	If !Empty(cMsg)
		Aviso("Atenção", "Erros nos campos: "+CRLF+cMsg, {"OK"}, 2)
	EndIf
	
	__ReadVar := cVarBkp
	n := nLinBkp
	RestArea(aArea)
Return lOk

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

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

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

Deixe uma resposta

%d blogueiros gostam disto: