[SAP] SCDO自建表启用更改记录总结

    最近遇到一个自检表需要记录更改日志,想尽量通过标准功能去记录。

    表的技术设置里有一个日志更改的勾勾之前没有用过,查阅资料发现需要更改系统配置才能做到在SCU3中查询更改日志,改动影响较大故放弃。

    参考:ABAP 查看自建表的更改记录_七日辞的博客-CSDN博客

    然后考虑到系统标准单据的更改会记录在CDHDR/CDPOS表中,想对自建表也启用这个功能,查询资料后进行操作。

    首先将需要记录OLD VALUE和NEW VALUE的字段数据元素更改文档打上勾;

    然后在事务码SCDO下新建一个变更文档对象,基本信息填写之后点击生成对象(表与更改对象的对应关系保存在表TCDOBT中),会自动的创建出更新函数等一系列相关对象,我们下一步要用到的主要是更新函数;

   紧接着查看自动创建出来的更新函数:ZMG_ZTQM009_WRITE_DOCUMENT,在需要记录变更日志的地方调用这个函数。

传入主键ID,事务码,更新日期,时间,操作人,更新标识等基本数据,这些都是记录在抬头的,

行项目级的变更值需要传入X表和Y表,其中X表传入新值,Y表传入旧值,调用之后需要COMMIT。

操作正确的话在CDHDR/CDPOS表中就可以查到想要的记录了。

    "记录修改日志
    DATA: objectid TYPE cdhdr-objectid.
    DATA: icdtxt_zmg_ztqm009 TYPE TABLE OF cdtxt WITH HEADER LINE.
    DATA: xztqm009 TYPE TABLE OF yztqm009 WITH HEADER LINE.
    DATA: yztqm009 TYPE TABLE OF yztqm009 WITH HEADER LINE.

    IF lt_modify[] IS NOT INITIAL.
      LOOP AT lt_modify.
        CLEAR: objectid,xztqm009,xztqm009[],yztqm009,yztqm009[],icdtxt_zmg_ztqm009,icdtxt_zmg_ztqm009[].
        objectid = lt_modify-matnr && lt_modify-lifnr.
        MOVE-CORRESPONDING lt_modify TO xztqm009.
        xztqm009-kz = 'U'.
        APPEND xztqm009.
        READ TABLE lt_mold INTO DATA(ls_mold) WITH KEY
          matnr = lt_modify-matnr lifnr = lt_modify-lifnr BINARY SEARCH.
        IF sy-subrc = 0.
          MOVE-CORRESPONDING ls_mold TO yztqm009.
          yztqm009-kz = 'U'.
          APPEND yztqm009.
        ENDIF.
*        icdtxt_zmg_ztqm009-teilobjid = objectid.
*        icdtxt_zmg_ztqm009-updkz = 'U'.
*        APPEND icdtxt_zmg_ztqm009 .
        CALL FUNCTION 'ZMG_ZTQM009_WRITE_DOCUMENT'
          EXPORTING
            objectid           = objectid
            tcode              = sy-tcode
            utime              = sy-uzeit
            udate              = sy-datum
            username           = sy-uname
*           OBJECT_CHANGE_INDICATOR       = 'U'
            "upd_icdtxt_zmg_ztqm009 = 'U'
            upd_ztqm009        = 'U'
          TABLES
            icdtxt_zmg_ztqm009 = icdtxt_zmg_ztqm009[]
            xztqm009           = xztqm009[]
            yztqm009           = yztqm009[].
        COMMIT WORK AND WAIT.
      ENDLOOP.
    ENDIF.
    IF lt_insert[] IS NOT INITIAL.
      LOOP AT lt_insert.
        CLEAR: objectid,xztqm009,xztqm009[],icdtxt_zmg_ztqm009,icdtxt_zmg_ztqm009[].
        objectid = lt_insert-matnr && lt_insert-lifnr.
        MOVE-CORRESPONDING lt_insert TO xztqm009.
        xztqm009-kz = 'I'.
        APPEND xztqm009.
*        icdtxt_zmg_ztqm009-teilobjid = objectid.
*        icdtxt_zmg_ztqm009-updkz = 'I'.
*        APPEND icdtxt_zmg_ztqm009 .
        CALL FUNCTION 'ZMG_ZTQM009_WRITE_DOCUMENT'
          EXPORTING
            objectid                = objectid
            tcode                   = sy-tcode
            utime                   = sy-uzeit
            udate                   = sy-datum
            username                = sy-uname
            object_change_indicator = 'I'
            "upd_icdtxt_zmg_ztqm009  = 'I'
            upd_ztqm009             = 'I'
          TABLES
            icdtxt_zmg_ztqm009      = icdtxt_zmg_ztqm009[]
            xztqm009                = xztqm009[].
        COMMIT WORK AND WAIT.
      ENDLOOP.
    ENDIF.
    IF gt_delt_n[] IS NOT INITIAL.
      LOOP AT gt_delt_n.
        CLEAR: objectid,yztqm009,yztqm009[],icdtxt_zmg_ztqm009,icdtxt_zmg_ztqm009[].
        objectid = gt_delt_n-matnr && gt_delt_n-lifnr.
        MOVE-CORRESPONDING gt_delt_n TO yztqm009.
        yztqm009-kz = 'D'.
        APPEND yztqm009.
*        icdtxt_zmg_ztqm009-teilobjid = objectid.
*        icdtxt_zmg_ztqm009-updkz = 'D'.
*        APPEND icdtxt_zmg_ztqm009 .
        CALL FUNCTION 'ZMG_ZTQM009_WRITE_DOCUMENT'
          EXPORTING
            objectid                = objectid
            tcode                   = sy-tcode
            utime                   = sy-uzeit
            udate                   = sy-datum
            username                = sy-uname
            object_change_indicator = 'D'
          " upd_icdtxt_zmg_ztqm009  = 'D'
            upd_ztqm009             = 'D'
          TABLES
            icdtxt_zmg_ztqm009      = icdtxt_zmg_ztqm009[]
            yztqm009                = yztqm009[].
        COMMIT WORK AND WAIT.
      ENDLOOP.
    ENDIF.

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值