Bom dia pessoal, tenho um fonte especifico desenvolvido que faz uso do MVC com cabecalho é items mais quando tento incluir um novo item, tenho um error log com a mensagem
THREAD ERROR ([10392], alejandro.medina, NBK-ARG-019) 28/02/2020 12:38:56 Cannot find method FWFORMMODELSTRUCT:GETFOLDERS on FWFORMFIELD:PREPAREFIELDS(FWFORMFIELD.PRW) 19/02/2020 20:54:46 line : 275
, mais já atualizé com última LIB do Fev '20 é segue com mismo erro. Álguem já pasó com mismo erro? acho que o método devería estar no classe na LIB, ou isso depende do binario appserver?
Deixo o fonte completo:
#INCLUDE 'FWMVCDEF.CH'
/*
=====================================================================
| Programa | DSAOMS00 | Autor | Alejandro Medina |Fecha | 27/02/2020|
=====================================================================
|Descripción | Cierre de Fletes |
=====================================================================
*/
User Function DSAOMS00()
Local oBrowse as object
Local aMVCVars as array
//Seteo el array con datos que vamos a necesitar para el MVC
aMVCvars := SetMVCVars()
//Criação do objeoto Browse
oBrowse := FWMBrowse():New()
//Seta o Alias Browse
oBrowse:SetAlias(aMVCVars[2])
//Seta a descrição do Browse
oBrowse:SetDescription(Alltrim(Posicione("SX2",1,aMVCVars[2],"X2_NOMESPA")))
//Adicao de legendas
oBrowse:AddLegend("Empty(ZML_NUMOC)","GREEN","Cierre de Flete pendiente")
oBrowse:AddLegend("!Empty(ZML_NUMOC)","RED","Cierre de Flete Procesado")
oBrowse:SetMenuDef(aMVCVars[1])
//Grafico
oBrowse:SetAttach(.F.)
//Ativa o Browse
oBrowse:Activate()
Return()
/*
=======================================
= Definición de datos base para MVC =
=======================================
*/
Static Function SetMVCVars()
/*
Devuelve array con datos de variables para usar por el objeto MVC
[1] = Modelo - ej. 'DSAFAT01'
[2] = Alias Primario - ej. 'ZMA'
[3] = Clave Primaria - ej. {"ZMA_FILIAL", "ZMA_CODIGO"}
[4] = Alias Detalle- ej. 'ZMB'
[5] = Clave Detalle - ej. {"ZMB_FILIAL", "ZMB_CODIGO"}
*/
Local aVarsMVC := {'DSAOMS00','ZML',{'ZML_FILIAL','ZML_IDFLET'},'ZMF',{'ZMF_FILIAL','ZMF_IDFLET'},"ZMF_ITLOTE"}
Return(aVarsMVC)
/*
=======================================
= Armado del Menudef =
=======================================
*/
Static Function MenuDef()
Local aRotina := {}
Local aMVCvars := SetMVCVars()
ADD OPTION aRotina TITLE "Buscar" ACTION 'PesqBrw' OPERATION 1 ACCESS 0
ADD OPTION aRotina Title "Visualizar" Action "VIEWDEF."+aMVCVars[1] OPERATION 2 ACCESS 0
ADD OPTION aRotina Title "Incluir" Action "VIEWDEF."+aMVCVars[1] OPERATION 3 ACCESS 0
ADD OPTION aRotina Title "Alterar" Action "VIEWDEF."+aMVCVars[1] OPERATION 4 ACCESS 0
ADD OPTION aRotina Title "Excluir" Action "VIEWDEF."+aMVCVars[1] OPERATION 5 ACCESS 0
ADD OPTION aRotina Title "Imprimir" Action "VIEWDEF."+aMVCVars[1] OPERATION 8 ACCESS 0
ADD OPTION aRotina Title "Copiar" Action "VIEWDEF."+aMVCVars[1] OPERATION 9 ACCESS 0
Return(aRotina)
/*
=======================================
= Definición de Modelo MVC =
=======================================
*/
Static Function ModelDef()
Local aMVCvars := SetMVCVars()
// Cria a estrutura a ser usada no Modelo de Dados
Local oStruMaster := FWFormStruct(1, aMVCVars[2], /*bAvalCampo*/,/*lViewUsado*/)
Local oStruDetail := FWFormStruct(1, aMVCVars[4], /*bAvalCampo*/,/*lViewUsado*/)
// Cria o objeto do Modelo de Dados
Local oModel := MPFormModel():New(aMVCVars[2]+'MODEL', /*bPreValidacao*/, /*bPosValidacao*/, /*bCommit*/, /*bCancel*/)
// Adiciona ao modelo uma estrutura de formulário de edição por campo
oModel:AddFields(aMVCVars[2]+'MASTER', /*cOwner*/, oStruMaster, /*bPreValidacao*/, /*bPosValidacao*/, /*bCarga*/)
oModel:AddGrid(aMVCVars[4]+'DETAIL', aMVCVars[2]+'MASTER', oStruDetail, /*bPreValidacao*/, /*bPosValidacao*/, /*bCarga*/)
// Faz relaciomaneto entre os compomentes do model
oModel:SetRelation(aMVCVars[4]+'DETAIL',{{aMVCVars[5][1],'xFilial('+aMVCVars[4]+')'},{aMVCVars[5][2],aMVCVars[3][2]} }, (aMVCVars[4])->(IndexKey(1)))
// Liga o controle de nao repeticao de linha
oModel:GetModel(aMVCVars[4]+'DETAIL'):SetUniqueLine({aMVCVars[6]})
// Adiciona a descricao do Modelo de Dados
oModel:SetDescription(Alltrim(Posicione("SX2",1,aMVCVars[2],"X2_NOMESPA")))
// Adiciona a descricao do Componente do Modelo de Dados
oModel:GetModel(aMVCVars[2]+'MASTER'):SetDescription(Alltrim(Posicione("SX2",1,aMVCVars[2],"X2_NOMESPA")))
oModel:GetModel(aMVCVars[4]+'DETAIL'):SetDescription(Alltrim(Posicione("SX2",1,aMVCVars[4],"X2_NOMESPA")))
//Chave Primaria
oModel:SetPrimaryKey(aMVCVars[3])
Return(oModel)
/*
=======================================
= Definición de View de Modelo MVC =
=======================================
*/
Static Function ViewDef()
Local aMVCvars := SetMVCVars()
// Cria um objeto de Modelo de Dados baseado no ModelDef do fonte informado
Local oModel := FWLoadModel(aMVCVars[1])
// Cria a estrutura a ser usada na View
Local oStruMaster := FWFormStruct(1, aMVCVars[2], /*bAvalCampo*/,/*lViewUsado*/)
Local oStruDetail := FWFormStruct(1, aMVCVars[4], /*bAvalCampo*/,/*lViewUsado*/)
// Cria o objeto de View
Local oView := FWFormView():New()
// Define qual o Modelo de dados será utilizado
oView:SetModel(oModel)
//Adiciona no nosso View um controle do tipo FormFields(antiga enchoice)
oView:AddField('VIEW'+aMVCVars[2], oStruMaster, aMVCVars[2]+'MASTER')
//Adiciona no nosso View um controle do tipo FormGrid(antiga newgetdados)
oView:AddField('VIEW'+aMVCVars[4], oStruDetail, aMVCVars[4]+'DETAIL')
// Criar um "box" horizontal para receber algum elemento da view
oView:CreateHorizontalBox('SUPERIOR',30)
oView:CreateHorizontalBox('INFERIOR',70)
// Relaciona o ID da View com o "box" para exibicao
oView:SetOwnerView('VIEW'+aMVCVars[2], 'SUPERIOR')
oView:SetOwnerView('VIEW'+aMVCVars[4], 'INFERIOR')
// Define campos que terao Auto Incremento
//oView:AddIncrementField('VIEW'+aMVCVars[4], aMVCVars[6])
// Criar novo botao na barra de botoes
//oView:AddUserButton( 'Incluir Lote Flete', 'CLIPS', { |oView| DSAOMS00B() } )
// Liga a identificacao do componente
oView:EnableTitleView('VIEW'+aMVCVars[4],Alltrim(Posicione("SX2",1,aMVCVars[4],"X2_NOMESPA")))
// Liga a Edição de Campos na FormGrid
oView:SetViewProperty('VIEW'+aMVCVars[4],"ENABLEDGRIDDETAIL",{50})
//Indica se a janela deve ser fechada ao final da operação. Se ele retornar .T. (verdadeiro) fecha a janela
oView:bCloseOnOK := {|| .T.}
Return oView
Obrigado pela ajuda que podan brindar.