bp标准方法写不进数据解决办法
业务场景:在创建BP的时候,我们会使用CALL METHOD vmd_ei_api=>maintain_bapi来创建BP,但是有的时候项目上会碰到有些字段is_master_data的接口里没有或者有并且赋值了但是却写不进去的情况,在这项目上刚好碰到了这2种情况,这里做一下分享。
1、有结构字段但是写不进去的情况:如字段(ADRC) extension1 、extension2、REMARK
参考程序:
*&---------------------------------------------------------------------*
*& Form CHANGE_EXTEN1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GIT_RETURN
*& --> U_W_GEN_FILE_VNDR_PARTNER_NUMB
*& --> U_W_GEN_FILE_VNDR_EXTENSION1
*& <-- C_FLG_END
*&---------------------------------------------------------------------*
form change_exten1 tables p_git_return structure bapiret2
using PARTNER
extension1
CHANGING c_flg_end TYPE flag.
DATA:
l_addr1_sel LIKE addr1_sel
,l_addr1_val LIKE addr1_val
,t_adagroups TYPE STANDARD TABLE OF adagroups
,t_addr_error TYPE STANDARD TABLE OF addr_error
,t_addr_vers TYPE STANDARD TABLE OF addr_vers
,l_addr1_data TYPE addr1_data
.
REFRESH: t_adagroups ,t_addr_error ,t_addr_vers .
CLEAR:l_addr1_sel ,l_addr1_val ,l_addr1_data .
SELECT SINGLE addrnumber
INTO l_addr1_sel-addrnumber
FROM but020
WHERE partner = PARTNER.
IF 0 = sy-subrc .
* pc_addrnumber = l_addr1_sel-addrnumber .
ELSE.
RETURN .
ENDIF.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = l_addr1_sel
address_group = 'BP'
IMPORTING
address_value = l_addr1_val
TABLES
address_groups = t_adagroups
error_table = t_addr_error
versions = t_addr_vers
EXCEPTIONS
parameter_error = 1
address_not_exist = 2
version_not_exist = 3
internal_error = 4
address_blocked = 5
OTHERS = 6.
IF sy-subrc <> 0.
RETURN .
ENDIF.
MOVE-CORRESPONDING l_addr1_val TO l_addr1_data .
l_addr1_data-extension1 = extension1 .
CALL FUNCTION 'ADDR_UPDATE'
EXPORTING
address_data = l_addr1_data
address_number = l_addr1_sel-addrnumber
date_from = '00010101'
language = sy-langu
check_empty_address = 'X'
check_address = ''
check_other_versions = '' "'X'
TABLES
error_table = t_addr_error
EXCEPTIONS
address_not_exist = 1
parameter_error = 2
version_not_exist = 3
internal_error = 4
address_blocked = 5
OTHERS = 6.
IF sy-subrc <> 0.
RETURN .
ENDIF.
CALL FUNCTION 'ADDR_MEMORY_SAVE'
EXPORTING
execute_in_update_task = ''
EXCEPTIONS
address_number_missing = 1
person_number_missing = 2
internal_error = 3
database_error = 4
reference_missing = 5
OTHERS = 6.
IF sy-subrc <> 0.
RETURN .
ENDIF.
CALL FUNCTION 'ADDR_MEMORY_CLEAR'
EXPORTING
force = ' '
EXCEPTIONS
unsaved_data_exist = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
endform.
2、BP001-UNW_REMARK,使用了别的BAPI去更改,而且必须有值才能改,若没值的话更改会不成功(不会dump,不报错,但是数据没进去)
*&---------------------------------------------------------------------*
*& Form CHANGE_BP001
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GIT_RETURN
*& --> U_W_GEN_FILE_VNDR_PARTNER_NUMB
*&---------------------------------------------------------------------*
form change_bp001 tables p_git_return structure bapiret2
using PARTNER
UNW_REMARK
CHANGING c_flg_end TYPE flag
.
DATA : lv_key TYPE char100,
lw_return TYPE bapiret2,
lw_message TYPE cvis_message.
DATA IV_PARTNER TYPE BU_PARTNER.
DATA IV_PARTNER_GUID TYPE BU_PARTNER_GUID.
DATA IS_GENERAL TYPE BUSISB990_GEN.
DATA IV_TESTRUN TYPE CHAR1.
DATA IT_BP001 TYPE STANDARD TABLE OF BP001.
DATA IT_BP001_X TYPE STANDARD TABLE OF BP001_X.
DATA ET_RETURN TYPE STANDARD TABLE OF BAPIRET2.
DATA:LS_BP001 LIKE LINE OF IT_BP001.
DATA:LS_BP001X LIKE LINE OF IT_BP001_X.
SELECT SINGLE
PARTNER
PARTNER_GUID
INTO (IV_PARTNER,IV_PARTNER_GUID)
FROM BUT000
WHERE PARTNER EQ PARTNER
.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE @it_bp001
FROM BP001
WHERE PARTNER EQ @PARTNER.
IF SY-SUBRC EQ 0.
READ TABLE it_bp001 ASSIGNING FIELD-SYMBOL(<FW_BP001>) INDEX 1.
<FW_BP001>-UNW_REMARK = UNW_REMARK.
ELSE.
LS_BP001-partner = PARTNER.
LS_BP001-UNW_REMARK = UNW_REMARK.
APPEND LS_BP001 TO it_bp001.
ENDIF.
LS_BP001X-UNW_REMARK = 'X'.
APPEND LS_BP001X TO it_bp001_x.
call function 'FS_API_BP001_CHANGE'
EXPORTING
IV_PARTNER = IV_PARTNER
IV_PARTNER_GUID = IV_PARTNER_GUID
IS_GENERAL = IS_GENERAL
IV_TESTRUN = IV_TESTRUN
tables
it_bp001 = it_bp001
it_bp001_x = it_bp001_x
ET_RETURN = ET_RETURN
.
READ TABLE ET_RETURN ASSIGNING FIELD-SYMBOL(<FW_RETURN>) WITH KEY TYPE = 'E'.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
c_flg_end = abap_on.
lw_return-type = c_e.
lw_return-id = c_yh_fi1.
lw_return-number = 014.
MESSAGE s014(yh_fi1)
WITH TEXT-m04
lv_key
TEXT-m05
TEXT-m06
INTO lw_return-message.
lw_return-message_v1 = TEXT-m04.
lw_return-message_v2 = lv_key.
lw_return-message_v3 = TEXT-m05.
lw_return-message_v4 = TEXT-m06.
lw_return-parameter = lv_key.
LOOP AT lw_message-messages ASSIGNING FIELD-SYMBOL(<fs_return>).
<fs_return>-parameter = lv_key.
ENDLOOP.
APPEND lw_return TO git_return.
APPEND LINES OF lw_message-messages TO git_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ENDIF.
endform.
【推荐】国内首个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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架