01
前言
在自开发表变更历史记录一文中介绍了使用TCODE: SCD3查看变更日志,本文介绍如何使用ABAP代码显示变更日志。
02
代码
DATA: lt_objectclass TYPE cdobjectcl_range_tab,
lt_objectid TYPE cdobjectv_range_tab,
lt_cdredadd TYPE TABLE OF cdredadd,
lt_cdred_str TYPE cdred_str_tab,
lt_fields_no_disp TYPE cddisp_fields_tab,
wa_nodisp LIKE LINE OF lt_fields_no_disp.
lt_objectclass = VALUE #( ( sign = 'I' option = 'EQ' low = 'ZTMARA' ) ).
lt_objectid = VALUE #( ( sign = 'I' option = 'EQ' low = 'M001RL' ) ).
'FTEXT'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'SCRTEXT_S'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'SCRTEXT_M'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'TEXT_CASE'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'KEYGUID'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'EXT_KEYLEN'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'CHNGIND'. =
APPEND wa_nodisp TO lt_fields_no_disp.
CALL FUNCTION 'CHANGEDOCUMENT_READ_ALL'
EXPORTING
i_date_of_change = '19000101'
i_time_of_change = '000000'
i_date_until = sy-datum
i_time_until = '235959'
i_username = p_user
i_read_archive_is = space
it_objectclass = lt_objectclass
it_objectid = lt_objectid
IMPORTING
et_cdredadd = lt_cdredadd
et_cdred_str = lt_cdred_str
EXCEPTIONS
missing_input_objectclass = 0
missing_input_header = 0
no_position_found = 1
wrong_access_to_archive = 0
time_zone_conversion_error = 0
read_too_many_entries = 0
OTHERS = 2.
CASE sy-subrc.
WHEN 0.
SORT lt_cdredadd BY objectid udate utime changenr username.
CALL FUNCTION 'CHANGEDOCUMENT_DISPLAY'
EXPORTING
i_applicationid = sy-repid
flg_autocondense = 'X'
i_cb_program = sy-repid
i_callback_pf_status_set = lv_pf_status_set
i_objectclas = '*'
it_cdred_str = lt_cdred_str[]
it_fields_no_disp = lt_fields_no_disp
it_cdredadd = lt_cdredadd
i_no_sort = abap_true " keep sorting from modify_cd_output_table
i_screen_start_line = 1
i_screen_start_column = 5
i_screen_end_line = 30
i_screen_end_column = 185.
WHEN 1.
WHEN 2.
ENDCASE.
效果:
03
方法封装
可以封装到自己的类方法中,需要的时候方便调用
方法定义
class-methods DISPLAY_CHANGEDOCUMENT
importing
value(IT_OBJECTCLASS) type CDOBJECTCL_RANGE_TAB
value(IT_OBJECTID) type CDOBJECTV_RANGE_TAB .
方法实现
METHOD display_changedocument.
DATA:
lt_cdredadd TYPE TABLE OF cdredadd,
lt_cdred_str TYPE cdred_str_tab,
lt_fields_no_disp TYPE cddisp_fields_tab,
wa_nodisp LIKE LINE OF lt_fields_no_disp.
'FTEXT'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'SCRTEXT_S'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'SCRTEXT_M'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'TEXT_CASE'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'KEYGUID'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'EXT_KEYLEN'. =
APPEND wa_nodisp TO lt_fields_no_disp.
'CHNGIND'. =
APPEND wa_nodisp TO lt_fields_no_disp.
CALL FUNCTION 'CHANGEDOCUMENT_READ_ALL'
EXPORTING
i_date_of_change = '19000101'
i_time_of_change = '000000'
i_date_until = sy-datum
i_time_until = '235959'
i_username = p_user
i_read_archive_is = space
it_objectclass = it_objectclass
it_objectid = it_objectid
IMPORTING
et_cdredadd = lt_cdredadd
et_cdred_str = lt_cdred_str
EXCEPTIONS
missing_input_objectclass = 0
missing_input_header = 0
no_position_found = 1
wrong_access_to_archive = 0
time_zone_conversion_error = 0
read_too_many_entries = 0
OTHERS = 2.
CASE sy-subrc.
WHEN 0.
SORT lt_cdredadd BY objectid udate utime changenr username.
CALL FUNCTION 'CHANGEDOCUMENT_DISPLAY'
EXPORTING
i_applicationid = sy-repid
flg_autocondense = 'X'
i_cb_program = sy-repid
i_callback_pf_status_set = lv_pf_status_set
i_objectclas = '*'
it_cdred_str = lt_cdred_str[]
it_fields_no_disp = lt_fields_no_disp
it_cdredadd = lt_cdredadd
i_no_sort = abap_true " keep sorting from modify_cd_output_table
i_screen_start_line = 1
i_screen_start_column = 5
i_screen_end_line = 30
i_screen_end_column = 185.
WHEN 1.
WHEN 2.
ENDCASE.
ENDMETHOD.
温馨提示
如果你喜欢本文,请分享给有需要的朋友,想要获得更多信息,请关注我,若有问题以及建议,请在文末留言或者私信。