当前位置: 首页 > news >正文

SAP自定义表CDPOS日志修改记录

需求:
平台开发时,需要记录对自建表某些字段的变更履历,即写入CDHDR/CDPOS,正常方式是SCDO创建变更对象,然后调用自动生成的类方法完成记录写入,只是每次都需要自己写逻辑去获取对应的X结构(最新数据)和Y结构(历史数据),不想每次都写这段代码,故封装了一个动态方法,每次直接调用即可。

参考 SAP自建表日志_sap s4自建表有标准日志吗-CSDN博客

SAP ABAP自建表变更履历记录(动态更新)_sap自定义表修改记录-CSDN博客

https://wenku.baidu.com/view/95052a8ccd22bcd126fff705cc17552707225ea3.html?_wkts_=1709621750543&bdQuery=%E4%BF%9D%E5%AD%98%E6%95%B0%E6%8D%AE%E8%87%B3CDHDR

1.对自建表启用日志更改:

2.对要记录的字段对应的数据元素启用更改文档:

3.SCDO创建变更文档对象:

输入文本、表名,按照情况勾选表名后的选项,比如“内部表”选项:当勾选上则每次处理多条数据,生成的日志函数里包含CHANGEDOCUMENT_MULTIPLE_CASE子函数。不勾上则处理单条数据,生成的日志函数里包含CHANGEDOCUMENT_SINGLE_CASE的子函数。本例处理单条数据,则不勾选“内部表”

注意:可以选择生成函数,也可以选择生成CLASS 

注意

底层无非4个function 

1、CHANGEDOCUMENT_OPEN 开启 / 初始化 

2、CHANGEDOCUMENT_SINGLE_CASE 单个

3、CHANGEDOCUMENT_MULTIPLE_CASE 批量

4、CHANGEDOCUMENT_CLOSE 关闭 

找到SAP S4 已有的function ZWT_DEBI_WRITE_DOCUMENT

注意要用TCODE:SCDO - 变更文档对象 自动生成函数 不要手工调整,否则传输请求会被DDIC定义重新覆盖掉

CHDO => 由 RSSCD000 生成

FUNCTION ZWT_DEBI_WRITE_DOCUMENT.
*"----------------------------------------------------------------------
*"*"Verbuchungsfunktionsbaustein:
*"
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(OBJECTID) LIKE  CDHDR-OBJECTID
*"             VALUE(TCODE) LIKE  CDHDR-TCODE
*"             VALUE(UTIME) LIKE  CDHDR-UTIME
*"             VALUE(UDATE) LIKE  CDHDR-UDATE
*"             VALUE(USERNAME) LIKE  CDHDR-USERNAME
*"             VALUE(PLANNED_CHANGE_NUMBER) LIKE  CDHDR-PLANCHNGNR
*"                             DEFAULT SPACE
*"             VALUE(OBJECT_CHANGE_INDICATOR) LIKE  CDHDR-CHANGE_IND
*"                             DEFAULT 'U'
*"             VALUE(PLANNED_OR_REAL_CHANGES) LIKE  CDHDR-CHANGE_IND
*"                             DEFAULT SPACE
*"             VALUE(NO_CHANGE_POINTERS) LIKE  CDHDR-CHANGE_IND
*"                             DEFAULT SPACE
*"             VALUE(N_KNA1) LIKE  KNA1 STRUCTURE  KNA1
*"             VALUE(O_YKNA1) LIKE  KNA1 STRUCTURE  KNA1
*"             VALUE(N_KNB1) LIKE  KNB1 STRUCTURE  KNB1
*"             VALUE(O_YKNB1) LIKE  KNB1 STRUCTURE  KNB1
*"             VALUE(UPD_KNA1) LIKE  CDPOS-CHNGIND DEFAULT SPACE
*"             VALUE(UPD_KNB1) LIKE  CDPOS-CHNGIND DEFAULT SPACE
*"             VALUE(UPD_KNBK) LIKE  CDPOS-CHNGIND DEFAULT SPACE
*"       TABLES
*"              XKNBK STRUCTURE  FKNBK
*"              YKNBK STRUCTURE  FKNBK
*"----------------------------------------------------------------------
CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
  EXPORTING OBJECTCLASS = 'DEBI           '
            OBJECTID    = OBJECTID
            PLANNED_CHANGE_NUMBER = PLANNED_CHANGE_NUMBER
            PLANNED_OR_REAL_CHANGES = PLANNED_OR_REAL_CHANGES
  EXCEPTIONS SEQUENCE_INVALID = 1
             OTHERS           = 2.
