SAP保存操作记录CDHDR和CDPOS表
轉載自http://hi.baidu.com/derrial/item/4eb7c5da614ed83c49e1dd0b?(在此基礎上做了修改)
sap的字段和對象的修改都會保存舊值,數據保存在CDHDR和CDPOS表中,提取舊值可以采用兩種方法
1)?????使用sap的標準函數CHANGEDOCUMENT_READ_HEADERS?和CHANGEDOCUMENT_READ_POSITIONS
CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS' "Change document: Read change document items EXPORTING *???archive_handle = 0??????????" sy-tabix??????Handle on Open Archive Files ????changenumber =??????????????" cdpos-changenr??Change document number *???tablekey = SPACE????????????" cdpos-tabkey??Object class table key *???tablename = SPACE???????????" cdpos-tabname??Object class table name *???tablekey254 = SPACE?????????" cdpos_uid-tabkey??Table Key for CDPOS in Character 254 *???keyguid = SPACE?????????????" cdpos_uid-keyguid??UUID in Character Format *???keyguid_str = SPACE?????????" cdpos_str-keyguid??UUID in Character Format IMPORTING ????header =????????????????????" cdhdr???Change document header (structure CDHDR) ???et_cdred_str =??????????????" cdred_str_tab??Additional Change Document - Table for STRINGs * TABLES *???editpos =??????????????????" cdshw?????Table with edited change document items EDITPOS_WITH_HEADER?=???????????????"CDRED??更改文檔,顯示結構 EXCEPTIONS NO_POSITION_FOUND = 1???????"???????????????No item foun WRONG_ACCESS_TO_ARCHIVE = 2??"??????????????incorrect access to archive?
2)使用select語句直接從表中讀取。 直接使用SELECT語句讀取數據的示例: *提取信用額度字段修改的抬頭信息 ??????select cdhdr~changenr cdhdr~udate cdhdr~utime???????into corresponding fields of table p_cdhdr???????from cdhdr???????where cdhdr~objectclas = 'KLIM' and?????????cdhdr~objectid = wa_customerinfo-kunnr.?????if sy-subrc = 0. *提取信用額度字段修改的字段值 ????????select cdpos~changenr cdpos~value_old cdpos~value_new?????????into corresponding fields of table p_cdpos?????????from cdpos???????????for all entries in p_cdhdr?????????where cdpos~objectclas = 'KLIM' and???????????cdpos~objectid = wa_customerinfo-kunnr and???????????cdpos~changenr = p_cdhdr-changenr and???????????cdpos~tabname = 'KNKK' and???????????cdpos~fname = 'KLIMK'.???????if sy-subrc = 0.??????endif. endif.可以在CHANGEDOCUMENT_READ_HEADERS?中設置中斷獲得對象類型。
ex.
提取有變動的?Acc. changes
SELECT SINGLE tabkey value_new??INTO (cdpos-tabkey,ikoinh)
??????FROM cdpos
??????WHERE???objectclas = 'KRED'
????????AND objectid = itab-lifnr
????????AND changenr = itab-changenr
????????AND tabname = 'LFBK'
????????AND fname = 'KOINH'.
提取有變動的vendor最新日期
???SELECT MAX( udate ) INTO itab-cndate FROM cdhdr
??????WHERE objectclas = 'KRED' AND objectid = itab-lifnr.
--------------------------------------------------------------------------------
抓取所有有變動的程序
report ztest001.
TYPE-POOLS slis.
DATA : cdhdr TYPE cdhdr.
SELECT-OPTIONS :
???s_objcls FOR cdhdr-objectclas OBLIGATORY,
???s_objtid FOR cdhdr-objectid,
???s_chngnr FOR cdhdr-changenr,
???s_usrnam FOR cdhdr-username DEFAULT sy-uname,
???s_udate??FOR cdhdr-udate????DEFAULT sy-datum,
???s_time???FOR cdhdr-utime,
???s_tcode??FOR cdhdr-tcode,
???s_plncnr FOR cdhdr-planchngnr,
???s_chngno FOR cdhdr-act_chngno,
???s_wsplnd FOR cdhdr-was_plannd,
???s_chngid FOR cdhdr-change_ind.
SELECTION-SCREEN SKIP.
PARAMETERS p_max TYPE numc3 OBLIGATORY DEFAULT '200'.
*---------------------------------------------------------------------*
TYPES :
??BEGIN OF ty_s_cdhdr.
????????INCLUDE STRUCTURE cdhdr.
TYPES : checkbox,
??END OF ty_s_cdhdr,
??BEGIN OF ty_s_cdpos.
????????INCLUDE STRUCTURE cdpos.
TYPES : checkbox,
??END OF ty_s_cdpos.
*---------------------------------------------------------------------*
DATA :
* Layout for ALV
???gs_layout TYPE slis_layout_alv,
* Change document header
???t_cdhdr TYPE TABLE OF ty_s_cdhdr.
*---------------------------------------------------------------------*
START-OF-SELECTION.
* Read Change document header
??SELECT * INTO TABLE t_cdhdr
?????????????UP TO p_max ROWS
???????????FROM cdhdr
??????????WHERE objectclas IN s_objcls
????????????and objectid???in s_objtid
????????????and changenr???in s_chngnr
????????????AND username???IN s_usrnam
????????????AND udate??????IN s_udate
????????????AND utime??????IN s_time
????????????AND tcode??????IN s_tcode
????????????AND planchngnr IN s_plncnr
????????????AND act_chngno IN s_chngno
????????????AND was_plannd IN s_wsplnd
????????????AND change_ind IN s_chngid.
???gs_layout-zebra = 'X'.
???gs_layout-colwidth_optimize = 'X'.
???gs_layout-box_fieldname = 'CHECKBOX'.
* Display ALV
??CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
???????EXPORTING
?????????????i_callback_program???????= sy-cprog
?????????????i_callback_user_command = 'USER_COMMAND'
?????????????i_structure_name?????????= 'CDHDR'
?????????????is_layout????????????????= gs_layout
???????TABLES
?????????????t_outtab?????????????????= t_cdhdr.
*---------------------------------------------------------------------*
*????????FORM USER_COMMAND??????????????????????????????????????????????*
*---------------------------------------------------------------------*
FORM user_command USING u_ucomm?????TYPE syucomm
?????????????????????????us_selfield TYPE slis_selfield.?????"#EC CALLED
* Macro definition
??DEFINE m_sort.
????add 1 to ls_sort-spos.
?????ls_sort-fieldname = &1.
?????ls_sort-up = 'X'.
????append ls_sort to lt_sort.
??END-OF-DEFINITION.
??DATA :
?????ls_cdhdr TYPE ty_s_cdhdr,
?????ls_sort??TYPE slis_sortinfo_alv,
?????lt_sort??TYPE slis_t_sortinfo_alv,
*????Change document items
?????lt_cdpos TYPE TABLE OF ty_s_cdpos.
??CASE u_ucomm.
????WHEN '&IC1'.
??????PERFORM check_marked USING us_selfield.
*??????Read Change document items
??????LOOP AT t_cdhdr INTO ls_cdhdr WHERE checkbox = 'X'.
????????SELECT * APPENDING TABLE lt_cdpos
?????????????????FROM cdpos
????????????????WHERE objectclas = ls_cdhdr-objectclas
??????????????????AND objectid????= ls_cdhdr-objectid
??????????????????AND changenr????= ls_cdhdr-changenr.
??????ENDLOOP.
???????m_sort 'CHANGENR'.
*??????Display ALV
??????CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
???????????EXPORTING
?????????????????i_structure_name = 'CDPOS'
?????????????????is_layout?????????= gs_layout
?????????????????it_sort???????????= lt_sort
???????????TABLES
?????????????????t_outtab??????????= lt_cdpos.
??ENDCASE.
ENDFORM.???????????????????????????????" USER_COMMAND
*--------------------------------------------------------------------FORM check_marked USING us_selfield TYPE slis_selfield.
??FIELD-SYMBOLS :
?????<cdhdr> TYPE ty_s_cdhdr.
??READ TABLE t_cdhdr TRANSPORTING NO FIELDS WITH KEY checkbox = 'X'.
??IF NOT sy-subrc IS INITIAL AND
?????NOT us_selfield-tabindex IS INITIAL.
????READ TABLE t_cdhdr INDEX us_selfield-tabindex ASSIGNING <cdhdr>.
?????<cdhdr>-checkbox = 'X'.
??ENDIF.
ENDFORM.
總結
以上是生活随笔為你收集整理的SAP保存操作记录CDHDR和CDPOS表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SBO系统中销售订单日志的跟踪统计思路分
- 下一篇: 更改记录表CDHDR和CDPOS