quinta-feira, 11 de setembro de 2014

Classe - CL_GUI_DOCKING_CONTAINER


REPORT z_cl_gui_docking_container.
*  Hoje vou mostrar como criar um alv orientado a Objeto sem precisar
* criar nada na tela, o segredo disso tá na classe cl_gui_docking_container
* que irei mostrar abaixo. Vamos lá.

* Estruturas e tabelas internas
*&---------------------------------------------------------------------*
DATA :
  t_out     
TYPE TABLE OF sflight,
  t_fcat    
TYPE TABLE OF lvc_s_fcat,
  st_layout 
TYPE lvc_s_layo
  
.

* Objetos
*&---------------------------------------------------------------------*
DATA :
  o_docking 
TYPE REF TO cl_gui_docking_container,
  o_alv     
TYPE REF TO cl_gui_alv_grid.

* Inicio do processo
*&---------------------------------------------------------------------*
START-OF-SELECTION.

* Seleção dos dados
  
PERFORM f_select_sflight.

* Chamada da tela que irá mostrar o ALV
  
CALL SCREEN 9999.

**&---------------------------------------------------------------------*
**  Modules da tela 9999 criada acima.
*PROCESS BEFORE OUTPUT.
*  MODULE status_9999.
*  MODULE initial_9999.
*
*PROCESS AFTER INPUT.
*  MODULE exit_command_9999 AT EXIT-COMMAND.
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      Form  F_FCAT_OO
*&---------------------------------------------------------------------*
FORM f_fcat_oo .

  
DATA :
    lt_fcat 
TYPE TABLE OF slis_fieldcat_alv.

Criação do catalogo de campo para o modo Estruturado.
  
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    
EXPORTING
      i_program_name         
sy-repid
      i_structure_name       
'SFLIGHT'
    
CHANGING
      ct_fieldcat            
lt_fcat
    
EXCEPTIONS
      inconsistent_interface 
1
      program_error          
2
      
OTHERS                 3.

  
IF sy-subrc IS INITIAL.
  
Conversão Estruturado x OO
    
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
      
EXPORTING
        it_fieldcat_alv 
lt_fcat
      
IMPORTING
        et_fieldcat_lvc 
t_fcat
      
TABLES
        it_data         
t_out
      
EXCEPTIONS
        it_data_missing 
1
        
OTHERS          2.

  
ENDIF.

ENDFORM.                    " F_FCAT_OO

*&---------------------------------------------------------------------*
*&      Form  F_LAYOUT
*&---------------------------------------------------------------------*
FORM f_layout .

  st_layout
-zebra      'X'.
  st_layout
-cwidth_opt 'X'.

ENDFORM.                    " F_LAYOUT

*&---------------------------------------------------------------------*
*&      Module  STATUS_9999  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9999 OUTPUT.

  
SET PF-STATUS 'PF_9999'.

ENDMODULE.                 " STATUS_9999  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  INITIAL_9999  OUTPUT
*&---------------------------------------------------------------------*
MODULE initial_9999 OUTPUT.

  
BREAK-POINT.

  
IF o_docking IS NOT BOUND.

* Aqui que encontramos a parte mais importante desse post, esse objeto
* docking que será criado terá a tela chamada(9999) como referencia,
* o parametro 'extension' será o tamanho do uso da tela.
    
CREATE OBJECT o_docking
      
EXPORTING
        repid                       
sy-repid
        dynnr                       
sy-dynnr
        extension                   
2000 " Tela Full rs " Extension
      
EXCEPTIONS
        cntl_error                  
1
        cntl_system_error           
2
        create_error                
3
        lifetime_error              
4
        lifetime_dynpro_dynpro_link 
5
        
OTHERS                      6.

  
ENDIF.

  
IF o_alv IS NOT BOUND.
* Criação da catalogo de campos
    
PERFORM f_fcat_oo.
* Alimentação dos parametros do Layout do alv
    
PERFORM f_layout.

* Criação do alv com referencia no Objeto Docking criado anteriormente
    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent          
o_docking    " Parent Container
      
EXCEPTIONS
        error_cntl_create 
1
        error_cntl_init   
2
        error_cntl_link   
3
        error_dp_create   
4
        
OTHERS            5.

* Exibição do alv
    o_alv
->set_table_for_first_display(
      
EXPORTING
        i_save                        
'A'    " Save Layout
        i_default                     
'X'    " Default Display Variant
        is_layout                     
st_layout    " Layout
      
CHANGING
        it_outtab                     
=  t_out   " Output Table
        it_fieldcatalog               
=  t_fcat   " Field Catalog
      
EXCEPTIONS
        invalid_parameter_combination 
1
        program_error                 
2
        too_many_lines                
3
        
OTHERS                        4
    
).

* Caso o alv já tenha sido criado
  
ELSE.
* Atualização do alv.
    
o_alv->refresh_table_display(
      
EXCEPTIONS
        finished       
1
        
OTHERS         2
    
).
  
ENDIF.
ENDMODULE.                 " INITIAL_9999  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND_9999  INPUT
*&---------------------------------------------------------------------*
MODULE exit_command_9999 INPUT.
  
CASE sy-ucomm.
    
WHEN 'BACK'.
      
LEAVE TO SCREEN 0.
    
WHEN 'EXIT' OR 'CANCEL'.
      
LEAVE PROGRAM.
    
WHEN OTHERS.
  
ENDCASE.

ENDMODULE.                 " EXIT_COMMAND_9999  INPUT

*&---------------------------------------------------------------------*
*&      Form  F_SELECT_SFLIGHT
*&---------------------------------------------------------------------*
FORM f_select_sflight .

Seleção simples
  
SELECT *
    
FROM sflight
    
INTO TABLE t_out
    
UP TO 100 ROWS.

ENDFORM.                    " F_SELECT_SFLIGHT
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário