Filtro dinâmico em grid MVC

Boa tarde pessoal!

Estou desenvolvendo uma rotina em MVC que possui 2 grids (crio a estrutura e carrego os dados manualmente, pois não é uma grid de dados diretos de uma tabela). Não tem um cabeçalho, somente as grids.

A grid pai, possui pedidos e algumas características.

A grid filho possui um histórico de alteração dos pedidos da grid pai.

Capturar.PNG

Como eu poderia filtrar a grid filho para que apareça apenas o histórico do pedido posicionado na grid pai?

Estou adicionado as grids com relação no modelo, mas não consegui montar um filtro:


oModel:addGrid('GRID_PEDIDOS','CABEC_FICTICIO',oStrPed,/*Pre-Validacao*/,/*Pos-Validacao*/,/*bPre*/,/*bPost*/,{|| fCarregaPed(ZB1->ZB1_ANO,ZB1->ZB1_MES)}/*bLoad*/)

oModel:addGrid('GRID_HISTORICO','GRID_PEDIDOS',oStrHist,/*Pre-Validacao*/,/*Pos-Validacao*/,/*bPre*/,/*bPost*/,{|| fCarregaHist(ZB1->ZB1_ANO,ZB1->ZB1_MES)}/*bLoad*/)

oModel:SetRelation('GRID_HISTORICO', { { 'HIST_NUM', 'PED_NUM' } }, 'HIST_NUM' )

Obrigada!

Boa tarde!

Como minha rotina utiliza uma estrutura montada manualmente pelo FWFormViewStruct e com dados carregados em forma de array, entendi que o setrelation não irá funcionar.

Para contornar a situação, no changeline da minha grid pai, estou chamando uma função que irá montar a grid filha. Então sempre limpo a grid filha e recarrego. Isso funcionou porque não são muitos dados. Creio que teria problemas de performance se fosse uma grid com muita informação.

Não sei se é a melhor solução, mas ficou bem funcional.

Então, na definição da view:


oView:SetViewProperty("formPedido","CHANGELINE", {{ |oView, cViewID| ChangeLine(oView, cViewID) }})

E a criação da função changeline ficou assim:


// ------------------------------------------------------------------------------------------------
// Quando troca de linha na grid de pedidos, apresenta o histórico do pedido posicionado e posiciona a grid
// de totalizadores pela data de prioridade
// ------------------------------------------------------------------------------------------------
Static Function ChangeLine(oView, cViewID)

Local aRetHist      := {}

Local dDtPrior      := {}

Local nX            := 0
Local nLinha        := 0

Local oModelPad     := Nil
Local oModelPrd     := Nil
Local oModelHist    := Nil
Local oModelTot     := Nil

Default oView := FwViewActive()

// Pegando os modelos de dados
oModelPad  := FWModelActive()
oModelPrd := oModelPad:GetModel('GRID_PEDIDOS')
oModelHist := oModelPad:GetModel('GRID_HISTORICO')
oModelTot := oModelPad:GetModel('GRID_TOTAL')

// Pedido posicionado na grid de pedidos
cPedPos := oModelPrd:GetValue("PED_NUM")

// Busca o histórico do pedido posicionado
aRetHist := fCarregaHist(cPedPos)

// Limpando a grid
oModelHist:ClearData()

// Carrega na grid os dados do histórico do pedido
For nX := 1 to Len(aRetHist)

    If nX > 1
        nLinha := oModelHist:AddLine()
    Else
        nLinha := nX
    Endif

    oModelHist:GoLine(nLinha)

    // Atribui os novos dados na linha
    oModelHist:LoadValue("HIST_NUM",aRetHist[nX][2][1])
    oModelHist:LoadValue("HIST_SEQ",aRetHist[nX][2][2])
    oModelHist:LoadValue("HIST_DATA",aRetHist[nX][2][3])
    oModelHist:LoadValue("HIST_HORA",aRetHist[nX][2][4])
    oModelHist:LoadValue("HIST_USER",aRetHist[nX][2][5])
    oModelHist:LoadValue("HIST_PRIOR",aRetHist[nX][2][6])
    oModelHist:LoadValue("HIST_REMAN",aRetHist[nX][2][7])
Next

// Vai para a primeira linha da grid de histórico depois de preencher
oModelHist:GoLine(1)

// Atualiza a visualização da grid do histórico com os novos dados carregados
oView:Refresh('formHistorico')

dDtPrior := oModelPrd:GetValue("PED_PRIOR")
If !Empty(dDtPrior)
    oModelTot:SeekLine({{"TOT_DATA",dDtPrior}},,.T.)
Else
    oModelTot:GoLine(1)
Endif

// Atualiza a visualização da grid dos totais
oView:Refresh('formTotal')

Return .T.

Obrigado! Eu estava com a mesma dúvida e não entendia porque não funcionava o “setrelation” em uma situação onde o formulário pai é feito de forma manual.