CASE SY-SUBRC.
  WHEN 1. MESSAGE A001(F2) WITH 'SEQUENCE INVALID'.
  WHEN 2. MESSAGE A001(F2) WITH 'OPEN ERROR'.
ENDCASE.
* KNA1
IF UPD_KNA1                           NE SPACE.
   CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
     EXPORTING  TABLENAME           = 'KNA1                          '
                WORKAREA_OLD        = O_YKNA1
                WORKAREA_NEW        = N_KNA1
                CHANGE_INDICATOR    = UPD_KNA1
                DOCU_DELETE         = 'X'
     EXCEPTIONS NAMETAB_ERROR       = 1
                OPEN_MISSING        = 2
                POSITION_INSERT_FAILED = 3
                OTHERS              = 4.
   CASE SY-SUBRC.
     WHEN 1. MESSAGE A001(F2) WITH 'NAMETAB-ERROR'.
     WHEN 2. MESSAGE A001(F2) WITH 'OPEN MISSING'.
     WHEN 3. MESSAGE A001(F2) WITH 'INSERT ERROR'.
     WHEN 4. MESSAGE A001(F2) WITH 'SINGLE ERROR'.
   ENDCASE.
ENDIF.
* KNB1
IF UPD_KNB1                           NE SPACE.
   CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
     EXPORTING  TABLENAME           = 'KNB1                          '
                WORKAREA_OLD        = O_YKNB1
                WORKAREA_NEW        = N_KNB1
                CHANGE_INDICATOR    = UPD_KNB1
                DOCU_DELETE         = 'X'
     EXCEPTIONS NAMETAB_ERROR       = 1
                OPEN_MISSING        = 2
                POSITION_INSERT_FAILED = 3
                OTHERS              = 4.
   CASE SY-SUBRC.
     WHEN 1. MESSAGE A001(F2) WITH 'NAMETAB-ERROR'.
     WHEN 2. MESSAGE A001(F2) WITH 'OPEN MISSING'.
     WHEN 3. MESSAGE A001(F2) WITH 'INSERT ERROR'.
     WHEN 4. MESSAGE A001(F2) WITH 'SINGLE ERROR'.
   ENDCASE.
ENDIF.
* KNBK
IF UPD_KNBK                           NE SPACE.
   CALL FUNCTION 'CHANGEDOCUMENT_MULTIPLE_CASE'
     EXPORTING  TABLENAME           = 'KNBK                          '
                CHANGE_INDICATOR    = UPD_KNBK
                DOCU_DELETE         = 'X'
     TABLES     TABLE_OLD           = YKNBK
                TABLE_NEW           = XKNBK
     EXCEPTIONS NAMETAB_ERROR       = 1
                OPEN_MISSING        = 2
                POSITION_INSERT_FAILED = 3
                OTHERS              = 4.
   CASE SY-SUBRC.
     WHEN 1. MESSAGE A001(F2) WITH 'NAMETAB-ERROR'.
     WHEN 2. MESSAGE A001(F2) WITH 'OPEN MISSING'.
     WHEN 3. MESSAGE A001(F2) WITH 'INSERT ERROR'.
     WHEN 4. MESSAGE A001(F2) WITH 'MULTIPLE ERROR'.
   ENDCASE.
ENDIF.
CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
  EXPORTING  OBJECTCLASS    = 'DEBI           '
             OBJECTID       = OBJECTID
             DATE_OF_CHANGE = UDATE
             TIME_OF_CHANGE = UTIME
             TCODE          = TCODE
             USERNAME       = USERNAME
