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。

浙公网安备 33010602011771号