Validar dois campos de uma grid num ponto de entrada em MVC

No artigo de hoje, vamos demonstrar como em um ponto de entrada em MVC, percorrer os dados de uma grid e validar dois campos distintos.

 

Se você precisar percorrer uma grid num p.e. MVC e validar dois campos diferentes linha a linha, montamos esse exemplo que pode ajudar no seu cenário.

 

Nele vamos usar a rotina MATA061, do cadastro de Produtos x Fornecedor (tabela SA5). E como vai ser a lógica:

  1. No ponto de entrada, vamos usar o trecho FORMPOS (o famoso TudoOk da rotina, ao clicar no botão confirmar, fazer as validações)
  2. Vamos capturar o modelo ativo em memória com FWModelActive
  3. Depois vamos capturar o modelo da grid, com nome MdGridSA5
  4. Nisso será feito um laço de repetição com a quantidade de linhas (método Length)
  5. A cada linha vai ser posicionada (método GoLine)
  6. Se o campo A5_LOTEMIN estiver preenchido, o campo A5_UNID também tem que estar
  7. Caso um campo esteja preenchido e o outro vazio, vai ser marcado o retorno como .F., e exibido uma mensagem de falha e encerrado o laço

 

Abaixo o código fonte conforme a lógica descrita acima:

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} User Function MATA061
Produtos x Fornecedores
@author Atilio
@since 23/10/2024
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
     *-------------------------------------------------*
     Por se tratar de um p.e. em MVC, salve o nome do 
     arquivo diferente, por exemplo, MATA061_pe.prw 
     *-----------------------------------------------*
     A documentacao de como fazer o p.e. esta disponivel em https://tdn.totvs.com/pages/releaseview.action?pageId=208345968 
@see http://autumncodemaker.com
/*/

User Function MATA061()
	Local aArea := FWGetArea()
	Local aParam := PARAMIXB 
	Local xRet := .T.
	Local oObj := Nil
	Local cIdPonto := ""
	Local cIdModel := ""
    Local nLinha := 0
    Local oModelPad
    Local oModelGrid
	
	//Se tiver parametros
	If aParam != Nil
		
		//Pega informacoes dos parametros
		oObj := aParam[1]
		cIdPonto := aParam[2]
		cIdModel := aParam[3]
		
		//Na validacao total do formulario 
		If cIdPonto == "FORMPOS" 
			oModelPad := FWModelActive()
            oModelGrid := oModelPad:GetModel("MdGridSA5")

            For nLinha := 1 To oModelGrid:Length()
                oModelGrid:GoLine(nLinha)

                //Se o campo A estiver preenchido, mas o campo B estiver vazio
                If ! Empty(oModelGrid:GetValue("A5_LOTEMIN")) .And. Empty(oModelGrid:GetValue("A5_UNID"))
                    xRet := .F.
                    ExibeHelp("HELP_MATA061", "Falha na linha " + cValToChar(nLinha), "Quando for informado o Lote Minimo, informe também a Unidade!")
                    Exit
                EndIf
            Next
			
		EndIf
		
	EndIf
	
	FWRestArea(aArea)
Return xRet

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.

Deixe uma resposta

Terminal de Informação