SE16N 修改日誌查詢

*&----------------------------------------------------
*& SHOW SE16N LOG
*&----------------------------------------------------
REPORT ytest015.

*------------------------------------------------------------*
*   TABLES
*------------------------------------------------------------*
TYPE-POOLS slis.

TABLES se16n_cd_key.


*------------------------------------------------------------*
*   DESC: 表/ 結構 / 視圖 / 變量的聲明
*------------------------------------------------------------*
DATA :lv_line   TYPE i,
      lv_sline  TYPE char10,
      lv_title  TYPE lvc_title.

"dynamic table
FIELD-SYMBOLS : <fs>  TYPE ANY,
                <ws>  TYPE ANY,
                <fld> TYPE ANY,
                <tab> TYPE STANDARD TABLE.

FIELD-SYMBOLS: <value> TYPE x,
               <input> TYPE x.

DATA:  lt_newtable TYPE REF TO data,
       ls_newline  TYPE REF TO data,
       lt_fldcat   TYPE        lvc_t_fcat,
       wa_fldcat   TYPE        lvc_s_fcat.

*------------------------------------------------------------*
* DESC:定義所需要的內表
*------------------------------------------------------------*
DATA : lt_zc TYPE se16n_cd_data OCCURS 0 WITH HEADER LINE,
       lt_zk TYPE se16n_cd_key  OCCURS 0 WITH HEADER LINE.

"alv
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fieldcat TYPE slis_fieldcat_alv,
      wa_layout   TYPE slis_layout_alv.

*----------------------------------------------------------------------*
*   PARAMETERS                                                         *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS p_tab TYPE dd02l-tabname OBLIGATORY.

SELECT-OPTIONS: s_id FOR se16n_cd_key-id,
                username FOR se16n_cd_key-uname,
                date FOR se16n_cd_key-sdate.
SELECTION-SCREEN END OF BLOCK b1.


*----------------------------------------------------------------------*
*   AT SELECTION-SCREEN                                                *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON p_tab.
  SELECT COUNT(*) FROM dd02l WHERE tabname = p_tab AND as4local = 'A'.
  IF sy-subrc <> 0.
    MESSAGE e001(zsd_01) WITH '表不存在'.
  ELSE.
    SELECT SINGLE ddtext INTO lv_title FROM dd02t WHERE tabname = p_tab AND ddlanguage = sy-langu AND as4local = 'A'.
  ENDIF.


*----------------------------------------------------------------------*
* Start-of-selection/開始選擇事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_process_data.
  PERFORM frm_display.


*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_data.

  SELECT * INTO TABLE lt_zk FROM se16n_cd_key WHERE id IN s_id AND tab = p_tab AND uname IN username AND sdate IN date.
  IF sy-subrc <> 0.
    MESSAGE s001(00) WITH 'No data' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  CHECK sy-subrc = 0.

  "get se16n log
  SORT lt_zk BY id.

  SELECT * INTO TABLE lt_zc FROM se16n_cd_data
    FOR ALL ENTRIES IN lt_zk
    WHERE id = lt_zk-id .
  IF sy-subrc <> 0.
    MESSAGE s001(00) WITH 'No data' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.                    "frm_get_data

*&---------------------------------------------------------------------*
*&      Form  frm_process_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_process_data.
  "1, create dynamic table
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = p_tab     "--表結構有變更時,由於顯示的最新版本,可能出現數據無法正常顯示
      i_client_never_display = ''
    CHANGING
      ct_fieldcat            = lt_fldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'SE16N_CD_KEY'
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = lt_fldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  DELETE lt_fldcat WHERE fieldname = 'ID' OR fieldname = 'TAB' OR fieldname = 'SDATE' OR fieldname = 'STIME' OR fieldname = 'CLNTDEP'.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'SE16N_CD_DATA'
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = lt_fldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  DELETE lt_fldcat WHERE fieldname = 'TAB' OR fieldname = 'LENGTH' OR fieldname = 'VALUE'.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = lt_fldcat
    IMPORTING
      ep_table        = lt_newtable.

  ASSIGN lt_newtable->* TO <tab>.
  CREATE DATA ls_newline LIKE LINE OF <tab>.
  ASSIGN ls_newline->* TO <ws>.



  "fill to innertable
  LOOP AT lt_zc.

    "unicode conversion
    CATCH SYSTEM-EXCEPTIONS assign_casting_illegal_cast = 1.
      ASSIGN lt_zc-value TO <value> CASTING.
    ENDCATCH.
    IF sy-subrc = 0.
      ASSIGN <ws>        TO <input> CASTING.
      <input> = <value>.
    ENDIF.

    CHECK <ws> IS ASSIGNED.
    CHECK <ws> IS NOT INITIAL.

    ASSIGN COMPONENT 'CHANGE_TYPE' OF STRUCTURE <ws> TO <fld>.
    IF <fld> IS ASSIGNED.
      <fld> = lt_zc-change_type.
    ENDIF.
    ASSIGN COMPONENT 'ID' OF STRUCTURE <ws> TO <fld>.
    IF <fld> IS ASSIGNED.
      <fld> = lt_zc-id.
    ENDIF.
    ASSIGN COMPONENT 'POS' OF STRUCTURE <ws> TO <fld>.
    IF <fld> IS ASSIGNED.
      <fld> = lt_zc-pos.
    ENDIF.

    READ TABLE lt_zk WITH KEY id = lt_zc-id.
    ASSIGN COMPONENT 'UNAME' OF STRUCTURE <ws> TO <fld>.
    IF <fld> IS ASSIGNED.
      <fld> = lt_zk-uname.
    ENDIF.

    APPEND <ws> TO <tab>.
  ENDLOOP.

ENDFORM.                    "frm_process_data


*&---------------------------------------------------------------------*
*&      Form  frm_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_display.

  DESCRIBE TABLE <tab> LINES lv_line.
  lv_sline = lv_line.
  CONDENSE lv_sline.
  CONCATENATE lv_title ' - (' lv_sline ')' INTO lv_title.

  "show alv table
  wa_layout-zebra                = 'X'.
  wa_layout-colwidth_optimize    = 'X'.     "優化列寬選項是否設置


  "FIELD CAT
  REFRESH it_fieldcat.

  CALL FUNCTION 'LVC_TRANSFER_TO_SLIS'
    EXPORTING
      it_fieldcat_lvc         = lt_fldcat
    IMPORTING
      et_fieldcat_alv         = it_fieldcat
    EXCEPTIONS
      it_data_missing         = 1
      it_fieldcat_lvc_missing = 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.

  DELETE it_fieldcat WHERE fieldname = 'MANDT'.

  "ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-cprog
      i_save             = 'A'
      i_grid_title       = lv_title
      it_fieldcat        = it_fieldcat
      is_layout          = wa_layout
    TABLES
      t_outtab           = <tab>
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

ENDFORM.                    "frm_display

*--------------------------------------------------------------------*
*-- text
*DATE     開始日期
*P_TAB    表名
*S_ID	    標識
*USERNAME	用戶名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章