Showing posts with label Utility Codes. Show all posts
Showing posts with label Utility Codes. Show all posts

How to get Internal Table Components at runtime

This code can be helpful to get fields names of an Internal Table at Runtime.

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
*&---------------------------------------------------------------------*
*& Report ZTEST_INTERNAL_TAB_COMP
*&
*&---------------------------------------------------------------------*
*&***********DEMO Code for http://abap-explorer.blogspot.com/***********
*&
*&---------------------------------------------------------------------*

report ztest_internal_tab_comp line-size 100.
type-pools: abap.

*Declare the type of the internal table
types: begin of x_final,
matnr type matnr,
werks type werks_d,
flag type c length 1,
value type p length 10 decimals 2,
end of x_final.

data:
*The Internal table whose components are to found
i_data type sorted table of x_final with unique key matnr,
*Table to hold the components
tab_return type abap_compdescr_tab,
*Work area for the component table
components like line of tab_return.

*Call Perform to get the Int. Table Components
perform get_int_table_fields using i_data
changing tab_return.
*Display Components
loop at tab_return into components.
write: / components-name, components-type_kind,
components-length,components-decimals.
endloop.




*&---------------------------------------------------------------------*
*& Form get_int_table_fields
*&---------------------------------------------------------------------*
* Get the Components of an internal table
*----------------------------------------------------------------------*
* -->T_DATA text
* -->T_RETURN text
*----------------------------------------------------------------------*
form get_int_table_fields using t_data type any table
changing t_return type abap_compdescr_tab.

data:
oref_table type ref to cl_abap_tabledescr,
oref_struc type ref to cl_abap_structdescr,
oref_error type ref to cx_root,
text type string.
*Get the description of data object type
try.
oref_table ?=
cl_abap_tabledescr=>describe_by_data( t_data ).
catch cx_root into oref_error.
text = oref_error->get_text( ).
write: / text.
exit.
endtry.
*Get the line type
try.
oref_struc ?= oref_table->get_table_line_type( ).
catch cx_root into oref_error.
text = oref_error->get_text( ).
write: / text.
exit.
endtry.

append lines of oref_struc->components to t_return.

endform. " GET_INT_TABLE_FIELDS


Now if we test it...


The code can also be used to get components of a structure.

User Defined Conversion Exits

This post will show how to create custom user defined Conversion-Exits.

Step 1) Create a Function Group and two Function Modules:

a) Create a Function Group. For eg. ZCONVERSION_EXIT.

b) Create two Function Modules with naming convention:

CONVERSION_EXIT_xxxxx_INPUT and CONVERSION_EXIT_xxxxx_OUTPUT, where XXXXX is the name of the Conversion Routine. Here I will create a Routine ZZERO so the
name of the Function Modules will be CONVERSION_EXIT_ZZERO_INPUT and CONVERSION_EXIT_ZZERO_OUTPUT. While create the Function Module you may get some error like "Function Module name is reserved for SAP", you can ignore this.



The Function Modules should have one Import Parameter Input and one Export Parameter Output.

The FM for conversion from External Format to Internal Format:



The Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FUNCTION conversion_exit_zzero_input.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------

output = input.
REPLACE ALL OCCURRENCES OF 'Ø' IN output
WITH '0' IN CHARACTER MODE.

ENDFUNCTION.


The FM for conversion from Internal Format to External Format:



The Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
FUNCTION CONVERSION_EXIT_ZZERO_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
output = input.
REPLACE ALL OCCURRENCES OF '0' IN output
WITH 'Ø' IN CHARACTER MODE.

ENDFUNCTION.


Step 2) Create a data Element and a Domain.

Create the Data Element ZZERO:



The Domain ZZERO:



The name of the conversion routine created has to provided here. Now if the FM's for Conversion are created, if you double click on the Routine name, it will display the FM's.



Step 3)Now we can use a sample code to test the Conversion Routine:
The Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*&---------------------------------------------------------------------*
*& Report ZTEST_CONVERSION_EXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_conversion_exit.


PARAMETERS: p_value TYPE c LENGTH 20 OBLIGATORY.

DATA: v_result TYPE zzero. " data type with the Coversion Exit ZZERO

v_result = p_value.

WRITE: /5 'Input:',22 p_value,
/5
'Converted Value:',22 v_result.


Now test it, If we give an input as "345RGT00VDF4340".



When Executed:



The "0" has been replaced by "Ø"

Similarly the Input Conversion Routine can be used and tested.

