MVC Execauto MATA010

Amigos, boa tarde!

Por algum motivo que não estou conseguindo identificar o motivo do erro abaixo:


DescriþÒo de erro: [erro no parÔmetroFWFormFieldsModel: Quantidade de campos retornado pelo bloco de carga do modelo:SB1MASTER, Ú menor que a quantidade de campos na estrutura. Verifique o bloco de carga:{|X,Y|FORMLOADFIELD(X,Y)}}Pilha de Erro: [ THREAD ERROR ([12208], HTTP_WT_LJPRODREST_HTTPREST_WEBREST@01|FALSE, THIS) 20/04/2021 12:14:28

erro no parÔmetroFWFormFieldsModel: Quantidade de campos retornado pelo bloco de carga do modelo:SB1MASTER, Ú menor que a quantidade de campos na estrutura. Verifique o bloco de carga:{|X,Y|FORMLOADFIELD(X,Y)} on LOAD(FWFORMFIELDSMODEL.PRX) 04/12/2020 09:31:42 line : 2773

Estou fazendo um fonte para alteração e inclusão de produto via integração com outro sistema.

Segue abaixo o exemplo do meu código usando apenas os campos obrigatórios:


//Pegando o modelo de dados, setando a operação de inclusão
    oModel := FWLoadModel("MATA010")
    oModel:SetOperation(nOpc)
    oModel:Activate()

    //Pegando o model e setando os campos
    //oSB1Mod := oModel:GetModel("SB1MASTER")
    oModel:SetValue("SB1MASTER","B1_GRUPO"      , oParseJSON:B1_GRUPO     )
    oModel:SetValue("SB1MASTER","B1_COD"        , oParseJSON:B1_COD       )
    oModel:SetValue("SB1MASTER","B1_DESC"       , oParseJSON:B1_DESC      )
    oModel:SetValue("SB1MASTER","B1_TIPO"       , oParseJSON:B1_TIPO      )    
    oModel:SetValue("SB1MASTER","B1_UM"         , oParseJSON:B1_XIDIOMA   )
    oModel:SetValue("SB1MASTER","B1_LOCPAD"     , oParseJSON:B1_LOCPAD    )
    oModel:SetValue("SB1MASTER","B1_PRV1"       , oParseJSON:B1_PRV1      )
    oModel:SetValue("SB1MASTER","B1_CODBAR"     , oParseJSON:B1_CODBAR    )
    oModel:SetValue("SB1MASTER","B1_POSIPI"     , oParseJSON:B1_POSIPI    )
    oModel:SetValue("SB1MASTER","B1_TS"         , oParseJSON:B1_TS        )
    oModel:SetValue("SB1MASTER","B1_ORIGEM"     , oParseJSON:B1_ORIGEM    )
    oModel:SetValue("SB1MASTER","B1_GRTRIB"     , oParseJSON:B1_GRTRIB    )
    oModel:SetValue("SB1MASTER","B1_GRPTI"      , oParseJSON:B1_GRPTI     )
    oModel:SetValue("SB1MASTER","B1_XSINOPS"    , oParseJSON:B1_XSINOPS   )
    oModel:SetValue("SB1MASTER","B1_XIDIOMA"    , oParseJSON:B1_XIDIOMA   )
    oModel:SetValue("SB1MASTER","B1_XEDITOR"    , oParseJSON:B1_XEDITOR   )
    oModel:SetValue("SB1MASTER","B1_XAUTOR"     , oParseJSON:B1_XAUTOR    )
    oModel:SetValue("SB1MASTER","B1_XAUTOR2"    , oParseJSON:B1_XAUTOR2   )
    oModel:SetValue("SB1MASTER","B1_XANOEDI"    , oParseJSON:B1_XANOEDI   )
    oModel:SetValue("SB1MASTER","B1_XLARGUR"    , oParseJSON:B1_XLARGUR   )
    oModel:SetValue("SB1MASTER","B1_XALTURA"    , oParseJSON:B1_XALTURA   )
    oModel:SetValue("SB1MASTER","B1_XCOMPRI"    , oParseJSON:B1_XCOMPRI   )
    oModel:SetValue("SB1MASTER","B1_PESBRU"     , oParseJSON:B1_PESBRU    )
    oModel:SetValue("SB1MASTER","B1_XTPENC"     , oParseJSON:B1_XTPENC    )
    oModel:SetValue("SB1MASTER","B1_PESO"       , oParseJSON:B1_PESO      )
    oModel:SetValue("SB1MASTER","B1_SERIE"      , oParseJSON:B1_SERIE     )
    oModel:SetValue("SB1MASTER","B1_XNRPAGI"    , oParseJSON:B1_XNRPAGI   )
    oModel:SetValue("SB1MASTER","B1_XPAIS"      , oParseJSON:B1_XPAIS     )
    oModel:SetValue("SB1MASTER","B1_XCOLECA"    , oParseJSON:B1_XCOLECA   )

    //Se conseguir validar as informações
    If oModel:VldData()

        //Tenta realizar o Commit
        If oModel:CommitData()
            lOk := .T.

            //Se não deu certo, altera a variável para false
        Else
            lOk := .F.
        EndIf

    //Se não conseguir validar as informações, altera a variável para false
    Else
        lOk := .F.
    EndIf

    //Se não deu certo a inclusão, mostra a mensagem de erro
    If ! lOk
        //Busca o Erro do Modelo de Dados
        aErro := oModel:GetErrorMessage()

        aAdd(aMensag, {'{"Retorno":"200"' +;
        ',"Id do formulário de origem:":'  + '"' + cValToChar(aErro[01]) + '"'+;
        ',"Id do campo de origem: "    :'  + '"' + cValToChar(aErro[02]) + '"'+;
        ',"Id do formulário de erro: " :'  + '"' + cValToChar(aErro[03]) + '"'+;
        ',"Id do campo de erro: "      :'  + '"' + cValToChar(aErro[04]) + '"'+;
        ',"Id do erro: "               :'  + '"' + cValToChar(aErro[05]) + '"'+;
        ',"Mensagem do erro: "         :'  + '"' + cValToChar(aErro[06]) + '"'+;
        ',"Mensagem da solução: "      :'  + '"' + cValToChar(aErro[07]) + '"'+;
        ',"Valor atribuído: "          :'  + '"' + cValToChar(aErro[08]) + '"'+;
        ',"Valor anterior: "           :'  + '"' + cValToChar(aErro[09]) + '"}'})

        //Mostra mensagem de erro
        lRet := .F.
        ConOut("Erro!")
    Else
        lRet := .T.
        ConOut("Produto incluido!")
    EndIf

    //Desativa o modelo de dados
    oModel:DeActivate()

Alguém já passou por isso?

Raphael, que operação você está fazendo? Qual o valor de nOpc?

Oi Daniel, boa tarde! Estou passando 4 (MODEL_OPERATION_UPDATE)

Raphael,

Esse erro costuma ocorrer quando a tabela não está posicionada, normalmente para as operações de alteração, exclusão, visualização.


Quando vamos efetuar a atualização de um registro via MVC, precisamos posicionar a tabela no registro, então antes de efetuar instancia e ativação do modelo, posiciona a SB1 no registro que deseja alterar, algo como:


dbSelectArea("SB1")

if dbSeek(xFilial("SB1") + "MEUPRODUTO")
    //Seu código...
else
    lRet := .F.
    ConOut("Produto inexistente.")
endif

Essa parte costuma ser feita pelo browse das rotinas, mas como você está utilizando o modelo apartado, é necessário fazer na mão.

Obrigado Daniel. Achava que ele já posicionava por padrão quando passava no formulário. Te agradeço. Vi que pelo MsExecauto funcionou mesmo sem posicionar.

Pode não ser uma regra, mas é costume ao desenvolver um ExecAuto, pegar os dados da chave e fazer um seek :slight_smile:

Show, a dica me ajudo!!!!!!!!!