OBJECT_CHANGE_INDICATOR = OBJECT_CHANGE_INDICATOR
NO_CHANGE_POINTERS           = NO_CHANGE_POINTERS
  EXCEPTIONS HEADER_INSERT_FAILED   = 1
             OBJECT_INVALID         = 2
             OPEN_MISSING           = 3
             NO_POSITION_INSERTED   = 4
             OTHERS                 = 5.
CASE SY-SUBRC.
  WHEN 1. MESSAGE A001(F2) WITH 'INSERT HEADER FAILED'.
  WHEN 2. MESSAGE A001(F2) WITH 'OBJECT INVALID'.
  WHEN 3. MESSAGE A001(F2) WITH 'OPEN MISSING'.
  WHEN 5. MESSAGE A001(F2) WITH 'CLOSE ERROR'.
ENDCASE.
ENDFUNCTION.

4. 查询日志

使用程序CHANGEDOCU_READ(批量范围查询) /RSSCD100(单个查询)查看更改日志
日志数据记录表 CDHDR、CDPOS

CHANGEDOCU_READ: 如物料主数据变更,一次可查询多个物理变更日志

RSSCD100:选择屏幕为单值,一次只能查询一笔主数据变更日志

5. 日志相关标准函数
CHANGEDOCUMENT_READ_RANGES

这些函数组中的函数用来处理变更文档。可以不用直接读取 cdhdr、cdpos 等表。

SCD0                           更改文档创建
CHANGEDOCUMENT_CLOSE           完成具有对象特征的文档创建的更改
CHANGEDOCUMENT_INSERT_NUMBER
CHANGEDOCUMENT_IS_FIELD_INTRAW
CHANGEDOCUMENT_IS_GENERATED
CHANGEDOCUMENT_IS_KEY_INTRAW
CHANGEDOCUMENT_MULTIPLE_CASE   为对象(多重情况)创建改变文档项目
CHANGEDOCUMENT_OPEN            启动为对象特性创建更改文件
CHANGEDOCUMENT_PREPARE_TABLES  编辑改变文档创建表格
CHANGEDOCUMENT_SINGLE_CASE     给对象(单一情况)创建改变文档项目
CHANGEDOCUMENT_TEXT_CASE       给对象(文本情况)创建改变文档项目

SCD1                           读取并格式化更改文档
CHANGEDOCUMENT_PREPARE_DISPLAY Change document: Edit change document items
CHANGEDOCUMENT_PREPARE_POS     Change document: Edit change document items
CHANGEDOCUMENT_READ_HEADERS    Change document: Read change document header
CHANGEDOCUMENT_READ_POSITIONS  Change document: Read change document items
CHANGEDOCUMENT_UNICODE_CHECK
CHANGEDOCU_ARCHIVE_HANDLE_SET
CHANGEDOCU_CDPOS_READ
CHANGEDOCU_GUID_READ
CHANGEDOCU_HAS_GUID
CHANGEDOCU_READ_POS_W_UID
CHANGEDOCU_READ_PREP_POS_W_UID

SCD2                           读取并格式化更改文档
CHANGEDOCUMENT_READ            读取并编辑更改的文档
CHANGEDOCUMENT_READ_RANGES     Change document: Read and edit change documents
CHANGEDOCU_FILLTABKEY254

SCD3                           读取并格式化计划的更改
PLANNED_CHANGES_READ_HEADERS   读取计划更改的文档表头
PLANNED_CHANGES_READ_POSITIONS 读取并编辑计划更改的文件项

SCD4                           删除更改文档和计划的更改
CHANGEDOCUMENT_DELETE          删除修改的文档(不依赖客户,不注册)
CHANGEDOCUMENT_DELETE_V2
INTERN_CD_DELETE_ALL
PLANNED_CHANGES_DELETE         删除计划的改变

SCD5                           更改文档/存档
CD_DB_DEQUEUE
CD_DB_ENQUEUE
CHANGEDOCUMENT_READ_WITHOUT_ED
CHANGEDOCU_ARCHIVE_GET_TABLE
CHANGEDOCU_ARCHIVE_NO_CONTROL
CHANGEDOCU_ARCHIVE_OBJECT      改变文档/存档: 向存档传送对象
CHANGEDOCU_ARCHIVE_PUT_TABLE
CHANGEDOCU_CONVERT_OLD_DATA
CHANGEDOCU_DELETE_ARCHIVE_OBJ
CHANGEDOCU_GET_DELETE_FLAGS
CHANGEDOCU_MODIFY_DELETE_FLAGS
CHANGEDOCU_READ_ARCHIVE_OBJECT
CHANGEDOCU_RELOAD_ARCHIVE_OBJ

