概述
业务场景:在做接口数据下发的时候,有时候需要增量的方式进行下发,常见的方式就是在发送数据的表里加个下发标识的字段或者增强一个字段,下发完后修改此字段的值来达到我们想要的目的。
这里有另一种方法,是通过IDOC的message type来抓取CDHDR、CDPOS的数据,通过这种系统的方式抓取可以不用增强标准表,还能防止一些奇奇怪怪的问题。
限制:只对主数据有效,对业务数据无效。
相关表:CDHDR、CDPOS、BDCP2
1、取增量数据
TYPES:
BEGIN OF TY_CHG_IDENTS,
CPIDENT TYPE BDCP-CPIDENT, "修改指针 ID
END OF TY_CHG_IDENTS.
DATA: WA_CHGPTRS TYPE BDCP,
GT_CHGPTRS TYPE TABLE OF BDCP,
WA_CHG_IDENTS TYPE TY_CHG_IDENTS,
GT_CHG_IDENTS TYPE TABLE OF TY_CHG_IDENTS.
*------------------------------------------------------------*
* DESC: 定义变/常量 *
*------------------------------------------------------------*
CONSTANTS: C_MSGTYPE TYPE EDI_MESTYP VALUE 'DEBMAS'."ZDEBMAS
"读取修改的数据
DATA:LT_RANGE_KUNNR TYPE RANGE OF KNA1-KUNNR,
LS_RANGE_KUNNR LIKE LINE OF LT_RANGE_KUNNR.
CLEAR:GT_CHGPTRS[],LT_RANGE_KUNNR.
G_DATUM = SY-DATUM.
G_UZEIT = SY-UZEIT.
CALL FUNCTION 'CHANGE_POINTERS_READ'
EXPORTING
CREATION_DATE_HIGH = G_DATUM "CREATION DATE UPPER LIMIT 默认当前日期
CREATION_TIME_HIGH = G_UZEIT "CREATION TIME UPPER LIMIT 默认当前时间
MESSAGE_TYPE = C_MSGTYPE "MESSAGE TYPE
READ_NOT_PROCESSED_POINTERS = 'X' "为空时,获取已处理的;默认为‘X',获取未处理的
TABLES
CHANGE_POINTERS = GT_CHGPTRS. "CHANGE POINT数据
2、下发完后需要将这些数据打上'X'标识,下次就不会发送了(当这些数据被修改的时候系统会自动把这个下发标识清空 (常规操作的修改,非常规操作没试过,应该不会有效)),具体可以查看表BDCP2
IF P_RB1 EQ 'X'.
"发送成功,修改CHANGE POINTER 状态
CALL FUNCTION 'CHANGE_POINTERS_STATUS_WRITE'
EXPORTING
MESSAGE_TYPE = C_MSGTYPE "MESSAGE TYPE
TABLES
CHANGE_POINTERS_IDENTS = GT_CHG_IDENTS.
COMMIT WORK.
ENDIF.
最后
以上就是传统小丸子为你收集整理的使用idoc的messge type(指针)的方式发送增量的全部内容,希望文章能够帮你解决使用idoc的messge type(指针)的方式发送增量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复