|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Report > Class in ALV > Report (702) - ALV_Class_Reporting |
Objective |
▪Call Method "ycl_report_mm=>get_data" |
Transaction Code |
|
Tables |
MARA - General Material Data |
Support |
|
Contributors |
Danar Andri Prasetyo ( danaruto131@yahoo.com ) |
1.Open SE38
2.Copy Program "SAPBC400RUD_ALV_GRID" to "ZSAPBC400RUD_ALV_GRID_MM"

3.Select All Object

4.Click "
" and save in local object
5.Change Program "ZSAPBC400RUD_ALV_GRID_MM"
6.Save, Activate and Test running program
7.When we click it at data, it isn't appear message, so we will change it

8.First we modified table declaration
Before
tables sbc400_carrier.
After
*tables sbc400_carrier.
9.Add before start-of-selection
TABLES: mara.
INCLUDE zcl_event_receiver.
TYPE-POOLS: icon, ole2.
TYPES : BEGIN OF gt_header,
icon(4),
END OF gt_header.
DATA: tc_header TYPE REF TO cl_gui_custom_container,
tg_header TYPE REF TO cl_gui_alv_grid,
tc_detail TYPE REF TO cl_gui_custom_container,
tg_detail TYPE REF TO cl_gui_alv_grid,
go_event_receiver_header TYPE REF TO zcl_event_receiver,
go_event_receiver_detail TYPE REF TO zcl_event_receiver.
DATA: gw_fieldcat_header TYPE lvc_t_fcat,
gw_fieldcat_detail TYPE lvc_t_fcat.
DATA: gv_row_no TYPE i.
DATA : gi_data TYPE ytta_header_101 WITH HEADER LINE.
10.Modified MODULE CREATE CONTROL OUTPUT
Before
MODULE CREATE_CONTROL OUTPUT.
if container_ref is initial.
create object container_ref
exporting container_name = 'CONTAINER_1'.
create object grid
exporting i_parent = container_ref.
call method grid->set_table_for_first_display
exporting i_structure_name = 'SPFLI'
changing it_outtab = itab.
else.
select * from spfli into table itab
where carrid = sbc400_carrier-carrid.
call method grid->refresh_table_display
exporting I_SOFT_REFRESH = 'X'.
endif.
ENDMODULE. " CREATE_CONTROL OUTPUT
After
MODULE create_control OUTPUT.
IF container_ref IS INITIAL.
CREATE OBJECT container_ref
EXPORTING container_name = 'CONTAINER_1'.
CREATE OBJECT grid
EXPORTING i_parent = container_ref.
CALL METHOD grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SPFLI'
CHANGING
it_outtab = itab.
ELSE.
CALL METHOD YCL_REPORT_MM=>get_data
EXPORTING
gv_matkl = mara-matkl
gv_matnr = '001-001'
gv_max_row = '100'
CHANGING
data = gi_data[].
CALL METHOD grid->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDMODULE. " CREATE_CONTROL OUTPUT
*) at MODULE create_control OUTPUT, we use class YCL_REPORT_MM which we made at Report(701)
11.Then we make new include program "zlc_event_receiver", we just doble click at zlc_event_receiver
then klik ![]()
12.It will be shown
just click
to local object
13. Add line coding to zlc_event_receiver
*&---------------------------------------------------------------------*
*& Include ZCL_EVENT_RECEIVER *
*&---------------------------------------------------------------------*
CLASS ZCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING
E_OBJECT E_INTERACTIVE,
HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM,
HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,
HANDLE_BUTTON_CLICK FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING ES_COL_ID ES_ROW_NO,
HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN ES_ROW_NO.
ENDCLASS. "lcl_event_receiver DEFINITION
CLASS ZCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_TOOLBAR.
* Event handler method for event toolbar.
CONSTANTS:
* Constants for button type
C_BUTTON_NORMAL TYPE I VALUE 0,
C_MENU_AND_DEFAULT_BUTTON TYPE I VALUE 1,
C_MENU TYPE I VALUE 2,
C_SEPARATOR TYPE I VALUE 3,
C_RADIO_BUTTON TYPE I VALUE 4,
C_CHECKBOX TYPE I VALUE 5,
C_MENU_ENTRY TYPE I VALUE 6.
DATA:
LS_TOOLBAR TYPE STB_BUTTON.
* Append seperator to the normal toolbar
CLEAR LS_TOOLBAR.
MOVE C_SEPARATOR TO LS_TOOLBAR-BUTN_TYPE..
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* Append a new button that to the toolbar. Use E_OBJECT of
* event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.
* This class has one attribute MT_TOOLBAR which is of table type
* TTB_BUTTON. The structure is STB_BUTTON
* CLEAR LS_TOOLBAR.
* MOVE 'BATALKAN_SKET' TO LS_TOOLBAR-FUNCTION.
* MOVE ICON_SYSTEM_MODUS_DELETE TO LS_TOOLBAR-ICON.
* MOVE 'BATALKAN SKET' TO LS_TOOLBAR-QUICKINFO.
* MOVE 'BATALKAN SKET' TO LS_TOOLBAR-TEXT.
* MOVE ' ' TO LS_TOOLBAR-DISABLED.
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
*
ENDMETHOD. "handle_toolbar
METHOD HANDLE_USER_COMMAND.
* Handle own functions defined in the toolbar
* CASE E_UCOMM.
** WHEN 'BATALKAN_SKET'.
** PERFORM FM_BATALKAN_SKET.
* ENDCASE.
ENDMETHOD. "handle_user_command
METHOD HANDLE_HOTSPOT_CLICK.
PERFORM FM_ON_CLICK_HOTSPOT USING E_ROW_ID
E_COLUMN_ID
ES_ROW_NO.
ENDMETHOD. "handle_hotspot_click
METHOD HANDLE_BUTTON_CLICK.
PERFORM FM_ON_BUTTON_CLICK USING ES_COL_ID
ES_ROW_NO.
ENDMETHOD. "HANDLE_BUTTON_CLICK
METHOD HANDLE_DOUBLE_CLICK.
PERFORM FM_ON_DOUBLE_CLICK USING E_ROW
E_COLUMN
ES_ROW_NO.
ENDMETHOD.
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
14.Edit Status 0100 by click
then double click at PBO Module -> STATUS_0100

