Friday, December 3, 2010

Split Container to display multiple ALV's

*&---------------------------------------------------------------------*
*& Report Z_SPLIT_CONTAINER_ALV
*&
*&---------------------------------------------------------------------*

REPORT Z_SPLIT_CONTAINER_ALV.

DATA : lcl_custom TYPE REF TO cl_gui_custom_container.
DATA : lcl_split TYPE REF TO cl_gui_splitter_container.
DATA : lcl_con1 TYPE REF TO cl_gui_container.
DATA : lcl_con2 TYPE REF TO cl_gui_container.
DATA : lcl_con3 TYPE REF TO cl_gui_container.
DATA : lcl_con4 TYPE REF TO cl_gui_container.
DATA : gcl_dd_doc TYPE REF TO cl_dd_document.
DATA : gr_functions TYPE REF TO cl_salv_functions.

DATA : gr_salv TYPE REF TO cl_salv_table,
gr_salv2 TYPE REF TO cl_salv_table,
gr_salv3 TYPE REF TO cl_salv_table,
gr_salv4 TYPE REF TO cl_salv_table,
lr_exp TYPE REF TO cx_root,
lv_text TYPE string.

TYPES:BEGIN OF ty_table3,
g_belnr TYPE bkpf-belnr, "pra
g_bukrs TYPE bkpf-bukrs,"pra
sbelnr TYPE bkpf-belnr,"pra
rbukrs TYPE bkpf-bukrs,"pra
rbelnr TYPE bkpf-belnr,"pra
rstblg TYPE bkpf-stblg,"pra
pernr TYPE pa0001-pernr,
name(30) TYPE c,
begda TYPE dats,
endda TYPE dats,
END OF ty_table3.

DATA : BEGIN OF ty_alv3.
INCLUDE TYPE ty_table3.
DATA : END OF ty_alv3.

DATA : gt_display3 LIKE TABLE OF ty_alv3,
gs_display3 LIKE ty_alv3.

TYPES:BEGIN OF ty_table2,
pernr TYPE pa0002-pernr,
nachn TYPE pa0002-nachn,
vorna type pa0002-vorna,
GESCH type pa0002-GESCH,
GBDAT type pa0002-GBDAT,
begda TYPE dats,
endda TYPE dats,
END OF ty_table2.

DATA : BEGIN OF ty_alv2.
INCLUDE TYPE ty_table2.
DATA : END OF ty_alv2.

DATA : gt_display2 LIKE TABLE OF ty_alv2,
gs_display2 LIKE ty_alv2.

DATA : gt_display4 LIKE TABLE OF bseg,
gs_display4 LIKE bseg.

START-OF-SELECTION.

PERFORM fill_internal_tables.

CALL SCREEN 100.

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ZSTAT'.
SET TITLEBAR 'ZTITLE'.

CREATE OBJECT lcl_custom
EXPORTING
* parent = parent
container_name = 'SPLIT'
* style = style
* lifetime = lifetime_default
* repid = repid
* dynnr = dynnr
* no_autodef_progid_dynnr = no_autodef_progid_dynnr
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6
.

*Split the container into 4
CREATE OBJECT lcl_split
EXPORTING
parent = lcl_custom
rows = 4
columns = 1
* no_autodef_progid_dynnr = no_autodef_progid_dynnr
* name = name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3
.

*1st window
CALL METHOD lcl_split->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = lcl_con1.

CALL METHOD lcl_split->set_row_height
EXPORTING
id = 1
height = 3.

IF gcl_dd_doc IS INITIAL.
CREATE OBJECT gcl_dd_doc.
ENDIF.
PERFORM built_header CHANGING gcl_dd_doc.
CALL METHOD gcl_dd_doc->merge_document.

CALL METHOD gcl_dd_doc->display_document
EXPORTING
parent = lcl_con1
EXCEPTIONS
html_display_error = 1.

*2nd window
CALL METHOD lcl_split->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = lcl_con4.

CALL METHOD lcl_split->set_row_height
EXPORTING
id = 2
height = 3.
TRY.
"Factory Method for display the ALV
CALL METHOD cl_salv_table=>factory
EXPORTING
r_container = lcl_con4
IMPORTING
r_salv_table = gr_salv4
CHANGING
t_table = gt_display3.

