Perguntas Rotina automatica cadastro cliente

Mais
6 anos 6 meses atrás #32555 por GDantasLS
Boa tarde pessoal!

Estou desenvolvendo uma rotina automatica de cadastro de cliente para integração com um outro sistema, porém o método SetValue ou o VldData não estão validando os dados que estou colocando, por exemplo se eu colocar '99999999999999' no campo CGC ele cadastra o cliente sem problemas.
Segue abaixo fonte exemplo simples:
#include 'protheus.ch'
#Include "FWMVCDEF.CH"

User function RotAutCadCli(aCampos)

	Local oModel
	Local lRet := .T.
	Local cRetorno := ''
	
	Default aCampos := {}
	
	ConOut('Cadastrando cliente... ' + Dtoc(DATE())+' - '+Time())					
	
	oModel := FWLoadModel( 'MATA030' )
	oModel:SetOperation(MODEL_OPERATION_INSERT)
	oModel:Activate()
	
	If Empty(aCampos)
		aAdd( aCampos, { 'A1_COD'		, '000001'						})	     
		aAdd( aCampos, { 'A1_LOJA'		, '01'							})
		aAdd( aCampos, { 'A1_NOME'		, 'TESTE TESTE TESTE'			})
		aAdd( aCampos, { 'A1_NREDUZ'	, 'TESTE TESTE'					})
		aAdd( aCampos, { 'A1_PESSOA'	, 'J'							})
		aAdd( aCampos, { 'A1_TIPO'		, 'S'							})
		aAdd( aCampos, { 'A1_CEP'		, '01000000'					})
		aAdd( aCampos, { 'A1_CGC'		, '99999999999999'				})
		aAdd( aCampos, { 'A1_ZONA'		, '3515061'						})
		aAdd( aCampos, { 'A1_INSCR'		, '123456789012'				})
		aAdd( aCampos, { 'A1_END'		, 'AVENIDA PAULISTA TESTE, 52'	})
		aAdd( aCampos, { 'A1_BAIRRO'	, 'BRAS'						})
		aAdd( aCampos, { 'A1_REGIAO'	, '002'							})
		aAdd( aCampos, { 'A1_COD_MUN'	, '50308'						})
		aAdd( aCampos, { 'A1_UCODDIS'	, '355030801'					})
		aAdd( aCampos, { 'A1_TEL'		, '45698785'					})
		aAdd( aCampos, { 'A1_CONTATO'	, 'JOAO'						})
		aAdd( aCampos, { 'A1_EMAIL'		, 'teste@testeteste.com.br'		})
		aAdd( aCampos, { 'A1_EMAILCO'	, 'teste@testeteste.com.br'		})
		aAdd( aCampos, { 'A1_LOCAL'		, 'C'							})
		aAdd( aCampos, { 'A1_CNAE'		, '4639-7/01'					})
		aAdd( aCampos, { 'A1_VEND'		, '982'							})
		aAdd( aCampos, { 'A1_TPFRET'	, 'C'							})
		aAdd( aCampos, { 'A1_ATIVIDA'	, 'TRAD'						})
		aAdd( aCampos, { 'A1_COND'		, '971'							})
	EndIf
	
	oAux := oModel:GetModel('MATA030_SA1')
	oStruct := oAux:GetStruct()
	aAux := oStruct:GetFields()
	
	For nI := 1 To Len( aCampos )
		// Verifica se os campos passados existem na estrutura do modelo
		If ( nPos := aScan(aAux,{|x| AllTrim( x[3] )== AllTrim(aCampos[nI][1]) } ) ) > 0
		// É feita a atribuição do dado ao campo do Model
			If !( lAux := oModel:SetValue( 'MATA030_SA1', aCampos[nI][1], aCampos[nI][2] ) )
			// Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo)
			// o método SetValue retorna .F. (NÃO ESTA RETORNANDO.)
				lRet := .F.
				Exit
			EndIf
		EndIf
	Next nI
	
	If lRet
		If (lRet := oModel:VldData())//NÃO VALIDA DE ACORDO COM AS VALIDAÇÕES DO SISTEMA E USUARIO.
		// Se os dados foram validados faz-se a gravação efetiva dos dados (commit)
			oModel:CommitData()
			ConOut('Cliente cadastrado. '+Dtoc(DATE())+' - '+Time())
			cRetorno := 'Cliente cadastrado com sucesso. '+Dtoc(DATE())+' - '+Time()
		Else
			aErro := oModel:GetErrorMessage()
			ConOut('Erro: ' + AllToChar( aErro[6] + ' '+ AllToChar( aErro[4] + Dtoc(DATE())+' - '+Time())))
			cRetorno := 'Erro: ' + AllToChar( aErro[6]) + ' '+ AllToChar( aErro[4])
		EndIf
	Else
		// Se os dados não foram validados obtemos a descrição do erro para gerar LOG ou mensagem de aviso
		aErro := oModel:GetErrorMessage()

		ConOut('Erro: ' + AllToChar( aErro[6] + ' '+ AllToChar( aErro[4] + Dtoc(DATE())+' - '+Time())))
		cRetorno := 'Erro: ' + AllToChar( aErro[6]) + ' '+ AllToChar( aErro[4])
	EndIf
	
	oModel:DeActivate()

Return(cRetorno)

Alguém que já desenvolveu alguma rotina automatica com MVC ja passou por isso (dados não serem validados)? teria algum outro parametro?

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 6 meses atrás #32556 por kanaamlrr
Respondido por kanaamlrr no tópico Rotina automatica cadastro cliente
Boa tarde Gustavo.
O número 999999999 é uma exceção na validação de CPF/CNPJ.
Por esse motivo que ele está passando.
Tente colocar uma numeração aleatória.

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 6 meses atrás #32560 por GDantasLS
Respondido por GDantasLS no tópico Rotina automatica cadastro cliente
Bom dia Kanaãm! Obrigado por responder, porém tentei colocar uma numeração aleatória e mesmo assim ele cadastrou, inclusive tenho validações em outros campos na SA1 também e ele não acusa nada.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.115 segundos
Joomla templates by a4joomla