SAP 物料主数据&BP主数据同步第三方系统

26 篇文章 7 订阅
18 篇文章 1 订阅

需求:SAP端创建及修改物料及BP的时候将数据发送给第三方系统,以保证多系统之间数据的一致性

物料主数据同步我用的是BTE的增强,步骤如下:

1.FIBF-->Settings-->Product-->of a customer

这里要新增一个Z的product 并打上激活标识

2.FIBF-->P/S Modules -->of a customer

源函数是SAMPLE_INTERFACE_00001250,需要复制出来,重新命名一个Z函数,放在这里

参数如下:

注意长文本的获取可以用read text 这个函数,这个是获取当前的,无需比较

BP的主数据发送,我这里用的是隐式增强点。(BADI的增强我没找到特别好用的。如果有人知道可以交流下)

位置如下

示例代码如下:

 DATA: LS_ZINTERFACE_LOG TYPE ZINTERFACE_LOG,
        LV_NR_RANGE_NR    TYPE INRI-NRRANGENR,
        LV_OBJECT         TYPE INRI-OBJECT.
  DATA: LV_REQ_JSON       TYPE STRING.
  DATA: LV_RES_JSON       TYPE STRING.
  DATA: LV_STATUS         TYPE CHAR01.
  DATA: LV_MESSAGE        TYPE STRING.
  DATA: LS_REQUEST        TYPE ZSDS_BP_CREATE_IMPORT.
  DATA: LV_URL            TYPE STRING,
        LV_AUTH_URL       TYPE STRING,
        LV_USER           TYPE ZEL_USER,
        LV_PASSWORD       TYPE ZEL_PASS.
  DATA: LS_ZTOMSURL       TYPE ZTOMSURL.
  DATA: LV_INTERFACE_ID   TYPE ZEL_INTERFACE_ID.
  DATA: LT_LINES          TYPE TABLE OF TLINE,
        LS_LINES          TYPE TLINE,
        LV_NAME           TYPE THEAD-TDNAME.
  DATA: LS_BUT000_N       TYPE BUT000.
  DATA: LT_KNVP           TYPE STANDARD TABLE OF KNVP.
  DATA: LS_KNVP           TYPE KNVP.
  DATA: LS_KNA1 TYPE KNA1.
  DATA: LS_LFA1 TYPE LFA1.
  DATA: LS_WYT3           TYPE WYT3.
  DATA: LT_WYT3           TYPE STANDARD TABLE OF WYT3.
  DATA: LV_ADRNR          TYPE AD_ADDRNUM.
  DATA: LS_ADRC           TYPE ADRC.
  DATA: LS_ADR6 TYPE ADR6.
  DATA: LS_LIST           TYPE ZOFFICELIST_S.
  DATA: LV_NUMBER         TYPE BUT000-PARTNER.
  DATA: LS_MESSAGE        TYPE SYMSG.
  DATA: LV_CUSTOMER_NOTE TYPE C LENGTH 255.
  DATA: LV_VENDOR_NOTE TYPE C LENGTH 255.

  IF BUS_JOEL_MAIN-CHANGE_NUMBER IS INITIAL .
  CALL FUNCTION 'BUP_NUMBER_GET_LAST'
   IMPORTING
     EV_PARTNER_NUMBER = LV_NUMBER
     ES_MESSAGE        = LS_MESSAGE.
  ELSE.
   LV_NUMBER  = BUS_JOEL_MAIN-CHANGE_NUMBER .
  ENDIF.


  SELECT SINGLE * FROM BUT000 INTO LS_BUT000_N       WHERE PARTNER = LV_NUMBER.
  SELECT SINGLE ADDRNUMBER INTO LV_ADRNR FROM BUT020 WHERE PARTNER  = LV_NUMBER.
  SELECT SINGLE * INTO LS_ADRC FROM ADRC             WHERE ADDRNUMBER = LV_ADRNR.
  SELECT SINGLE * INTO LS_ADR6 FROM ADR6 WHERE ADDRNUMBER = LV_ADRNR AND FLGDEFAULT = 'X'.

  SELECT SINGLE * INTO LS_LFA1
    FROM LFA1
    WHERE LIFNR = LV_NUMBER.

  SELECT SINGLE * INTO LS_KNA1
    FROM KNA1
    WHERE KUNNR = LV_NUMBER.

