设为首页 收藏本站
查看: 734|回复: 0

[经验分享] SAP保存操作记录CDHDR和CDPOS表

[复制链接]
累计签到:19 天
连续签到:1 天
发表于 2015-9-20 10:46:31 | 显示全部楼层 |阅读模式
  http://blog.sina.com.cn/s/blog_7dce1fac01014yp2.html转自
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.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116149-1-1.html 上篇帖子: 学SAP吧 下篇帖子: ATJanCRM Business Map Learning from SAP CRM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表