Relacionamento entre campos com RecNo

Boa tarde!

Estou criando dois grids que se relacionam em MVC.

O relacionamento entre as tabelas se dá pelo campo RECNO, isso é: o campo ZFT_RECZFS faz relacionamento com o RECNO da tabela ZFS.

A query SQL seria assim:


SELECT * FROM ZFT010 ZFT
INNER JOIN ZFS010 ZFS ON
    ZFS.ZFS_FILIAL = ZFT.ZFT_FILIAL AND
    ZFS.R_E_C_N_O_ = ZFT.ZFT_RECZFS AND
    ZFS.D_E_L_E_T_ = ''
WHERE
    ZFT.D_E_L_E_T_ = ''

Ao criar os grids no Protheus, estou tendo dificuldade ao criar o relacionamento. Em todos os testes que efetuei, recebi um error log. Estou o criando da seguinte maneira:


oModel:AddGrid('ModelZFT','ModelZFS',oStruZFT,/*bFldOk*/,/*bLineOk*/,/*bPreGrid*/,/*bProsGrid*/)
oModel:SetRelation('ModelZFT',{ {'ZFT_FILIAL','xFilial("ZFS")'},{'ZFT_RECZFS','R_E_C_N_O_'} }, ZFT->(IndexKey(1)) )

Dessa forma, recebo um error log:

variable does not exist R_E_C_N_O on BUILDWHERE(PROTHEUSFUNCTIONMVC.PRX) 19/02/2020 20:54:46 line : 6247

Observação: O campo está escrito corretamente, mas a formatação do DevForum para itálico pode parecer que está faltando um underscore.

Caso eu substituir o 'RECNO' por ZFS->(RecNo()) a tela carrega sem erros, mas o grid não é preenchido (logo, o relacionamento não funcinou).

Alguém já passou por situação parecida? O MVC dá suporte para relacionamentos com RecNo?

Agradeço desde já pela atenção.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Boa Tarde Giordano,

Acredito que uma forma de conseguir atuar com o recno mas não de maneira tão pratica seria utilizando uma tabela temporária e adicionando o recno como campo nela com nome recno ou outro..., aí atuando com esta tabela temporária no model e na view você conseguiria fazer este relacionamento.

Pelo alias padrão acredito que ele não permita o relacionamento por não existir na SX3...

Atenciosamente,

Boa noite Giordano,

Dessa forma não será possível, quando você cria o relacionamento, o MVC cria e compara isso de forma dinâmica, ou seja, acaba sendo uma macro, com isso, o alias (workarea) não vai possuir o campo R_E_C_N_O_, pois o mesmo não existe, ele é acessado somente via função.


Eu acho que dar para trocar o campo R_E_C_N_O_ pela função Recno()

oModel:SetRelation('ModelZFT',{ {'ZFT_FILIAL','xFilial("ZFS")'},{'ZFT_RECZFS','recno()'} }, ZFT->(IndexKey(1)) )

Mas não é legal esse tipo de relacionamento, pois uma manutenção de dados pode ter alteração do recno.