ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP 给数据表写修改记录

2021-08-05 14:02:13  阅读:242  来源: 互联网

标签:lfa1 修改 CDHDR WHEN cd 数据表 ABAP a600 MESSAGE


  • 在调用BAPI时,一般会自动写数据表的修改记录,但有些简单的逻辑,不需要使用BAPI实现,直接使用SQL语句修改数据表时,为了方便查找字段的修改记录可以以下方法实现。

DATA: OBJECTID TYPE CDHDR-OBJECTID,
TCODE TYPE CDHDR-TCODE,
PLANNED_CHANGE_NUMBER TYPE CDHDR-PLANCHNGNR,
UTIME TYPE CDHDR-UTIME,
UDATE TYPE CDHDR-UDATE,
USERNAME TYPE CDHDR-USERNAME,
CDOC_PLANNED_OR_REAL TYPE CDHDR-CHANGE_IND,
CDOC_UPD_OBJECT TYPE CDHDR-CHANGE_IND VALUE ‘U’,
CDOC_NO_CHANGE_POINTERS TYPE CDHDR-CHANGE_IND.

**准备修改文档的参数,用户名,时间,ID,等
PERFORM prepare_change_document USING i_lifnr.
**因为只对lfa1的名称,是否冻结字段进行更改,所以直接用UPDATE语句

PERFORM update_lfa1 USING ns_lfa1.
** 写表的修改记录*
PERFORM write_document USING ‘KRED’ ‘LFA1’ ns_lfa1 os_lfa1.

FORM update_lfa1 USING ns_lfa1 STRUCTURE lfa1.
UPDATE lfa1 FROM ns_lfa1.
ENDFORM.

FORM prepare_change_document USING i_id.

udate = sy-datum.
utime = sy-uzeit.
objectid = i_id.
tcode = ‘SRM’.
username = sy-uname.

ENDFORM.

FORM write_document USING i_objectclass i_tablename
ns_workarea os_workarea.

CALL FUNCTION ‘CHANGEDOCUMENT_OPEN’
EXPORTING
objectclass = i_objectclass
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 0. "OK.
WHEN 1. MESSAGE a600(cd) WITH ‘SEQUENCE INVALID’.
WHEN 2. MESSAGE a600(cd) WITH ‘OPEN ERROR’.
ENDCASE.

CALL FUNCTION ‘CHANGEDOCUMENT_SINGLE_CASE’
EXPORTING
tablename = i_tablename
workarea_old = os_workarea
workarea_new = ns_workarea
change_indicator = ‘U’
docu_delete = ‘’
docu_insert = ‘’
EXCEPTIONS
nametab_error = 1
open_missing = 2
position_insert_failed = 3
OTHERS = 4.

CASE sy-subrc.
WHEN 0. "OK.
WHEN 1. MESSAGE a600(cd) WITH ‘NAMETAB-ERROR’.
WHEN 2. MESSAGE a600(cd) WITH ‘OPEN MISSING’.
WHEN 3. MESSAGE a600(cd) WITH ‘INSERT ERROR’.
WHEN 4. MESSAGE a600(cd) WITH ‘SINGLE ERROR’.
ENDCASE.

CALL FUNCTION ‘CHANGEDOCUMENT_CLOSE’
EXPORTING
objectclass = i_objectclass
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 0. "OK.
WHEN 1. MESSAGE a600(cd) WITH ‘INSERT HEADER FAILED’.
WHEN 2. MESSAGE a600(cd) WITH ‘OBJECT INVALID’.
WHEN 3. MESSAGE a600(cd) WITH ‘OPEN MISSING’.
WHEN 4. MESSAGE A600 WITH ‘NO_POSITION_INSERTED’.
" do not abort, if positions are not inserted!!!
WHEN 5. MESSAGE a600(cd) WITH ‘CLOSE ERROR’.
ENDCASE.

ENDFORM.

标签:lfa1,修改,CDHDR,WHEN,cd,数据表,ABAP,a600,MESSAGE
来源: https://blog.csdn.net/cywjck/article/details/119416064

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有