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.
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.