Traffic Light in ALV Reports

Many a times we have to display a traffic light in ALV report. We can do that easily using "Exceptions" parameter provided by SAP. But it has one drawback, we cannot change the column header to something meaningful. It always set as "Exception" in case of ALV Grid and an icon in case of ALV List.

Here I'll show a workaround to show the traffic lights with a meaningful column header.

The exception display:


















The workaround is to use a field of type CHAR4 and display it as Icon.
To display a field as icon, in ALV Field catalog we have to mark ICON field as 'X'. The icons for traffic lights are : icon_green_light, icon_red_light and icon_yellow_light.


















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
*&---------------------------------------------------------------------*
*& Report ZTEST_SOURAV_TRAFFIC_LIGHTS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_sourav_traffic_lights.
TYPE-POOLS: slis,icon.
TYPES: BEGIN OF x_sflight,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
fldate TYPE s_date,
price TYPE s_price,
currency TYPE s_currcode,
seatsmax TYPE s_seatsmax,
seatsocc TYPE s_seatsocc,
END OF x_sflight.
TYPES:BEGIN OF x_final,
icon TYPE char4.
INCLUDE TYPE x_sflight.
TYPES: END OF x_final.

DATA: i_sflight TYPE STANDARD TABLE OF x_sflight INITIAL SIZE 0,
i_final TYPE STANDARD TABLE OF x_final INITIAL SIZE 0,
i_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv.


CONSTANTS: program TYPE syrepid VALUE sy-repid.

START-OF-SELECTION.
SELECT carrid " Airline Code
connid " Flight Connection Number
fldate " Flight date
price " Airfare
currency " Local currency of airline
seatsmax " Maximum capacity in economy class
seatsocc " Occupied seats in economy class
FROM sflight " Flight
INTO TABLE i_sflight.
IF sy-subrc <> 0.
MESSAGE i001(00) WITH 'No data found!'.
LEAVE LIST-PROCESSING.
ENDIF.


END-OF-SELECTION.

PERFORM populate_records.

PERFORM display_records.


*&---------------------------------------------------------------------*
*& Form populate_records
*&---------------------------------------------------------------------*
* Populate final table
*----------------------------------------------------------------------*
FORM populate_records .

DATA:
wa_sflight TYPE x_sflight,
wa_final TYPE x_final,
temp TYPE p DECIMALS 2.

LOOP AT i_sflight INTO wa_sflight.
CLEAR temp.
*Calculate Percentage of booked flights
temp = ( wa_sflight-seatsocc / wa_sflight-seatsmax ) .

IF temp > '0.9'.
*If booked more than 90%
wa_final-icon = icon_green_light.
ELSEIF temp < '0.2'.
*If booked less than 20%
wa_final-icon = icon_red_light.
ELSE.
*If its between 20% to 90 %
wa_final-icon = icon_yellow_light.
ENDIF.

wa_final-carrid = wa_sflight-carrid.
wa_final-connid = wa_sflight-connid.
wa_final-fldate = wa_sflight-fldate.
wa_final-price = wa_sflight-price.
wa_final-currency = wa_sflight-currency.
wa_final-seatsmax = wa_sflight-seatsmax.
wa_final-seatsocc = wa_sflight-seatsocc.

APPEND wa_final TO i_final.
CLEAR wa_final.
ENDLOOP.
FREE i_sflight.
ENDFORM. " populate_records
*&---------------------------------------------------------------------*
*& Form display_records
*&---------------------------------------------------------------------*
* Subroutines for Display
*----------------------------------------------------------------------*
FORM display_records .

PERFORM populate_field_catalog.

PERFORM populate_layout.

PERFORM trigger_alv.

ENDFORM. " display_records
*&---------------------------------------------------------------------*
*& Form populate_field_catalog
*&---------------------------------------------------------------------*
* Popualte Field Catalog
*----------------------------------------------------------------------*
FORM populate_field_catalog .
DATA:
wa_fieldcat TYPE slis_fieldcat_alv.
DEFINE fcat_merge.

wa_fieldcat-col_pos = &1.
wa_fieldcat-fieldname = &2.
if wa_fieldcat-fieldname = 'ICON'.
wa_fieldcat-icon = 'X'. " Display the field as ICON
wa_fieldcat-seltext_m = 'Occupency Status'. " Column Header
wa_fieldcat-inttype = 'C'.
wa_fieldcat-outputlen = '4'.
endif.

