需求:SAP端创建及修改物料及BP的时候将数据发送给第三方系统,以保证多系统之间数据的一致性
物料主数据同步我用的是BTE的增强,步骤如下:
1.FIBF-->Settings-->Product-->of a customer
![](https://img-blog.csdnimg.cn/img_convert/6f9dbbe5cad22380fdffd8bbe885d1a8.png)
这里要新增一个Z的product 并打上激活标识
![](https://img-blog.csdnimg.cn/img_convert/22907b4bb3febcae030e867b797bb896.png)
2.FIBF-->P/S Modules -->of a customer
![](https://img-blog.csdnimg.cn/img_convert/7c2b0b004968dcbe33cbf5fa1c869691.png)
源函数是SAMPLE_INTERFACE_00001250,需要复制出来,重新命名一个Z函数,放在这里
![](https://img-blog.csdnimg.cn/img_convert/007f3ab0073637c28a1681ed0463df0a.png)
参数如下:
![](https://img-blog.csdnimg.cn/img_convert/e67ffd8c58af51c4e53d97972b944c50.png)
注意长文本的获取可以用read text 这个函数,这个是获取当前的,无需比较
BP的主数据发送,我这里用的是隐式增强点。(BADI的增强我没找到特别好用的。如果有人知道可以交流下)
位置如下
![](https://img-blog.csdnimg.cn/img_convert/8ee591c23842d3d08a1a3743bff24a65.png)
示例代码如下:
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.