Árvore de páginas

Campo do tipo bitmap não permite alteração em tela MVC

Produto:

Protheus ADVPL

Versões:

P12

Ocorrência:

Ao tentar alterar uma imagem inserida em um campo do tipo bitmap, não é possível clicar na imagem

Ambiente:

P12

Passo a passo:

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:

ERRADO
#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
CORRETO
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:

ERRADO
#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
CORRETO
#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:

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

Observações:

Inconsistência analisada no ticket: 2304952