Mensagem do
GDANTASLS
em
4/13/2018
as
15:42
hs
Local:
sp
Registrada:
6/24/2015
Postagem:
7
|
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?
|
|