REPORT z_alv_dynamic_data_v2.
*>*********************************************************************
* This report displays data from SAP tables, views (like SE16) *
* FM : REUSE_ALV_GRID_DISPLAY - V6.20 - Updated 26-Nov-08 *
*---------------------------------------------------------------------*
* Author : Michel PIOUD *
* HomePage : http://www.oocities.org/mpioud/Abap_programs.html *
*>*********************************************************************
* __o __o __o __o __o __o __o _ *
* _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\<._ _(\ *
* (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ (_) (_)/ *
***********************************************************************
DATA:
g_mandt TYPE mandt.
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 6(33) v_1 FOR FIELD p_table. "#EC NEEDED
PARAMETERS p_table TYPE dd03l-tabname OBLIGATORY MEMORY ID dtb.
SELECTION-SCREEN : END OF LINE, SKIP.
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 6(30) v_2 FOR FIELD s_mandt. "#EC NEEDED
SELECT-OPTIONS s_mandt FOR g_mandt DEFAULT sy-mandt
MATCHCODE OBJECT ddsef4clnt.
SELECTION-SCREEN : END OF LINE, SKIP.
SELECTION-SCREEN :
SKIP , BEGIN OF LINE, COMMENT 6(33) v_3 FOR FIELD p_max. "#EC NEEDED
PARAMETERS p_max(3) TYPE n DEFAULT '200' OBLIGATORY.
SELECTION-SCREEN END OF LINE.
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
PERFORM f_check_table.
*---------------------------------------------------------------------*
INITIALIZATION.
v_1 = 'Table'.
v_2 = 'Client'.
v_3 = 'Maximum of records'.
*---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_display_data.
*---------------------------------------------------------------------*
* Form F_DISPLAY_DATA
*---------------------------------------------------------------------*
FORM f_display_data.
TYPE-POOLS: slis. " ALV Global Types
DATA:
lp_table TYPE REF TO data, " Pointer to dynamic table
ls_layout TYPE slis_layout_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS :
<lt_data> TYPE STANDARD TABLE. " Data to display
* Create internal table
CREATE DATA lp_table TYPE STANDARD TABLE OF (p_table)
WITH NON-UNIQUE DEFAULT KEY.
ASSIGN lp_table->* TO <lt_data>.
* Field MANDT exists ?
SELECT SINGLE tabname
INTO p_table
FROM dd03l
WHERE tabname = p_table
AND fieldname = 'MANDT'
AND as4local = 'A'
AND as4vers = '0000'
AND position = '0001'
AND rollname IN ('MANDT','S_MANDT','SYMANDT').
IF sy-subrc EQ 0.
* Read data
SELECT * UP TO p_max ROWS
FROM (p_table) CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE <lt_data>
WHERE mandt IN s_mandt
ORDER BY PRIMARY KEY.
ELSE.
* Field CLIENT exists ?
SELECT SINGLE tabname
INTO p_table
FROM dd03l
WHERE tabname = p_table
AND fieldname = 'CLIENT'
AND as4local = 'A'
AND as4vers = '0000'
AND position = '0001'
AND rollname IN ('MANDT','S_MANDT','SYMANDT').
IF sy-subrc EQ 0.
* Read data
SELECT * UP TO p_max ROWS
FROM (p_table) CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE <lt_data>
WHERE client IN s_mandt
ORDER BY PRIMARY KEY.
ELSE.
* Read data
SELECT * UP TO p_max ROWS
FROM (p_table)
INTO CORRESPONDING FIELDS OF TABLE <lt_data>
ORDER BY PRIMARY KEY.
ENDIF.
ENDIF.
IF <lt_data>[] IS INITIAL.
* No table entries found for specified key
MESSAGE i429(mo).
EXIT.
ENDIF.
* Build Field catalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = p_table
i_client_never_display = ''
CHANGING
ct_fieldcat = lt_fieldcat
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.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.
* Display ALV List
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = <lt_data>.
ENDFORM. " F_DISPLAY_DATA
*---------------------------------------------------------------------*
* Form F_CHECK_TABLE
*---------------------------------------------------------------------*
FORM f_check_table.
DATA :
l_tabclass TYPE tabclass, " Table category
l_viewclass TYPE viewclass. " View Type
* Read table category
SELECT SINGLE tabclass viewclass
INTO (l_tabclass, l_viewclass)
FROM dd02l
WHERE tabname = p_table
AND as4local = 'A'
AND as4vers = '0000'.
IF sy-subrc NE 0.
* Table & is not active in the Dictionary
MESSAGE e402(mo) WITH p_table.
ELSEIF l_tabclass = 'INTTAB'.
* & is a structure, not a table
MESSAGE e403(mo) WITH p_table.
ELSEIF l_tabclass = 'VIEW' AND l_viewclass NE 'D'.
* Only use views of type "Maintenance view"
MESSAGE e309(sv).
ENDIF.
ENDFORM. " F_CHECK_TABLE
***************** END OF PROGRAM Z_ALV_DYNAMIC_DATA_V2 ****************