*&---------------------------------------------------------------------*
*& Report ZIF0013
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zif0013.
DATA: gv_tabname TYPE dd02l-tabname.
DATA: gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat,
gt_fcat_db TYPE lvc_t_fcat,
dy_table TYPE REF TO data,
dy_tab_db TYPE REF TO data,
dy_line TYPE REF TO data,
dy_line_db TYPE REF TO data.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_tab_db> TYPE STANDARD TABLE,
<dyn_wa>,
<dyn_db>,
<dyn_field>.
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_type(30) AS LISTBOX VISIBLE LENGTH 20 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK block1.
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS: p_date FOR sy-datum.
SELECT-OPTIONS: p_time FOR sy-uzeit.
SELECT-OPTIONS: p_user FOR sy-uname.
SELECTION-SCREEN END OF BLOCK block2.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
DATA: lv_name TYPE vrm_id,
lt_list TYPE vrm_values,
ls_value LIKE LINE OF lt_list.
lv_name = 'P_TYPE'.
CLEAR ls_value.
ls_value-key = '1'.
ls_value-text = '员工信息'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '2'.
ls_value-text = '组织信息'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '3'.
ls_value-text = '组织间关系信息'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '4'.
ls_value-text = '组织岗位关系'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '5'.
ls_value-text = '岗位信息'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '6'.
ls_value-text = '产权信息'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '7'.
ls_value-text = '人岗关系'.
APPEND ls_value TO lt_list.
CLEAR ls_value.
ls_value-key = '8'.
ls_value-text = '值域信息'.
APPEND ls_value TO lt_list.
"下拉列表函数
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = lv_name
values = lt_list.
START-OF-SELECTION.
"根据勾选的表获取表结构
PERFORM frm_get_tabfield.
"创建动态内表
PERFORM frm_create_dynamic_table.
PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_TABFIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_tabfield .
"根据选择的类型获取表fieldcat
CLEAR gv_tabname.
CASE p_type.
WHEN '1'. "员工信息
gv_tabname = 'ZEMPL_LOG_IN'.
WHEN '2'. "组织信息
gv_tabname = 'ZORG_LOG_IN'.
WHEN '3'.
gv_tabname = 'ZORREALAT_LOG_IN'.
WHEN '4'.
gv_tabname = 'ZPOSR_LOG_IN'.
WHEN '5'.
gv_tabname = 'ZPOST_LOG_IN'.
WHEN '6'.
gv_tabname = 'ZPROP_LOG_IN'.
WHEN '7'.
gv_tabname = 'ZPSR_LOG_IN'.
WHEN '8'.
gv_tabname = 'ZLOOKUP'.
WHEN OTHERS.
ENDCASE.
*
* "根据表名读取数据库字段
* SELECT tabname,
* fieldname,
* position,
* datatype,
* leng
* FROM dd03l
* INTO TABLE @DATA(lt_dd03l)
* WHERE tabname = @gv_tabname.
* IF sy-subrc EQ 0.
* SORT lt_dd03l BY position.
* ENDIF.
*
* "更新FIELDCAT
* CLEAR: gt_fieldcat[].
* LOOP AT lt_dd03l INTO DATA(ls_dd03l).
* CLEAR: gs_fieldcat.
* gs_fieldcat-fieldname = ls_dd03l-fieldname.
* gs_fieldcat-col_pos = sy-tabix.
* gs_fieldcat-inttype = ls_dd03l-datatype.
* gs_fieldcat-intlen = ls_dd03l-leng.
* IF gs_fieldcat-fieldname NE 'MANDT' AND gs_fieldcat-fieldname NE '.INCLUDE'.
* APPEND gs_fieldcat TO gt_fieldcat.
* ENDIF.
** APPEND gs_fieldcat TO gt_fcat_db.
* ENDLOOP.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = gv_tabname
* 'ZPROP_LOG_IN'
CHANGING
ct_fieldcat = gt_fieldcat.
LOOP AT gt_fieldcat INTO gs_fieldcat.
IF gs_fieldcat-fieldname = 'REQUESTTIME' .
gs_fieldcat-scrtext_m = '请求时间'.
ENDIF.
IF gs_fieldcat-fieldname = 'RESPONSETIME' .
gs_fieldcat-scrtext_m = '响应时间'.
ENDIF.
IF gs_fieldcat-fieldname = 'ATTR1' .
gs_fieldcat-scrtext_m = '弹性字段1'.
ENDIF.
IF gs_fieldcat-fieldname = 'ATTR2' .
gs_fieldcat-scrtext_m = '弹性字段2'.
ENDIF.
IF gs_fieldcat-fieldname = 'ATTR3' .
gs_fieldcat-scrtext_m = '弹性字段3'.
ENDIF.
IF gs_fieldcat-fieldname = 'ZVALID'.
gs_fieldcat-scrtext_m = '是否有效'.
ENDIF.
MODIFY gt_fieldcat FROM gs_fieldcat.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_dynamic_table .
* clear: dy_table, <dyn_table>, <dyn_wa>, <dyn_field>.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dy_table.
* CALL METHOD cl_alv_table_create=>create_dynamic_table
* EXPORTING
* it_fieldcatalog = gt_fcat_db
* IMPORTING
* ep_table = dy_tab_db.
ASSIGN dy_table->* TO <dyn_table>. " 用表类型指针 <dyn_table> 指向 数据对象的内容.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
* ASSIGN dy_tab_db->* TO <dyn_tab_db>.
* CREATE DATA dy_line_db LIKE LINE OF <dyn_tab_db>.
* ASSIGN dy_line_db->* TO <dyn_db>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: gs_layout TYPE lvc_s_layo.
TRANSLATE p_user TO UPPER CASE.
IF p_type = '8'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table>
FROM (gv_tabname)
WHERE zcreat_date IN p_date
AND zcreat_time IN p_time
AND zcreat_user IN p_user .
ELSE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table>
FROM (gv_tabname)
WHERE datum IN p_date
AND uzeit IN p_time
AND zuname IN p_user .
ENDIF.
gs_layout-cwidth_opt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'STATUS_PF'
* i_callback_user_command = 'USER_COMMAND'
* i_grid_settings = gs_grid
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
TABLES
t_outtab = <dyn_table>.
ENDFORM.