*  IF LS_BUT000_N-XDELE = 'X'.
*    LS_REQUEST-IS_BLOCK = '1'.
*  ELSE.
*    LS_REQUEST-IS_BLOCK = '0'.
*  ENDIF.
  LS_REQUEST-IS_BLOCK = '0'.

  LS_REQUEST-BP_TEL = LS_ADRC-TEL_NUMBER.
  IF LS_ADRC-TEL_EXTENS IS NOT INITIAL.
    CONCATENATE LS_REQUEST-BP_TEL '-' LS_ADRC-TEL_EXTENS INTO LS_REQUEST-BP_TEL.
  ENDIF.

  LS_REQUEST-BP_EMAIL = LS_ADR6-SMTP_ADDR.

  IF LS_BUT000_N-CHDAT IS INITIAL.
  LS_ZINTERFACE_LOG-FUNC   = 'Create BP'.
  LS_ZINTERFACE_LOG-INTERN = 'Create BP'.
  LS_ZINTERFACE_LOG-METHOD = 'I'.
  LV_INTERFACE_ID = 'BP01'.
  ELSE.
  LS_ZINTERFACE_LOG-FUNC   = 'Modify BP'.
  LS_ZINTERFACE_LOG-INTERN = 'Modify BP'.
  LS_ZINTERFACE_LOG-METHOD = 'M'.
  LV_INTERFACE_ID = 'BP02'.
  ENDIF.

  SELECT SINGLE * INTO LS_ZTOMSURL
    FROM ZTOMSURL
  WHERE INTERFACE_ID  = LV_INTERFACE_ID
  AND   ZOPEN         = 'X'.

  LS_REQUEST-COMPANY_CODE      = '8000'.
  LS_REQUEST-BP_NUMBER_EX        = lv_number.
  LS_REQUEST-BP_NAME           = LS_BUT000_N-NAME_ORG1.

  SELECT *
  FROM KNVP
  INTO TABLE LT_KNVP
  WHERE KUNNR = LV_NUMBER.
  IF SY-SUBRC = 0.
  "BILL TO
  READ TABLE LT_KNVP INTO LS_KNVP
  WITH KEY KUNNR = LV_NUMBER
           PARVW = 'RG'.
  IF SY-SUBRC = 0.
    IF LS_KNVP-KUNN2 = LV_NUMBER.
    CLEAR: LS_LIST.
    LS_LIST-COUNTRY  = LS_ADRC-COUNTRY.
    LS_LIST-CITY     = LS_ADRC-CITY1.
    LS_LIST-PROVINCE = LS_ADRC-REGION.
    LS_LIST-STREET   = LS_ADRC-STREET.
    LS_LIST-POST_CODE   = LS_ADRC-POST_CODE1.
    APPEND LS_LIST TO LS_REQUEST-BILLTO_LIST.
    ENDIF.
  ENDIF.
  "SHIP TO
  READ TABLE LT_KNVP INTO LS_KNVP
  WITH KEY KUNNR = LV_NUMBER
           PARVW = 'WE'.
  IF SY-SUBRC = 0.
    IF LS_KNVP-KUNN2 = LV_NUMBER.
    CLEAR: LS_LIST.
    LS_LIST-COUNTRY  = LS_ADRC-COUNTRY.
    LS_LIST-CITY     = LS_ADRC-CITY1.
    LS_LIST-PROVINCE = LS_ADRC-REGION.
    LS_LIST-STREET   = LS_ADRC-STREET.
    LS_LIST-POST_CODE   = LS_ADRC-POST_CODE1.
    APPEND LS_LIST TO LS_REQUEST-SHIPTO_LIST.
    ENDIF.
  ENDIF.

  ELSE.
*  SELECT *
*  FROM WYT3
*  INTO TABLE LT_WYT3
*  WHERE LIFNR = LV_NUMBER.
*  READ TABLE LT_WYT3 INTO LS_WYT3
*  WITH LIFNR = LV_NUMBER
*  .
  ENDIF.


  LV_NAME = LS_BUT000_N-PARTNER.

  CLEAR: LT_LINES.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      CLIENT                  = SY-MANDT
      ID                      = '0001'
      LANGUAGE                = SY-LANGU
      NAME                    = LV_NAME
      OBJECT                  = 'KNA1'
