quinta-feira, 30 de maio de 2013

TabStrip no Module Pool


*  Eae rapaziada, hoje vamos trabalhar com uma ferramenta usada muito em
* transações Standards e que facilitam muito a visualização para o user
* separando as informações por topicos em ABAS, isso mesmo, vamos 
* trabalhar com TABSTRIP no MODULE POOL, como sempre falo, não é difícil
* mas pra trabalharmos com Module pool precisamos ter a idéia do PBO e PAI
* nítidos nas nossas cabeças, não lembra ????.. Acesse o Link abaixo...
* http://abapjuniores.blogspot.com/2011/04/module-pool-basico.html
*  Vamos começar agora, primeiramente vamos criar no Module Pool, depois
* de criar, vamos criar uma tela pra ele conforme imagem abaixo, se não 
* for problema pra vocês, usem a mesma nomenclatura que estou usando.




*  Agora com a tela criada vamos colocar os TabStrips na mesma, clique no
* botão 'LAYOUT' e vamos desenhar as ABAS apertando no botão 'Controle de 
* fichas' (Tabstrip Control) e vamos prencheer toda a area da tela, agora 
* criada vamos declarar que a mesma tem três(3) abas, clique duas vezes no
* objeto e coloque (3) no campo 'ELEM.ÍND.' que pra mim é Índice de abas,
* conforme abaixo( Não tem F1 desse parametro aqui ).





*  Temos o TabStrip mas não temos uma área pra ele mostrar os a próxima 
* tela portanto vamos criar uma clicando no botão 'Area de Subtela' 
* ( Subscreen ) fazendo e nomeando conforma imagem.




*  Vamos clicar duas vezes na primeira Aba e dar um nome, colocar um texto
* e principalmente informando o código da Função e o campo de referencia.




* Faça assim

* NOME        TEXTO               Cód. Função     Cpo. Ref.
* ABAS_TAB1   1 - Principal       ABAS_F1         ABAS_SCA
* ABAS_TAB2   2 - Aba Extra       ABAS_F2         ABAS_SCA
* ABAS_TAB2   2 - Informações     ABAS_F3         ABAS_SCA

*  Agora vamos criar as subtelas que irão aparecer a área da Subtela que 
* informamos na tela principal que será acionada pela ação de clicar na
* aba correspondente.
*  Criem como uma tela normal mas no tipo de tela coloquem 'SUBTELA'.




* Coloquem o código abaixo em seus respectivos includes.

*&---------------------------------------------------------------------*
*& Include MZ_ABASTOP                                        PoolMóds. *
*&                                                                     *
*&---------------------------------------------------------------------*

PROGRAM  sapmz_abas                                                  .

* Declarações

* Grupo de constantes que informa a aba acionada
CONSTANTS:
  
BEGIN OF c_abas,
    tab1 
LIKE sy-ucomm VALUE 'ABAS_F1',
    tab2 
LIKE sy-ucomm VALUE 'ABAS_F2',
    tab3 
LIKE sy-ucomm VALUE 'ABAS_F3',
  
END OF c_abas.

* Declaração da Tabstrip .
CONTROLS : abas TYPE TABSTRIP.

* Grupo de variáveis que acionará a tela seleciona
DATA:
  
BEGIN OF g_abas,
    subscreen   
LIKE sy-dynnr,
* Aqui por favor coloquem o nome do Module Pool de vocês.
    
prog        LIKE sy-repid VALUE 'SAPMZ_ABAS',
    pressed_tab 
LIKE sy-ucomm VALUE c_abas-tab1,
  
END OF g_abas.

* Comando do User
DATA:      ok_code LIKE sy-ucomm.

*&---------------------------------------------------------------------*
*&  MODULES DA TELA PRINCIPAL 9000
*&---------------------------------------------------------------------*

PROCESS BEFORE 
OUTPUT.
* Modulo
  
MODULE ABAS_SET.
  
CALL SUBSCREEN ABAS_SCA 
    INCLUDING G_ABAS-PROG G_ABAS-SUBSCREEN.
 
MODULE STATUS_9000.
*
PROCESS AFTER 
INPUT.
  
CALL SUBSCREEN ABAS_SCA.
  
MODULE ABAS_GET.
 
MODULE USER_COMMAND_9000.

*  Telas 9001, 9002 e 9003 não precisam de nada na lógica deles
* só inclua uns textos na tela pra vocês verem o movimento de telas
* conforme a seleção das abas

*&---------------------------------------------------------------------*
*&  Include           MZ_ABASO01                                       *
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  ABAS_SET  OUTPUT
*&---------------------------------------------------------------------*
MODULE abas_set OUTPUT.

  
BREAK-POINT.

  abas-activetab = g_abas-pressed_tab.
  
CASE g_abas-pressed_tab.
    
WHEN c_abas-tab1.
      g_abas-subscreen = 
'9001'.
    
WHEN c_abas-tab2.
      g_abas-subscreen = 
'9002'.
    
WHEN c_abas-tab3.
      g_abas-subscreen = 
'9003'.
    
WHEN OTHERS.
  
ENDCASE.
ENDMODULE.                 " ABAS_SET  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
module STATUS_9000 output.
* Cliquem duas vezes no texto em verde e criem um Status simples.
  
SET PF-STATUS 'ST9000'.
*  SET TITLEBAR 'xxx'.

endmodule.                 " STATUS_9000  OUTPUT

*&---------------------------------------------------------------------*
*&  Include           MZ_ABASI01                                       *
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  ABAS_GET  INPUT
*&---------------------------------------------------------------------*
MODULE abas_get INPUT.

  ok_code = sy-ucomm.
  
CASE ok_code.
    
WHEN c_abas-tab1.
      g_abas-pressed_tab = c_abas-tab1.
    
WHEN c_abas-tab2.
      g_abas-pressed_tab = c_abas-tab2.
    
WHEN c_abas-tab3.
      g_abas-pressed_tab = c_abas-tab3.
    
WHEN OTHERS.
  
ENDCASE.

ENDMODULE.                 " ABAS_GET  INPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
module USER_COMMAND_9000 input.

  
IF sy-ucomm EQ 'BACK' OR
     sy-ucomm 
EQ 'EXIT' OR
     sy-ucomm 
EQ 'CANC'.
    
LEAVE TO SCREEN 0.
  
ENDIF.

endmodule.                 " USER_COMMAND_9000  INPUT


*  Agora criem uma transação conforme as duas imagens abaixo, reparando 
* no Objeto de execução da transação.



 




*  Agora é só executar a transação e correr pro abraço, espero que vocês
* tenham absorvido algo e bons estudos.
*  Qualquer coisa continuo a disposição, podem perguntar no post mesmo
* ou se quiserem podem mandar pro meu email mesmo.
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário