Versão atual:

Salvando dados de um Grid MVC

Boa noite!

Prezados, gostaria de tirar uma dúvida sobre qual a melhor maneira de salvar dados de um Grid MVC.

Atualmente estou usando da maneira como enviei abaixo, mas não sei se é a melhor.

Static Function fCommit(oModel)
Local nX            := 0
Local nY         := 0
local nOpc          := oModel:GetOperation()
Local oForm         := oModel:GetModel('ModelHead')
Local oGrid         := oModel:GetModel('ModelGrid')
Local aCposForm  := oForm:GetStruct():GetFields()
Local aCposGrid  := oGrid:GetStruct():GetFields()

    If(nOpc == MODEL_OPERATION_UPDATE)

        RecLock('ZT8',.F.)

            For nY := 1 To Len(aCposForm)

                If(ZT8->(FieldPos(aCposForm[nY,3])) > 0)

                    ZT8->&(aCposForm[nY,3]) := oForm:GetValue(aCposForm[nY,3])

                EndIf

            Next nY

        ZT8->(MsUnlock())

        For nX := 1 To oGrid:GetQtdLine()

            oGrid:GoLine(nX)
            ZT9->(DbGoTo(oGrid:GetDataID()))

            If(oGrid:IsDeleted())

                RecLock('ZT9',.F.)
                    ZT9->(DbDelete())
                ZT9->(MsUnlock())

            Else

                RecLock('ZT9',ZT9->(EoF()))

                    For nY := 1 To Len(aCposGrid)

                        If(aCposGrid[nY,3] = 'ZT9_CODIGO')

                            ZT9->&(aCposGrid[nY,3]) := ZT8->ZT8_CODIGO

                        Else

                            ZT9->&(aCposGrid[nY,3]) := oGrid:GetValue(aCposGrid[nY,3])

                        EndIf

                    Next nY

                ZT9->(MsUnlock())

            EndIf

        Next    

Return .T.

Existe alguma função que facilite a gravação desses dados ou da forma acima está correta?

Observação : ZT8 = Cabeçalho e ZT9 = Itens.

No caso a seguir, o campo de Filial do grid não é preenchido (ZD1_FILIAL):

Static Function ModelDef
Local oModel     := Nil
Local oStruHead    := FwFormStruct(1,'ZF1')
Local oStruGrid := FwFormStruct(1,'ZD1')

    //Monta o modelo principal
    oModel := MpFormModel():New('FATA20MVC',{ |oModel| fPreVld(oModel) },/*Validação*/,/*Commit*/)

    //Monta os dados do cabeçalho
    oModel:AddFields('ModelHead',,oStruHead)
    oModel:SetPrimaryKey({'ZF1_FILIAL','ZF1_NUM','ZF1_VEND','ZF1_CODCLI','ZF1_LOJA'})

    oModel:GetModel('ModelHead'):SetDescription('Cabecalho')

    //Monta os dados dos itens
    oModel:AddGrid('ModelGrid','ModelHead',oStruGrid,,{ |oGrid| fLinOK(oGrid) },/*bPreGrid*/,/*bProsGrid*/)
    oModel:SetRelation('ModelGrid',{{'ZD1_FILIAL','ZF1_FILIAL'},{'ZD1_NUM','ZF1_NUM'},{'ZD1_VEND','ZF1_VEND'},{'ZD1_CODCLI','ZF1_CODCLI'},{'ZD1_LOJA','ZF1_LOJA'}}, ZD1->(IndexKey(2)))

    oModel:GetModel('ModelGrid'):SetDescription('Itens')        
    oModel:GetModel('ModelGrid'):SetDelAllLine(.T.)
    oModel:GetModel('ModelGrid'):SetOptional(.F.)

    //Seta o nome da rotina na enchoice
    oModel:SetDescription('Pedidos de Troca')

Return(oModel)

Versões (2):

Ver a versão formatada

Salvando dados de um Grid MVC

Comentário

new question