此次遇到一个问题,在修改销售订单送达方的信息时,bapi返回修改成功,但实际上是没有修改到的,随后一直debug检查发现新值并未更新进去。
此次要修改的信息如图下所圈:
此前一直选用的为PARTNERS和PARTNERCHANGES里的结构,而忽略了第三个PARTNERADDRESSES。
由于这次仅只需要修改名称地址电话等内容,那么关键便是需要在结构PARTNERCHANGES(ADDR_LINK)的一个字段中传递一个虚拟地址号,并在结构PARTNERADDRESSES(ADDR_NO)的一个字段中传递相同的数字。
此处参考的链接:通过BAPI_SALESORDER_CHANGE更新收货方地址
以下奉上相关代码:
LOOP AT LT_ALV INTO LS_ALV.
CLEAR:LT_RETURN,LT_PARTNER.
LV_ORDER_HEADER_INX-UPDATEFLAG = 'U'. "U为更新
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' "售达方
EXPORTING
INPUT = 'SH'
IMPORTING
OUTPUT = LS_PARTNER-PARTN_ROLE.
LS_PARTNER-PARTN_NUMB = LS_ALV-KUNNR.
LS_PARTNER-COUNTRY = 'CN'.
LS_PARTNER-NAME = LS_ALV-NAME1.
* ls_partner-postl_code = ls_alv-post_code1.
* ls_partner-city = ls_alv-city1.
LS_PARTNER-STREET = LS_ALV-STREET.
LS_PARTNER-TELEPHONE = LS_ALV-TEL_NUMBER.
APPEND LS_PARTNER TO LT_PARTNER.
CLEAR:LS_PARTNER.
LS_PARTNERCHANGES-UPDATEFLAG = 'U'.
LS_PARTNERCHANGES-DOCUMENT = LS_ALV-VBELN.
LS_PARTNERCHANGES-ITM_NUMBER = '000000'. "抬头行项目
LS_PARTNERCHANGES-PARTN_ROLE = 'WE'.
LS_PARTNERCHANGES-P_NUMB_OLD = LS_ALV-KUNNR.
LS_PARTNERCHANGES-P_NUMB_NEW = LS_ALV-KUNNR.
LS_PARTNERCHANGES-ADDR_LINK ='9999999999'.
APPEND LS_PARTNERCHANGES TO LT_PARTNERCHANGES.
CLEAR LS_PARTNERCHANGES.
LS_PARTNERADDRESSES-COUNTRY = 'CN'.
LS_PARTNERADDRESSES-ADDR_NO = '9999999999'.
LS_PARTNERADDRESSES-NAME = LS_ALV-NAME1.
LS_PARTNERADDRESSES-TEL1_NUMBR = LS_ALV-TEL_NUMBER.
LS_PARTNERADDRESSES-STREET = LS_ALV-STREET.
APPEND LS_PARTNERADDRESSES TO LT_PARTNERADDRESSES.
CLEAR LS_PARTNERADDRESSES.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = LS_ALV-VBELN
ORDER_HEADER_INX = LV_ORDER_HEADER_INX
TABLES
RETURN = LT_RETURN
PARTNERS = LT_PARTNER
PARTNERCHANGES = LT_PARTNERCHANGES
PARTNERADDRESSES = LT_PARTNERADDRESSES.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EA'.
CONCATENATE LS_ALV-ZMSG LS_RETURN-MESSAGE INTO LS_ALV-ZMSG.
ENDLOOP.
IF SY-SUBRC <> 0. "创建成功
LS_ALV-ZSIGN = ICON_GREEN_LIGHT.
LS_ALV-ZMSG = '客户修改成功'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
MODIFY GT_ALV FROM LS_ALV TRANSPORTING ZSIGN ZMSG WHERE VBELN = LS_ALV-VBELN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LS_ALV-ZSIGN = ICON_RED_LIGHT.
MODIFY GT_ALV FROM LS_ALV TRANSPORTING ZSIGN ZMSG WHERE VBELN = LS_ALV-VBELN.
ENDIF.
REFRESH:LT_PARTNER,LT_PARTNERCHANGES.
ENDLOOP.
希望有帮到,加油!