使用idoc的messge type(指针)的方式发送增量

版权声明:如有转载请注明 by Huang.Lin https://blog.csdn.net/huanglin6/article/details/83899845

业务场景:在做接口数据下发的时候,有时候需要增量的方式进行下发,常见的方式就是在发送数据的表里加个下发标识的字段或者增强一个字段,下发完后修改此字段的值来达到我们想要的目的。

这里有另一种方法,是通过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.

 

猜你喜欢

转载自blog.csdn.net/huanglin6/article/details/83899845