Para sanar esta inconsistência em customizações construídas com base na arquitetura MVC, será necessária a avaliação de três pontos:
1) Fontes em MVC não podem ter o aRotina declarado dentro da rotina função principal:
#include "protheus.ch"
#include "fwmvcdef.ch"
User Function COMP021_MVC()
Local oBrowse := ""
Private aRotina := MenuDef() /********* ÁREA À RETIRAR *********/
oBrowse := FwMBrowse():New()
oBrowse:SetAlias("ZA1")
oBrowse:SetDescription("Musicas")
oBrowse:Activate()
Return NIL
Static Function MenuDef()
Local aRotina := {}
ADD OPTION aRotina Title "Pesquisar" Action "VIEWDEF.COMP021_MVC" OPERATION 1 ACCESS 0
ADD OPTION aRotina Title "Visualizar" Action "VIEWDEF.COMP021_MVC" OPERATION 2 ACCESS 0
ADD OPTION aRotina Title "Incluir" Action "VIEWDEF.COMP021_MVC" OPERATION 3 ACCESS 0
ADD OPTION aRotina Title "Alterar" Action "VIEWDEF.COMP021_MVC" OPERATION 4 ACCESS 0
ADD OPTION aRotina Title "Excluir" Action "VIEWDEF.COMP021_MVC" OPERATION 5 ACCESS 0
ADD OPTION aRotina Title "Imprimir" Action "VIEWDEF.COMP021_MVC" OPERATION 8 ACCESS 0
ADD OPTION aRotina Title "Copiar" Action "VIEWDEF.COMP021_MVC" OPERATION 9 ACCESS 0
ADD OPTION aRotina TITLE "Autor" Action "VIEWDEF.COMP011_MVC" OPERATION 3 ACCESS 0
Return aRotina
User Function COMP021_MVC()
Local oBrowse := ""
// Private aRotina := MenuDef() /********* ÁREA RETIRADA *********/
oBrowse := FwMBrowse():New()
oBrowse:SetAlias("ZA1")
oBrowse:SetDescription("Musicas")
oBrowse:Activate()
Return NIL
Static Function MenuDef()
Local aRotina := {}
ADD OPTION aRotina Title "Pesquisar" Action "VIEWDEF.COMP021_MVC" OPERATION 1 ACCESS 0
ADD OPTION aRotina Title "Visualizar" Action "VIEWDEF.COMP021_MVC" OPERATION 2 ACCESS 0
ADD OPTION aRotina Title "Incluir" Action "VIEWDEF.COMP021_MVC" OPERATION 3 ACCESS 0
ADD OPTION aRotina Title "Alterar" Action "VIEWDEF.COMP021_MVC" OPERATION 4 ACCESS 0
ADD OPTION aRotina Title "Excluir" Action "VIEWDEF.COMP021_MVC" OPERATION 5 ACCESS 0
ADD OPTION aRotina Title "Imprimir" Action "VIEWDEF.COMP021_MVC" OPERATION 8 ACCESS 0
ADD OPTION aRotina Title "Copiar" Action "VIEWDEF.COMP021_MVC" OPERATION 9 ACCESS 0
ADD OPTION aRotina TITLE "Autor" Action "VIEWDEF.COMP011_MVC" OPERATION 3 ACCESS 0
Return aRotina
Não há necessidade de efetuar a chamada da função MenuDef() e atrubuir seu valor à varíavel private aRotina, pois a lib efetua esse processo automáticamente.
2) Na função MenuDef() tem que existir a opção de PESQUISAR:
#include "protheus.ch"
#include "fwmvcdef.ch"
Static Function MenuDef()
Local aRotina := {}
// ADD OPTION aRotina Title "Pesquisar" Action "VIEWDEF.COMP021_MVC" OPERATION 1 ACCESS 0 /********* ÁREA À ADICIONAR *********/
ADD OPTION aRotina Title "Visualizar" Action "VIEWDEF.COMP021_MVC" OPERATION 2 ACCESS 0
ADD OPTION aRotina Title "Incluir" Action "VIEWDEF.COMP021_MVC" OPERATION 3 ACCESS 0
ADD OPTION aRotina Title "Alterar" Action "VIEWDEF.COMP021_MVC" OPERATION 4 ACCESS 0
ADD OPTION aRotina Title "Excluir" Action "VIEWDEF.COMP021_MVC" OPERATION 5 ACCESS 0
ADD OPTION aRotina Title "Imprimir" Action "VIEWDEF.COMP021_MVC" OPERATION 8 ACCESS 0
ADD OPTION aRotina Title "Copiar" Action "VIEWDEF.COMP021_MVC" OPERATION 9 ACCESS 0
ADD OPTION aRotina TITLE "Autor" Action "VIEWDEF.COMP011_MVC" OPERATION 3 ACCESS 0
Return aRotina
#include "protheus.ch"
#include "fwmvcdef.ch"
Static Function MenuDef()
Local aRotina := {}
ADD OPTION aRotina Title "Pesquisar" Action "VIEWDEF.COMP021_MVC" OPERATION 1 ACCESS 0 /********* ÁREA ADICIONADA *********/
ADD OPTION aRotina Title "Visualizar" Action "VIEWDEF.COMP021_MVC" OPERATION 2 ACCESS 0
ADD OPTION aRotina Title "Incluir" Action "VIEWDEF.COMP021_MVC" OPERATION 3 ACCESS 0
ADD OPTION aRotina Title "Alterar" Action "VIEWDEF.COMP021_MVC" OPERATION 4 ACCESS 0
ADD OPTION aRotina Title "Excluir" Action "VIEWDEF.COMP021_MVC" OPERATION 5 ACCESS 0
ADD OPTION aRotina Title "Imprimir" Action "VIEWDEF.COMP021_MVC" OPERATION 8 ACCESS 0
ADD OPTION aRotina Title "Copiar" Action "VIEWDEF.COMP021_MVC" OPERATION 9 ACCESS 0
ADD OPTION aRotina TITLE "Autor" Action "VIEWDEF.COMP011_MVC" OPERATION 3 ACCESS 0
Return aRotina
Em alguns pontos do sistema o controle de acesso à operações é feito pelo posicionamento do array, uma vez que não haja a opção de pesquisar, a hierarquia de nOperation acaba causando inconsistências.
3) A chamada da função no *.xnu tem que ser a mesma do MenuDef():
Quando um menu é inserido pelo Configurador, ele permite que o mesmo tenha até dez dígitos:
E o mesmo nome informado nesta tela, será o nome persistido no arquivo *.xnu (ex: SIGAATF.xnu):
Contudo se for analisado o nome do fonte, será notado que falta um caractere:
#include "protheus.ch"
#include "fwmvcdef.ch"
User Function COMP021_MVC() /********* NOME NO *.XNU FALTA A LETRA 'C' *********/
Local oBrowse := ""
Private aRotina := MenuDef()
oBrowse := FwMBrowse():New()
oBrowse:SetAlias("ZA1")
oBrowse:SetDescription("Musicas")
oBrowse:Activate()
Return NIL
Quando o sistema incia, ele faz uma chamada estática para todas as funções MenuDef(), desta forma é possível montar esta tela:
Assim sendo, para corrigir este este problema, será necessário o encurtamento do nome da função para oito caracteres.