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.

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.

Deixe uma resposta