SCD6                           Display change documents
CHANGEDOCUMENT_DISPLAY         Display change documents

SCD8                           SZD:SCD8 Conversions for UNICODE
CHANGEDOCU_FIELDS_ANY2CHAR
CHANGEDOCU_FIELDS_CHAR2ANY
CHANGEDOCU_GUID_CREATE
CHANGEDOCU_KEY_ANY2CHAR
CHANGEDOCU_KEY_CHAR2ANY
CHANGEDOCU_OUTPUTLENGTH_GET
CHANGEDOCU_STRUCT_ANY2CHAR
CHANGEDOCU_STRUCT_CHAR2ANY
CHANGEDOCU_TABKEYLEN_GET
CHANGEDOCU_TABLE_ANY2CHAR
CHANGEDOCU_TABLE_CHAR2ANY
CHANGEDOCU_TABWKEY_ANY2CHAR
CHANGEDOCU_TABWKEY_CHAR2ANY

SCD9                           Read non-converted change doc. (>4.0A)
CD_OLD_PREPARE_POS             Change document: Edit change document items
CD_OLD_READ_HEADERS            Change document: Read change document header
CD_OLD_READ_POSITIONS          Change document: Read change document items

SCDH
CD_SHLP_EXIT_CDHDR_OBJCL
CD_SHLP_EXIT_CDHDR_OBJID
CD_SHLP_EXIT_CDHDR_TCODE
SCD_SHLP_EXIT_TCDOB

SCDO                           CHDO AENDBELEG => Gen. by RSSCD000
AENDBELEG_WRITE_DOCUMENT       CHDO AENDBELEG => Gen. by RSSCD000

SCDT                           Transport Chnge doc.obj. via shadow tab.
AFTER_IMP_CHDO
BEFORE_EXP_CHDO
CDNAMES_GET
CHDO_DELETE

http://www.dtcms.com/a/411933.html

相关文章:

  • 树莓派4B+Ubuntu20.04播放开机音乐
  • 贵州 做企业网站的流程建设网站的岗位职责
  • 运筹学——整数规划之0-1型整数线性规划,分支定界法,割平面法
  • 鹤岗商城网站建设wordpress置顶重复了
  • ROS节点控制实体机械臂运动
  • 做cpa推广的网站怎么弄怎么做企业招聘网站
  • 2015年手机网站需要主机 空间centos 7.3 wordpress
  • 小程序有做门户网站网站seo外链
  • 搭设企业网站教程东莞市品牌网站建设价格
  • 做网站数据库坏了太原市建设工程安全监督站网站
  • 网站建设一般需要几个步骤室内设计网址
  • SpreadJS:JavaScript 生态下高性能纯前端表格控件技术解析与实践
  • 天津中冀建设集团有限公司网站logo注册网站
  • 苏州教育学会网站建设龙岩百度推广
  • Qt常用控件之QProgressBar
  • 从机械齿轮到硅基大脑:计算机起源探秘
  • 网站怎么做登录电商网站的支付模块怎么做
  • 建设干部培训中心网站有没有哪种网站推荐一下
  • 东莞个人免费建网站WordPress去掉由开发
  • 做自己的博客网站WordPress调用不同主题
  • 深度学习Pytorch入门(2):手撕MNIST 手写数字分类
  • 新建网站网络空间网站整体框架
  • 网站设计对网站建设有哪些意义?中小企业电子商务网站建设
  • 做网站用的主机多少合适网站备案需要那些资料
  • Linux网关配置(转载)
  • 要屏蔽一个网站要怎么做中小企业网站建设问题
  • 推荐电商网站建设品牌策划公司介绍
  • 保定网站建设费用深圳市建工建设集团有限公司官网
  • 上海专业网站建站公司北京seo优化多少钱
  • 佛山设计网站公司高仿酒网站怎么做