Olá, tenho uma rotina em MVC, modelo pai filho, onde ao efetuar INCLUSÃO dá o erro abaixo
THREAD ERROR ([8024], luiz.poleza, ARM103NB008) 11/10/2019 16:24:29
erro no parâmetro FWFormModel: A estrutura principal obrigatoriamente não pode ser uma estrutura que não sofre modificações. on FWFORMMODEL:COMMITDATA(FWFORMMODEL.PRX) 12/07/2019 17:27:31 line : 2235
Consegui identificar que isso ocorre quando eu não preencho/altero um dos campos do cabeçalho, porém não é necessário, pois são informações como numeração sequencial (uso getsxenum), data/hora e usuário que incluiu. Tudo já traz preenchido pelo inicializador padrão do campo.
Se eu vou em um dos campos apago e preencho denovo (mesmo com os mesmos dados) então ele salva com sucesso e sem erro.
Alguém teria uma solução? pois realmente não é necessário alterar o cabeçalho, eu já trago ele todo preenchido
Sim, exatamente, isso acontece quando o cabeçalho não sofre alterações. O problema é que o cabeçalho tem 5 campos no total, sendo 4 obrigatórios. Todos os 4 obrigatórios, já são preenchidos automaticamente (valor inicial configurado no dicionario/configurador). São campos de data, hora, usuario e filial, e são apenas visualizar. o quinto campo, que não é obrigatorio, é “observações”. se o usuário não clica nele e digita nada, dá esse erro. Se entra no campo, digita qualquer caracter e apaga (mesmo confirmando em branco) então funciona… bizarro
TODOS os campos, com exceção das observações, estão marcados obrigatórios, apenas VISUALIZAR, e já preenchem automaticamente pela própria configuração do campo no configurador
e é exatamente este o problema: se eu não preencho nada no observações (ou preencho e apago, para gravar em branco) ele dá esse errorlog
na prática, só funciona se alguem digitar alguma coisa no campo observações ou digitar e apagar
Coloque uma validação em algum campo da Grid que atualize um campo do cabeçalho como a Hora, por exemplo. Com isso o cabeçalho terá recebido uma alteração e a gravação será bem sucedida.
Para contornar esse problema, eu criei um campo falso na ModelDef na estrutura que apresentava o erro:
oStruCab:addField("Fake","Fake",'FAKE','C',1,0)
Depois na ViewDef adicionei essa linha onde eu crio uma funçãozinha que vai preencher o campo falso criado
oView:setCloseOnOk({|oView| fCloseView(oView) })
A minha funçãozinha é essa, onde CAB é o id do meu submodelo (meu cabeçalho, no caso):
static function fCloseView(oView as object)
local oModel := oView:getModel("CAB")
oModel:loadValue("FAKE","1")
return .T.
Preenchi o campo falso (que chamei de FAKE) com o conteúdo "1" (podia ser qualquer coisa, como 'x' por exemplo). Não criei esse campo na estrutura da View porque eu não queria que ele mostrasse em tela para o usuário.