REPORT zjoey_test_20061230 NO STANDARD PAGE HEADING.
INCLUDE zjoey_test_20061230top.
INCLUDE zjoey_test_20061230f01.
AT SELECTION-SCREEN ON p_tabnam.
PERFORM check_tabname.
START-OF-SELECTION.
PERFORM get_fieldtab.
PERFORM get_data.
END-OF-SELECTION.
PERFORM set_page_width.
PERFORM write_data.
TOP-OF-PAGE.
PERFORM write_page_top.
AT LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
READ TABLE <fs_itb> INDEX g_tabix INTO <fs_line>.
NEW-PAGE LINE-SIZE 0.
PERFORM write_detail USING 0.
WHEN 2.
PERFORM write_detail USING g_fieldno.
*------let detail list 2 back to basic list
sy-lsind = 1.
ENDCASE.
*&---------------------------------------------------------------------*
*& Include ZJOEY_TEST_20061230TOP
*&---------------------------------------------------------------------*
*========================================================
*DATA FOR PROGRAM
*========================================================
DATA: t_dfies LIKE dfies OCCURS 0 WITH HEADER LINE,
g_tabix LIKE syst-tabix VALUE 1,
g_fieldno TYPE i.
DATA: ref_tab TYPE REF TO data.
FIELD-SYMBOLS: <fs_line> TYPE ANY,
<fs_itb> TYPE STANDARD TABLE,
<fs_field> TYPE ANY,
<fs_label> TYPE ANY.
*========================================================
*SELECTION-SCREEN
*========================================================
PARAMETERS: p_tabnam LIKE dd02l-tabname.
PARAMETERS: p_linsz LIKE syst-linsz DEFAULT 250,
p_linct LIKE syst-linct DEFAULT 100.
PARAMETERS: p_name TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X',
p_label TYPE c RADIOBUTTON GROUP grp1.
*&---------------------------------------------------------------------*
*& Include ZJOEY_TEST_20061230F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_fieldtab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_fieldtab .
CALL FUNCTION 'GET_FIELDTAB'
EXPORTING
tabname = p_tabnam
TABLES
fieldtab = t_dfies
EXCEPTIONS
internal_error = 1
no_texts_found = 2
table_has_no_fields = 3
table_not_activ = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE i006(bc405) WITH 'This table is not exit'.
LEAVE PROGRAM.
ENDIF.
ENDFORM. " get_fieldtab
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
*---Ref to data dictionary
CREATE DATA ref_tab TYPE TABLE OF (p_tabnam).
ASSIGN ref_tab->* TO <fs_itb>.
CREATE DATA ref_tab TYPE (p_tabnam).
ASSIGN ref_tab->* TO <fs_line>.
*---Select Data
SELECT *
UP TO p_linct ROWS
INTO TABLE <fs_itb>
FROM (p_tabnam).
IF sy-subrc NE 0.
MESSAGE i006(bc405) WITH 'No data in this table !'.
LEAVE PROGRAM.
ENDIF.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form write_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_data .
LOOP AT <fs_itb> INTO <fs_line>.
*---get index
g_tabix = sy-tabix.
*---show line
PERFORM write_line.
NEW-LINE.
ENDLOOP.
CLEAR g_tabix.
ENDFORM. " write_data
*&---------------------------------------------------------------------*
*& Form write_line
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_line.
DATA: l_linsz TYPE i.
*---Clear
CLEAR: l_linsz.
sy-subrc = 0.
WHILE sy-subrc = 0.
*------get Field att
READ TABLE t_dfies INDEX sy-index.
l_linsz = l_linsz + t_dfies-outputlen + 1.
IF l_linsz GE p_linsz.
EXIT.
ENDIF.
ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
*------set color
IF t_dfies-keyflag EQ 'X'.
WRITE <fs_field> COLOR 4.
ELSE.
WRITE <fs_field>.
ENDIF.
*------set field index
HIDE: g_tabix.
ENDWHILE.
ENDFORM. " write_line
*&---------------------------------------------------------------------*
*& Form write_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_field .
WRITE 'ok'.
ENDFORM. " write_field
*&---------------------------------------------------------------------*
*& Form write_detail
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_detail USING f_fieldno.
DATA: l_fieldno TYPE i.
l_fieldno = f_fieldno.
sy-subrc = 0.
WHILE sy-subrc = 0.
*------get Field att
g_fieldno = sy-index.
READ TABLE t_dfies INDEX sy-index.
ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
*------show field name or label
IF p_name EQ 'X'.
ASSIGN t_dfies-fieldname TO <fs_label>.
ELSE.
ASSIGN t_dfies-scrtext_m TO <fs_label>.
ENDIF.
*------show single field or all fields
IF f_fieldno EQ 0 OR l_fieldno EQ sy-index.
*------set color
IF t_dfies-keyflag EQ 'X'.
WRITE:/ <fs_label> COLOR 4,
' : ' COLOR 4,
<fs_field> COLOR 4.
ELSE.
WRITE:/ <fs_label>,
' : ',
<fs_field>.
ENDIF.
*------set field index
HIDE: g_fieldno.
ENDIF.
ENDWHILE.
ENDFORM. " write_detail
*&---------------------------------------------------------------------*
*& Form set_key_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_page_width .
DATA: l_key_length TYPE i.
*---set list width check p_linsz max length
IF p_linsz GE 1023.
p_linsz = 1023.
ENDIF.
NEW-PAGE LINE-SIZE p_linsz.
ENDFORM. " set_key_field
*&---------------------------------------------------------------------*
*& Form write_page_top
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_page_top .
DATA: l_key_length TYPE i,
l_len TYPE i,
l_linsz TYPE i.
*---Clear
CLEAR: l_linsz.
*---set key field not to scroll
LOOP AT t_dfies.
IF t_dfies-keyflag EQ 'X'.
l_key_length = l_key_length + t_dfies-outputlen + 1.
ENDIF.
ENDLOOP.
SET LEFT SCROLL-BOUNDARY COLUMN l_key_length.
*---show top of page
LOOP AT t_dfies.
l_len = t_dfies-outputlen.
l_linsz = l_linsz + t_dfies-outputlen + 1.
IF l_linsz LE p_linsz.
IF p_name EQ 'X'.
ASSIGN t_dfies-fieldname TO <fs_label>.
ELSE.
ASSIGN t_dfies-scrtext_s TO <fs_label>.
ENDIF.
WRITE AT: (t_dfies-outputlen) <fs_label> COLOR 5.
ENDIF.
ENDLOOP.
NEW-LINE.
ULINE.
ENDFORM. " write_page_top
*&---------------------------------------------------------------------*
*& Form check_tabname
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_tabname .
DATA: l_tabname TYPE dd02l-tabname.
SELECT SINGLE tabname
FROM dd02l
INTO l_tabname
WHERE tabname EQ p_tabnam
AND tabclass EQ 'TRANSP'.
IF sy-subrc NE 0.
MESSAGE e006(bc405) WITH 'This table is not tran. table ! '.
ENDIF.
ENDFORM. " check_tabname