wa_fieldcat-ref_fieldname = &3.
wa_fieldcat-ref_tabname = &4.

if wa_fieldcat-fieldname = 'PRICE'.
wa_fieldcat-cfieldname = 'CURRENCY'.
wa_fieldcat-ctabname = 'I_FINAL'.
endif.

append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
END-OF-DEFINITION.

fcat_merge: '1' 'ICON' '' '',
'2' 'CARRID' 'CARRID' 'SFLIGHT',
'3' 'CONNID' 'CONNID' 'SFLIGHT',
'4' 'FLDATE' 'FLDATE' 'SFLIGHT',
'5' 'PRICE' 'PRICE' 'SFLIGHT',
'6' 'CURRENCY' 'CURRENCY' 'SFLIGHT',
'7' 'SEATSMAX' 'SEATSMAX' 'SFLIGHT',
'8' 'SEATSOCC' 'SEATSOCC' 'SFLIGHT'.

ENDFORM. " populate_field_catalog

*&---------------------------------------------------------------------*
*& Form populate_layout
*&---------------------------------------------------------------------*
* Populate LAYOUT Structure for ALV
*----------------------------------------------------------------------*
FORM populate_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
ENDFORM. "populate_layout
*&---------------------------------------------------------------------*
*& Form trigger_alv
*&---------------------------------------------------------------------*
* Trigger the ALV API
*----------------------------------------------------------------------*
FORM trigger_alv .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = program
is_layout = wa_layout
it_fieldcat = i_fieldcat
TABLES
t_outtab = i_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE i001(00) WITH 'Error while displaing ALV'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " trigger_alv

Display an ALV in a Selection Screen

This program demonstrates how to display an ALV grid in the selection screen itself upon hitting "ENTER" button.

The Selection Screen:



The ALV (Upon hitting enter):



The ALV gets refreshed when new selection screen values are entered:



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
*&---------------------------------------------------------------------*
*& Report ZSB_ALV_SAME_SCREEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsb_alv_same_screen.

DATA:
wa_sflight TYPE sflight,
i_sflight TYPE STANDARD TABLE OF sflight INITIAL SIZE 0,
oref_dock TYPE REF TO cl_gui_docking_container,
oref_alv TYPE REF TO cl_gui_alv_grid,
i_exclude TYPE TABLE OF syucomm.


SELECT-OPTIONS:
s_carrid FOR wa_sflight-carrid,
s_connid FOR wa_sflight-connid,
s_fldate FOR wa_sflight-fldate.

AT SELECTION-SCREEN OUTPUT.

APPEND 'ONLI' TO i_exclude.
APPEND 'SJOB' TO i_exclude.
APPEND 'PRIN' TO i_exclude.

CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
p_program = sy-repid
TABLES
p_exclude = i_exclude.


AT SELECTION-SCREEN.
CHECK sy-ucomm = space.
SELECT * FROM sflight INTO TABLE i_sflight
WHERE carrid IN s_carrid
AND connid IN s_connid
AND fldate IN s_fldate.

IF sy-subrc = 0.

IF oref_dock IS NOT BOUND.

CREATE OBJECT oref_dock
EXPORTING
repid = sy-repid
dynnr = '1000'
side =
cl_gui_docking_container=>dock_at_bottom
ratio = 70
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF oref_alv IS NOT BOUND.

CHECK oref_dock IS BOUND.
CREATE OBJECT oref_alv
EXPORTING
i_parent = oref_dock
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CHECK oref_alv IS BOUND.

CALL METHOD oref_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
it_outtab = i_sflight
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.

CALL METHOD oref_alv->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDIF.
ENDIF.

Demo program for TOP-OF-PAGE for ALV displayed through CL_GUI_ALV_GRID

This program demonstrates how to create TOP OF PAGE for an ALV grid displayed through CL_GUI_ALV_GRID. One interesting fact which may be considered here is that the splitter TOP-OF-PAGE is not called while printing or background spool and the TOP-OF-PAGE printed in the spool cannot be displayed in the foreground.