15.Modified Module status_0100 output
Before
module status_0100 output.
SET PF-STATUS 'STATUS_100'.
* SET TITLEBAR 'xxx'.
endmodule. " STATUS_0100 OUTPUT
After
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_100'.
* SET TITLEBAR 'xxx'.
IF tc_header IS INITIAL.
PERFORM fm_build_alv_object_header.
ELSE.
CALL METHOD
tg_header->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
16.Add to the last of line coding
*&---------------------------------------------------------------------*
*& Form fm_on_BUTTON_CLICK
*&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
* -->P_ES_COL_ID text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM fm_on_button_click USING p_es_col_id
p_es_row_no..
READ TABLE gi_data INDEX p_es_row_no.
IF sy-subrc IS INITIAL.
* GV_ROW_NO = P_ES_ROW_NO.
MESSAGE 'Test' TYPE 'E'.
ENDIF.
ENDFORM. " fm_on_BUTTON_CLICK
*&--------------------------------------------------------------------*
*& Form FM_BUILD_ALV_OBJECT_HEADER
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_build_alv_object_header.
CREATE OBJECT tc_header
EXPORTING container_name = 'FC_HEADER'.
CREATE OBJECT tg_header
EXPORTING i_parent = tc_header.
CREATE OBJECT go_event_receiver_header.
PERFORM fm_build_fieldcat_header TABLES gw_fieldcat_header.
CREATE OBJECT go_event_receiver_header.
* SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_TOOLBAR FOR TG_HEADER.
* SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_USER_COMMAND FOR TG_HEADER.
* SET HANDLER GO_EVENT_RECEIVER_HEADER->HANDLE_HOTSPOT_CLICK FOR TG_HEADER.
SET HANDLER go_event_receiver_header->handle_button_click FOR tg_header.
SET HANDLER go_event_receiver_header->handle_double_click FOR tg_header.
CALL METHOD
tg_header->set_table_for_first_display
EXPORTING
i_save = 'U'
i_structure_name = 'GI_DATA'
CHANGING
it_outtab = gi_data[]
it_fieldcatalog = gw_fieldcat_header[].
ENDFORM. "FM_BUILD_ALV_OBJECT_HEADER
*&--------------------------------------------------------------------*
*& Form FM_BUILD_FIELDCAT_HEADER
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->FT_REPORT text
*---------------------------------------------------------------------*
FORM fm_build_fieldcat_header TABLES ft_report.
PERFORM f_fieldcatg USING gw_fieldcat_header 'GI_DATA' :
* 'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' '',
'MATKL' 'GI_DATA' 'MATKL' '' '10' '' '' 'Material Number' '' '' '' '' '' '' '' '' '' '' '' '',
'MATNR' 'GI_DATA' 'MATNR' '' '13' '' '' 'Material' '' '' '' '' '' '' '' '' '' '' '' ''.
ENDFORM. "FM_BUILD_FIELDCAT_HEADER
*&--------------------------------------------------------------------*
*& Form F_FIELDCATG
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->T_ALV_FIELDtext
* -->VALUE(FU_TYtext
* -->VALUE(FU_FNtext
* -->VALUE(FU_REtext
* -->VALUE(FU_REtext
* -->VALUE(FU_NOtext
* -->VALUE(FU_OUtext
* -->VALUE(FU_FLtext
* -->VALUE(FU_REtext)
* -->VALUE(FU_COtext)
* -->VALUE(FU_DOtext
* -->VALUE(FU_HOtext
* -->VALUE(FU_DEtext
* -->VALUE(FU_WAtext
* -->VALUE(FU_MEtext
* -->VALUE(FU_MEtextF)
* -->VALUE(FU_WAtextF)
* -->VALUE(FU_CHtextOX)
* -->VALUE(FU_FItextUMN)
* -->VALUE(FU_ICtext
* -->VALUE(FU_EDtext
* -->VALUE(FU_KEtext
*---------------------------------------------------------------------*
FORM f_fieldcatg USING
t_alv_fieldcat TYPE lvc_t_fcat
value(fu_types) "0
value(fu_fname) "1
value(fu_reftb) "2
value(fu_refld) "3
value(fu_noout) "4
value(fu_outln) "5
value(fu_fltxt) "6
value(fu_reptxt) "7
value(fu_coltxt) "8
value(fu_dosum) "9
value(fu_hotsp) "10
value(fu_dec) "11
value(fu_waers)
value(fu_meins)
value(fu_meins_f)
value(fu_waers_f)
value(fu_checkbox)
value(fu_fixcolumn)
value(fu_icon)
value(fu_edit)
value(fu_key)
.
DATA: ld_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
CLEAR: ld_fieldcat.
ld_fieldcat-tabname = fu_types.
ld_fieldcat-fieldname = fu_fname.
ld_fieldcat-ref_table = fu_reftb.
ld_fieldcat-ref_field = fu_refld.
ld_fieldcat-no_out = fu_noout.
ld_fieldcat-outputlen = fu_outln.
ld_fieldcat-seltext = fu_fltxt.
ld_fieldcat-reptext = fu_reptxt.
ld_fieldcat-coltext = fu_coltxt.
ld_fieldcat-do_sum = fu_dosum.
ld_fieldcat-hotspot = fu_hotsp.
ld_fieldcat-decimals_o = fu_dec.
ld_fieldcat-currency = fu_waers.
ld_fieldcat-quantity = fu_meins.
ld_fieldcat-qfieldname = fu_meins_f.
ld_fieldcat-cfieldname = fu_waers_f.
ld_fieldcat-checkbox = fu_checkbox.
ld_fieldcat-fix_column = fu_fixcolumn.
ld_fieldcat-icon = fu_icon.
ld_fieldcat-edit = fu_edit.
ld_fieldcat-key = fu_key.
APPEND ld_fieldcat TO t_alv_fieldcat.
ENDFORM. "F_FIELDCATG
*&---------------------------------------------------------------------*
*& Form FM_ON_CLICK_HOTSPOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_ROW_ID text
* --> text
* -->I_COLUMN_ID text
* --> text
* -->IS_ROW_NO text
*----------------------------------------------------------------------*
FORM FM_ON_CLICK_HOTSPOT USING I_ROW_ID TYPE LVC_S_ROW
I_COLUMN_ID TYPE LVC_S_COL
IS_ROW_NO TYPE LVC_S_ROID.
* READ TABLE GI_HEADER INDEX I_ROW_ID.
* IF SY-SUBRC IS INITIAL.
* GV_ROW_NO = I_ROW_ID.
* ENDIF.
READ TABLE GI_DATA INDEX I_ROW_ID.
* IF GI_DATA-ICON IS INITIAL.
*
* ELSEIF GI_DATA-ICON = ICON_EXPAND.
* PERFORM FM_LOAD_CHILD_HEADER USING GI_HEADER-PRUEFLOS GI_HEADER-WERK I_ROW_ID.
* ELSEIF GI_HEADER-ICON = ICON_COLLAPSE.
* PERFORM FM_UNLOAD_CHILD_HEADER USING GI_HEADER-PRUEFLOS I_ROW_ID.
* ENDIF.
ENDFORM. "FM_ON_CLICK_HOTSPOT
*&---------------------------------------------------------------------*
*& Form FM_ON_DOUBLE_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM fm_on_double_click USING p_e_row
p_e_column
p_es_row_no TYPE lvc_s_roid.
* BREAK ABAP08.
DATA: lv_row_id TYPE i.
lv_row_id = p_es_row_no-row_id.
READ TABLE gi_data INDEX lv_row_id.
MESSAGE gi_data-matkl TYPE 'I'.
ENDFORM. " FM_ON_DOUBLE_CLICK
17.Modified screen 0100 by click
then double click at Screens -> 0100

will show
then click ![]()
then show
then click ![]()
18.Then Click button Layout ![]()
19.Click at
change properties ![]()
20.Click at
change properties ![]()
21.Save, activate screen and close screen
22.Click Tab 'Element List', change 'CONTAINER1' to 'FC_HEADER'

23.Activate Screen Painter
24.Back to main program by double click at ![]()
25.Save and Activate.
26.The program is ready to run.
27.Views like this
