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.