CATCH cx_salv_msg INTO lr_exp.
lv_text = lr_exp->get_text( ).

ENDTRY.

gr_salv4->display( ).

*3rd window
CALL METHOD lcl_split->get_container
EXPORTING
row = 3
column = 1
RECEIVING
container = lcl_con2.

CALL METHOD lcl_split->set_row_height
EXPORTING
id = 3
height = 22.

TRY.
"Factory Method for display the ALV
CALL METHOD cl_salv_table=>factory
EXPORTING
r_container = lcl_con2
IMPORTING
r_salv_table = gr_salv2
CHANGING
t_table = gt_display2.

gr_functions = gr_salv2->get_functions( ).
gr_functions->set_all( abap_true ).

CATCH cx_salv_msg INTO lr_exp.
lv_text = lr_exp->get_text( ).

ENDTRY.
gr_salv2->display( ).

*4th window
CALL METHOD lcl_split->get_container
EXPORTING
row = 4
column = 1
RECEIVING
container = lcl_con3.

CALL METHOD lcl_split->set_row_height
EXPORTING
id = 4
height = 21.

TRY.
"Factory Method for display the ALV
CALL METHOD cl_salv_table=>factory
EXPORTING
r_container = lcl_con3
IMPORTING
r_salv_table = gr_salv3
CHANGING
t_table = gt_display4.

gr_functions = gr_salv3->get_functions( ).
gr_functions->set_all( abap_true ).

CATCH cx_salv_msg INTO lr_exp.
lv_text = lr_exp->get_text( ).

ENDTRY.
gr_salv3->display( ).

ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------*
*& Form built_header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM built_header CHANGING ps_cl_dd_doc TYPE REF TO cl_dd_document.

DATA : lcl_ta TYPE REF TO cl_dd_table_element,
lcl_col1 TYPE REF TO cl_dd_area,
lcl_col2 TYPE REF TO cl_dd_area,
lcl_col3 TYPE REF TO cl_dd_area,
lv_text TYPE sdydo_text_element,
lcl_form TYPE REF TO cl_dd_form_area.

CALL METHOD ps_cl_dd_doc->add_table
EXPORTING
no_of_columns = 3
width = '100%'
cell_background_transparent = space
IMPORTING
table = lcl_ta.

*Set the columns
CALL METHOD lcl_ta->add_column
EXPORTING
width = '30%'
IMPORTING
column = lcl_col1.

CALL METHOD lcl_ta->add_column
EXPORTING
width = '30%'
IMPORTING
column = lcl_col2.

CALL METHOD lcl_ta->add_column
EXPORTING
width = '40%'
IMPORTING
column = lcl_col3.

lv_text = 'First Field'.

CALL METHOD lcl_col1->add_text
EXPORTING
text = lv_text
sap_emphasis = cl_dd_area=>table_heading."strong.

lv_text = 'Second Field'.

CALL METHOD lcl_col2->add_text
EXPORTING
text = lv_text
sap_emphasis = cl_dd_area=>table_heading.

lv_text = 'Third Field'.

CALL METHOD lcl_col3->add_text
EXPORTING
text = lv_text
sap_emphasis = cl_dd_area=>table_heading.

CLEAR:lv_text.

CALL METHOD ps_cl_dd_doc->add_table
EXPORTING
no_of_columns = 3
width = '100%'
cell_background_transparent = space
IMPORTING
table = lcl_ta.

ENDFORM. " built_header

*&---------------------------------------------------------------------*
*& Form fill_internal_tables
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_internal_tables .

SELECT pernr nachn vorna GESCH gbdat begda endda FROM pa0002
INTO TABLE gt_display2
UP TO 20 ROWS.

gs_display4-bukrs = '0112'.
gs_display4-belnr = '1090807060'.
gs_display4-gjahr = '2010'.

DO 20 TIMES.
APPEND gs_display4 TO gt_display4.
ENDDO.

ENDFORM. " fill_internal_tables

1 comment: