欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

SAP-ABAP-使用物料创建/修改函数BAPI_MATERIAL_SAVEDATA改变自定义字段值

平常情况下在使用BAPI_MATERIAL_SAVEDATA函数进行操作时候是看不到自定义字段的,这个时候要使用到扩充结构。放在了结构BAPI_TE_MARA和BAPI_TE_MARAX里,这里需要先去进行维护,放入和表MARA一样的字段。

 

 

 加好后需要使用事务代码OMSR填加入字段组,不然使用函数不起作用

 接着直接放上单独修改自定义字段的代码

DATA: LS_HEADER       TYPE BAPIMATHEAD,
      LS_MARA         TYPE BAPI_TE_MARA,
      LS_MARAX        TYPE BAPI_TE_MARAX,
      LT_EXTENSIONIN  TYPE TABLE OF BAPIPAREX,
      LT_EXTENSIONINX TYPE TABLE OF BAPIPAREXX,
      lT_return       LIKE STANDARD TABLE OF BAPI_MATRETURN2 WITH HEADER LINE, "RETURN
      RETURN1         TYPE STANDARD TABLE OF BAPIRET2.


" 设置物料基本信息
LS_HEADER-MATERIAL = 'A0265040000015C'.
LS_HEADER-BASIC_VIEW = 'X'.  " 触发 MARA 表更新

" 设置自定义字段值和更新标志
LS_MARA-MATERIAL = 'A0265040000015C'.            " 使用连字符赋值
LS_MARA-ZCPLB = '001'. "产品类别

LS_MARAX-MATERIAL = 'A0265040000015C'.
LS_MARAX-ZCPLB = 'X'. "产品类别

" 填充扩展参数
APPEND INITIAL LINE TO LT_EXTENSIONIN ASSIGNING FIELD-SYMBOL(<FS_IN>).
<FS_IN>-STRUCTURE = 'BAPI_TE_MARA'.
<FS_IN>-VALUEPART1 = LS_MARA.

APPEND INITIAL LINE TO LT_EXTENSIONINX ASSIGNING FIELD-SYMBOL(<FS_INX>).
<FS_INX>-STRUCTURE = 'BAPI_TE_MARAX'.
<FS_INX>-VALUEPART1 = LS_MARAX.

" 调用 BAPI
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    HEADDATA       = LS_HEADER
*  IMPORTING
*   RETURN         = RETURN1
  TABLES
    EXTENSIONIN    = LT_EXTENSIONIN
    EXTENSIONINX   = LT_EXTENSIONINX
    RETURNMESSAGES = lT_return.



READ TABLE lT_return WITH KEY TYPE = 'E' .
IF SY-SUBRC = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  WRITE:/ '没有更新成功。'.
ELSE.
  COMMIT WORK AND WAIT .
  WRITE:/ '更新成功。'.
ENDIF.

但是不知道为啥返回消息里不是提示成功更新,不过数据确实变了。

变更前(这里使用老字段进行测试)

 代码里改为002,运行后

 返回都是S,但是不知道消息为啥是这种

 commit work后再次去看基本数据

 已经变为002。

posted @ 2025-06-11 09:52  萧静默  阅读(499)  评论(0)    收藏  举报