使用idoc的messge type(指针)的方式发送增量
业务场景:在做接口数据下发的时候,有时候需要增量的方式进行下发,常见的方式就是在发送数据的表里加个下发标识的字段或者增强一个字段,下发完后修改此字段的值来达到我们想要的目的。
这里有另一种方法,是通过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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架