Displaying fields as BUTTONS and Raising an event in ALV

This code demonstrates how to display fields in ALV as a button.



on clicking a button..



The Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
*&---------------------------------------------------------------------*
*&Program: ZTEST_SDN
*&Creation Date: 23.08.2008 14:11:22
*&---------------------------------------------------------------------*
*& Demo Program for blog http://abap-explorer.blogspot.com/
*&---------------------------------------------------------------------*
REPORT z_sb_column_as_pushbutton.

TYPE-POOLS:cntl,icon.

TYPES:
BEGIN OF x_final,
carrid TYPE s_carr_id,
carrname TYPE s_carrname,
END OF x_final.

DATA: i_final TYPE STANDARD TABLE OF x_final INITIAL SIZE 0,
i_fieldcat TYPE lvc_t_fcat,
wa_layout TYPE lvc_s_layo,
ok_code TYPE syucomm,
oref_alv TYPE REF TO cl_gui_alv_grid.
field-symbols: <f1> type any.
*----------------------------------------------------------------------*
* CLASS lcl_event_handlers DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handlers DEFINITION.
PUBLIC SECTION.
METHODS:handle_button_click FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id es_row_no.
ENDCLASS. "lcl_event_handlers DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handlers IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handlers IMPLEMENTATION.
METHOD handle_button_click.
DATA l_row TYPE c LENGTH 10.
l_row = es_row_no-row_id.
MESSAGE i001(00) WITH 'You have clicked on column :'
ES_COL_ID-FIELDNAME ',row:' l_row.
ENDMETHOD. "handle_button_click
ENDCLASS. "lcl_event_handlers IMPLEMENTATION


START-OF-SELECTION.

PERFORM get_data.

END-OF-SELECTION.

PERFORM build_field_catalog USING: 'CARRID' 'CARRID' 'SCARR',
'CARRNAME' 'CARRNAME' 'SCARR'.
PERFORM populate_layout.

PERFORM display_alv.

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Get data
*----------------------------------------------------------------------*
FORM get_data .

SELECT carrid carrname FROM scarr
INTO TABLE i_final
UP TO 200 ROWS.
IF sy-subrc NE 0.

MESSAGE i001(00) WITH 'No data found'.
LEAVE LIST-PROCESSING.
ENDIF.

ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form build_field_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELDNAME Fieldname
* -->P_REF_FIELD Reference Field
* -->P_REF_TAB Reference Table
*----------------------------------------------------------------------*
FORM build_field_catalog USING
p_fieldname TYPE lvc_fname
p_ref_field TYPE lvc_rfname
p_ref_tab TYPE lvc_rtname.

DATA:l_fieldcat TYPE lvc_s_fcat.

l_fieldcat-fieldname = p_fieldname.
l_fieldcat-tabname = 'I_FINAL'.
l_fieldcat-ref_field = p_ref_field.
l_fieldcat-ref_table = p_ref_tab.
IF p_fieldname = 'CARRID'.
l_fieldcat-style = cl_gui_alv_grid=>mc_style_button.
ENDIF.

APPEND l_fieldcat TO i_fieldcat.
ENDFORM. " build_field_catalog
*&---------------------------------------------------------------------*
*& Form populate_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_layout.
wa_layout-zebra = 'X'.
ENDFORM. "populate_layout
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_alv.

DATA: l_repid TYPE syrepid VALUE sy-repid,
oref_handlers TYPE REF TO lcl_event_handlers.
DATA l_wa_event TYPE cntl_simple_event.
IF oref_alv IS NOT BOUND.

CREATE OBJECT oref_alv
EXPORTING
* i_shellstyle = 0
* i_lifetime =
i_parent = cl_gui_container=>screen0
* i_appl_events = space
* i_parentdbg =
* i_applogparent =
* i_graphicsparent =
* i_name =
* i_fcat_complete = space
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5
.
IF sy-subrc = 0.

CREATE OBJECT oref_handlers.
SET HANDLER oref_handlers->handle_button_click FOR oref_alv.

CALL METHOD oref_alv->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save =
* i_default = 'X'
is_layout = wa_layout
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = i_final
it_fieldcatalog = i_fieldcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'Error while ALV display'.
ENDIF.
ENDIF.
ENDIF.
CALL SCREEN 0100.

ENDFORM. "display_alv
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.

ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
CLEAR ok_code.
SET SCREEN 00.
LEAVE SCREEN.

ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

No comments:

Post a Comment