The TOP-OF-PAGE displayed in foreground (this TOP-OF-PAGE won't be printed):



Choose the list output:



The list output(this top-of-page will be printed):



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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
*&---------------------------------------------------------------------*
*& Report Z_SOURAV_ALV_TOP_OF_PAGE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT z_sourav_alv_top_of_page.

*----------------------------------------------------------------------*
* CLASS cl_main DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_main DEFINITION.
PUBLIC SECTION.
METHODS:
constructor,
get_data,
populate_fc_layout,
top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING
e_dyndoc_id
table_index,
print_top_of_page FOR EVENT print_top_of_page OF cl_gui_alv_grid
IMPORTING table_index,
display.


PROTECTED SECTION.

PRIVATE SECTION.
TYPE-POOLS:sdydo.
DATA:i_sbook TYPE STANDARD TABLE OF sbook INITIAL SIZE 0.
DATA:oref_splitter TYPE REF TO cl_gui_splitter_container,
oref_container TYPE REF TO cl_gui_custom_container,
oref_alv TYPE REF TO cl_gui_alv_grid,
container1 TYPE REF TO cl_gui_container,
container2 TYPE REF TO cl_gui_container,
oref_doc TYPE REF TO cl_dd_document,
oref_html TYPE REF TO cl_gui_html_viewer,
wa_layout TYPE lvc_s_layo,
i_fieldcatalog TYPE lvc_t_fcat.

ENDCLASS. "cl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_main IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_main IMPLEMENTATION.
METHOD constructor.

CREATE OBJECT oref_container
EXPORTING
container_name = 'CONTAINER'
repid = 'Z_SOURAV_ALV_TOP_OF_PAGE'
dynnr = '0100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


CREATE OBJECT oref_splitter
EXPORTING
parent = oref_container
rows = 2
columns = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD oref_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = container1.

CALL METHOD oref_splitter->set_row_height
EXPORTING
id = 1
height = 20
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


CALL METHOD oref_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = container2.


CREATE OBJECT oref_doc
EXPORTING
style = 'ALV_GRID'.


CREATE OBJECT oref_alv
EXPORTING
i_parent = container2
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


ENDMETHOD. "constructor
METHOD get_data.
SELECT * FROM sbook INTO TABLE i_sbook UP TO 500 ROWS.
IF sy-subrc <> 0.

ENDIF.

ENDMETHOD. "get_data
METHOD populate_fc_layout.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SBOOK'
i_client_never_display = 'X'
i_internal_tabname = 'I_SBOOK'
CHANGING
ct_fieldcat = i_fieldcatalog
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

wa_layout-cwidth_opt = 'X'.

ENDMETHOD. "populate_fc_layout
METHOD top_of_page.

DATA: text TYPE sdydo_text_element,
background_id TYPE sdydo_key VALUE 'ALV_BACKGROUND'.

text = 'Top of Page'.

CALL METHOD oref_doc->add_text
EXPORTING
text = text
sap_color = cl_dd_document=>list_positive
sap_fontsize = cl_dd_document=>large.

oref_doc->new_line( ).
text = 'Line1'.

CALL METHOD oref_doc->add_text
EXPORTING
text = text.

CREATE OBJECT oref_html
EXPORTING
parent = container1
EXCEPTIONS
cntl_error = 1
cntl_install_error = 2
dp_install_error = 3
dp_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

oref_doc->html_control = oref_html.

CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING
document = oref_doc
bottom = space.

CALL METHOD oref_doc->merge_document.

CALL METHOD oref_doc->set_document_background
EXPORTING
picture_id = background_id.

CALL METHOD oref_doc->display_document
EXPORTING
reuse_control = 'X'
parent = container1
EXCEPTIONS
html_display_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMETHOD. "create_top_of_page
METHOD display.

SET HANDLER me->top_of_page FOR oref_alv.
SET HANDLER me->print_top_of_page FOR oref_alv.

CALL METHOD oref_alv->set_table_for_first_display
EXPORTING
is_layout = wa_layout
CHANGING
it_outtab = i_sbook
it_fieldcatalog = i_fieldcatalog
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD oref_doc->initialize_document
.


CALL METHOD oref_alv->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = oref_doc.


CALL SCREEN 0100.
ENDMETHOD. "display
METHOD print_top_of_page.
WRITE:/5 'Print top of page' COLOR 5 INTENSIFIED OFF.
WRITE:/5 'Line1'.
ENDMETHOD. "print_top_of_page
ENDCLASS. "cl_main IMPLEMENTATION

DATA: oref_main TYPE REF TO cl_main.
DATA:ok_code TYPE syucomm.

START-OF-SELECTION.

CREATE OBJECT oref_main.

oref_main->get_data( ).
oref_main->populate_fc_layout( ).

END-OF-SELECTION.

oref_main->display( ).
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
SET SCREEN 00.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT