Visual – ContextMenu – Complex Screen Element – Abap

Publicado: 1 de abril de 2014 em Abap

Um menu de contexto ou um menu pop-up é um menu em uma interface gráfica do usuário (GUI) que aparece em cima de interação do usuário, como uma operação de clique com o botão direito do mouse. Um menu de contexto oferece um conjunto limitado de opções que estão disponíveis no estado atual, ou contexto, do sistema operacional ou aplicativo. Normalmente, as opções disponíveis são as ações relacionadas com o objeto selecionado.

Os menus de contexto foram introduzidos no ambiente Smalltalk do computador Xerox Alto, onde eram chamados menus pop-up. O sistema operacional NEXTSTEP desenvolveu a ideia, incorporando a funcionalidade em que o botão do meio ou o da direita traziam o menu principal na posição do mouse, eliminando a necessidade de mover o ponteiro por toda a tela. Esse menu principal era vertical e mudava de acordo com o texto da operação do sistema.

ContextMenu

Em Abap um menu de contexto é considerado um elemento complexo da coleção de componentes do Netweaver 7. Um menu de contexto não é um componente que você arrasta em uma tela no Screen Painter, mas sim um evento de cada componente dentro do Screen Painter chamado:

  • ON_CTMENU_seunomedemenu

É também composto de um Status de GUI onde você cria um menu do tipo menu de contexto e da instrução Abap, FORM chamando o evento ON_CT_MENU_seunomedemenu de cada componente e atribuído a um Status de GUI. É possível criar um menu dinâmico usando a classe cl_ctmenu para instanciar um novo objeto de menu e usar seus métodos para manipular o novo menu.

Criando um Menu de Contexto

Para criar um menu de contexto precisamos de vários objetos Abap e você já deve ter o conhecimento de como criar um menu, criar um titulo, criar uma tela e criar o OK_CODE.

  1. Entre na transação SE38 e crie um programa chamado ZCONTEXTMENU.
  2. Entre na transação SE41 e crie um Status de tela chamado MENU_100 e crie o menu DA_MENU e a função SAIR.
  3. Crie um menu de contexto chamado CONTEXT_MENU_1  e cria as funções FUNCAO1, FUNCAO2 e FUNCAO3.
  4. Crie um titulo chamado TITULO100.
  5. Ative os dois menus e o titulo
  6. Entre na transação SE51 e crie um layout, o PBO_Module Status_100 e o campo OK_CODE e use a figura abaixo para referencia:

    menucontexto_layout

    Tela 100 – Layout

  7. Coloque um componente Box e nomeie corretamente e em sua propriedade ON_CTMENU_, coloque CONTEXTO1.
  8. Coloque cada componente TextField e os nomeie como quiser.
  9. Nomeie cada Input/Output Field de CAIXA1, CAIXA2, CAIXA3 e CAIXA4.
  10. No componente CAIXA4, em sua propriedade ON_CTMENU_, coloque CONTEXTO1.
  11. Coloque um botão e em sua function code coloque SAIR.
  12. Ative a tela e volte para a transação SE38 e escreva o código abaixo.
menucontexto

ContextMenu – Programa

 

Exemplo:

Neste exemplo criamos um status de Gui para o menu DA_TELA contento a função SAIR, um Status de GUI para o menu de contexto CONTEXT_MENU_1 contento 3 funções e criamos uma tela 100 para os componentes como mostra a figura de layout acima. Para cada função criamos uma ação, não se esqueça de preencher o campo tipo OK com o nome OK_CODE na aba Element List da tela 100 e também de criar o PBO_MODULE para o Status_100 na aba Flow Logic.

Obs: O componente Box associado a um menu de contexto faz todos os componentes dentro dele herdarem o menu.

Abap

*&---------------------------------------------------------------------*
*& Report  ZCONTEXTMENU
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Menu de Contexto / Popup Menu
*&---------------------------------------------------------------------*

REPORT  ZCONTEXTMENU.

* Declara componentes Input/Output field
DATA: CAIXA1 TYPE STRING,
      CAIXA2 TYPE STRING,
      CAIXA3 TYPE STRING,
      CAIXA4 TYPE STRING.

* Delcara variavel que captura o nome do programa
DATA: prog TYPE sy-repid.

* Delclara Eventos dos botões
DATA: ok_code TYPE sy-ucomm,
      clique_ok TYPE sy-ucomm.

* Alimenta variavel
prog = sy-repid.

* Chama a tela 100
CALL SCREEN 100.

* Modulo de Saida da tela
MODULE STATUS_0100 OUTPUT.

  " Chama o menu da tela e o Titulo
  SET PF-STATUS 'MENU_100'.
  SET TITLEBAR 'TITULO100'.

* Limpa o evento contra possiveis sujeiras
 clique_ok = ok_code.
  CLEAR ok_code.

* Cria Eventos dos botões
  CASE clique_ok.
    WHEN 'FUNCAO1'.
      CAIXA1 = CAIXA4.

   WHEN 'FUNCAO2'.
      CAIXA2 = CAIXA4.

   WHEN 'FUNCAO3'.
      CAIXA3 = CAIXA4.

    WHEN 'SAIR'.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " STATUS_0100  OUTPUT

* Cria o Evento on click do menu de contexto referenciando o evento
* declarado no componente e o menu criado no Menu Painter
FORM on_ctmenu_contexto1 USING l_menu TYPE REF TO cl_ctmenu.
  CALL METHOD:l_menu->load_gui_status
                        EXPORTING program = prog
                                  status  = 'CONTEXT_MENU_1'
                                  menu    = l_menu.
ENDFORM.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s