*     ARCHIVE_HANDLE          = 0
*     LOCAL_CAT               = 'X'
    TABLES
      LINES                   = LT_LINES
    EXCEPTIONS
      ID                      = 1
      LANGUAGE                = 2
      NAME                    = 3
      NOT_FOUND               = 4
      OBJECT                  = 5
      REFERENCE_CHECK         = 6
      WRONG_ACCESS_TO_ARCHIVE = 7
      OTHERS                  = 8.
  LOOP AT LT_LINES INTO LS_LINES .
    CONCATENATE LV_CUSTOMER_NOTE LS_LINES-TDLINE INTO LV_CUSTOMER_NOTE.
    CLEAR:LS_LINES.
  ENDLOOP.

  CLEAR: LT_LINES.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      CLIENT                  = SY-MANDT
      ID                      = '0001'
      LANGUAGE                = SY-LANGU
      NAME                    = LV_NAME
      OBJECT                  = 'LFA1'
*     ARCHIVE_HANDLE          = 0
*     LOCAL_CAT               = 'X'
    TABLES
      LINES                   = LT_LINES
    EXCEPTIONS
      ID                      = 1
      LANGUAGE                = 2
      NAME                    = 3
      NOT_FOUND               = 4
      OBJECT                  = 5
      REFERENCE_CHECK         = 6
      WRONG_ACCESS_TO_ARCHIVE = 7
      OTHERS                  = 8.
  LOOP AT LT_LINES INTO LS_LINES .
    CONCATENATE LV_VENDOR_NOTE LS_LINES-TDLINE INTO LV_VENDOR_NOTE.
    CLEAR:LS_LINES.
  ENDLOOP.

  IF LV_CUSTOMER_NOTE IS NOT INITIAL.
    LS_REQUEST-NOTES = LV_CUSTOMER_NOTE.
  ELSEIF LV_VENDOR_NOTE IS NOT INITIAL.
    LS_REQUEST-NOTES = LV_VENDOR_NOTE.
  ELSE.
    LS_REQUEST-NOTES = ''.
  ENDIF.

  CLEAR: LV_REQ_JSON.
*序列化JSON数据。
  LV_REQ_JSON = /UI2/CL_JSON=>SERIALIZE( DATA         = LS_REQUEST
                                         PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE ).



  CALL FUNCTION 'ZFM_REQUEST_INTERFACE'
    EXPORTING
      IV_REQUEST_JSON  = LV_REQ_JSON
      IV_URL           = LS_ZTOMSURL-URL
      IV_NAME          = LS_ZTOMSURL-USERNAME
      IV_PASSWORD      = LS_ZTOMSURL-PASSWORD
*     IV_TOKEN         =
      IV_TOKEN_URL     = LS_ZTOMSURL-TOKEN_URL
    IMPORTING
      EV_MESSA         = LV_MESSAGE
      EV_STATUS        = LV_STATUS
      EV_RESPONSE_JSON = LV_RES_JSON.

    IF STRLEN( LV_RES_JSON ) > 11.
      IF LV_RES_JSON+8(3) = '200'.
        LV_STATUS = 'S'.
      ELSE.
        LV_STATUS = 'E'.
      ENDIF.
    ENDIF.

  "Initialized Log File
  LV_OBJECT = 'ZCANR001'.
  LV_NR_RANGE_NR = '01'.
  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      NR_RANGE_NR             = LV_NR_RANGE_NR
      OBJECT                  = LV_OBJECT
      QUANTITY                = '1'
    IMPORTING
      NUMBER                  = LS_ZINTERFACE_LOG-LOGN "日志编号。
    EXCEPTIONS
      INTERVAL_NOT_FOUND      = 1
      NUMBER_RANGE_NOT_INTERN = 2
      OBJECT_NOT_FOUND        = 3
      QUANTITY_IS_0           = 4
      QUANTITY_IS_NOT_1       = 5
      INTERVAL_OVERFLOW       = 6
      BUFFER_OVERFLOW         = 7
      OTHERS                  = 8.

  LS_ZINTERFACE_LOG-IMPORT_JSON = LV_REQ_JSON.
  LS_ZINTERFACE_LOG-EXPORT_JSON = LV_RES_JSON.
  LS_ZINTERFACE_LOG-SYSS   = 'OMS'.
  LS_ZINTERFACE_LOG-ERNAM  = SY-UNAME.
  LS_ZINTERFACE_LOG-ERDAT  = SY-DATUM.
  LS_ZINTERFACE_LOG-ERTIM  = SY-UZEIT.
  LS_ZINTERFACE_LOG-URL    = LS_ZTOMSURL-URL.
  LS_ZINTERFACE_LOG-IFMSG  = LV_MESSAGE.
  LS_ZINTERFACE_LOG-STATUS  = LV_STATUS.
  MODIFY ZINTERFACE_LOG FROM LS_ZINTERFACE_LOG.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值