zoukankan      html  css  js  c++  java
  • SAP保存操作记录CDHDR和CDPOS表

    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.

  • 相关阅读:
    ATL接口返回类型&&ATL接口返回字符串BSTR*
    不允许使用抽象类类型
    error C2039: 'SetDefaultDllDirectories'错误解决办法<转>
    directshow 虚拟摄像头 实例 代码解读
    UML建模之时序图(Sequence Diagram)<转>
    【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>
    在VS13上编译通过的代码放在12上编译-错误:l __dtoui3 referenced in function _event_debug_map_HT_GROW
    struct 方法使用
    2014华为机试题目
    贪心-poj-2437-Muddy roads
  • 原文地址:https://www.cnblogs.com/rainysblog/p/4250361.html
Copyright © 2011-2022 走看看