参考链接:Solved: BAPI_MATERIAL_SAVEDATA extensionin DEC type dump - SAP Community
1.创建构造
2.创建BADI T-code:SE18
创建好后,在class里边实装代码
METHOD IF_EX_STNDRDMATERIAL_SAVE_DATA~MAP_EXTENSIONIN.
DATA: LS_EXTENSIONIN LIKE LINE OF EXTENSIONIN.
DATA: LS_EXTENSIONINX LIKE LINE OF EXTENSIONINX.
DATA: LS_MARA_UEB LIKE LINE OF MARA_UEB.
DATA: LS_RES_FIELS LIKE LINE OF RES_FIELDS.
FIELD-SYMBOLS: <FS_MARA_UEB> LIKE LINE OF MARA_UEB.
DATA: YYYTEST TYPE YYYTEST.
LOOP AT EXTENSIONIN INTO LS_EXTENSIONIN.
CASE LS_EXTENSIONIN-STRUCTURE.
WHEN 'YYYTEST'.
YYYTEST-ZZNETPR = LS_EXTENSIONIN-VALUEPART1+0(18).
YYYTEST-ZZCHAR = LS_EXTENSIONIN-VALUEPART1+18(10).
* ZSMATNR_CONFIGURABLE-KZKFG = LS_EXTENSIONIN-VALUEPART1+19(1). "
**
LOOP AT MARA_UEB ASSIGNING <FS_MARA_UEB>." WHERE MATNR = ZSMATNR_CONFIGURABLE-MATNR.
<FS_MARA_UEB>-ZZNETPR = LS_EXTENSIONIN-VALUEPART1+0(18).
<FS_MARA_UEB>-ZZCHAR = LS_EXTENSIONIN-VALUEPART1+18(10).
ENDLOOP.
*
IF YYYTEST-ZZNETPR IS NOT INITIAL.
* READ TABLE MARA_UEB ASSIGNING <FS_MARA_UEB> WITH KEY MATNR = ZSMATNR_CONFIGURABLE-MATNR.
* IF SY-SUBRC = 0.
LS_RES_FIELS-FNAME = 'MARA-ZZNETPR'.
LS_RES_FIELS-TRANC = <FS_MARA_UEB>-TRANC.
LS_RES_FIELS-D_IND = <FS_MARA_UEB>-D_IND.
APPEND LS_RES_FIELS TO RES_FIELDS.
CLEAR LS_RES_FIELS.
LS_RES_FIELS-FNAME = 'MARA-ZZCHAR'.
LS_RES_FIELS-TRANC = <FS_MARA_UEB>-TRANC.
LS_RES_FIELS-D_IND = <FS_MARA_UEB>-D_IND.
APPEND LS_RES_FIELS TO RES_FIELDS.
* ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
ENDMETHOD.
3.配置增强字段(没有这一步的话,存不进去值)
T-code:OMSR
路径:SPRO and open the activity "Logistics - General->Material Master->Field Selection->Assign Fields to Field Selection Groups"
最重要的是status的设置,不可为空
4.创建程序调用BAPI 编辑增强
DATA: T_EXTENSIONIN TYPE TABLE OF BAPIPAREX WITH HEADER LINE.
DATA: S_EXTENSIONIN LIKE LINE OF T_EXTENSIONIN.
DATA: T_EXTENSIONINX TYPE TABLE OF BAPIPAREXX WITH HEADER LINE.
DATA: RETURN_T TYPE BAPIRET2.
DATA: S_EXTENSIONINX LIKE LINE OF T_EXTENSIONINX.
DATA: LS_MAIN TYPE YYYTEST.
DATA: HEADDATA TYPE BAPIMATHEAD.
DATA: CLIENTDATA TYPE BAPI_MARA, "基本数据
CLIENTDATAX TYPE BAPI_MARAX,
RETURNMESSAGES TYPE TABLE OF BAPI_MATRETURN2,
MATERIALDESCRIPTION TYPE TABLE OF BAPI_MAKT WITH HEADER LINE. "描述
CLEAR S_EXTENSIONIN.
CLEAR S_TE_MVKE.
HEADDATA-MATERIAL = '000012000000000064'.
HEADDATA-IND_SECTOR = '1'.
HEADDATA-MATL_TYPE = 'Z001'.
HEADDATA-BASIC_VIEW = 'X'.
CLIENTDATA-MATL_GROUP = '0001'. "品目group
CLIENTDATA-BASE_UOM = 'KG'.
CLIENTDATAX-BASE_UOM = 'X'.
CLIENTDATAX-MATL_GROUP = 'X'.
"品目テキスト
CLEAR MATERIALDESCRIPTION[].
*MATERIALDESCRIPTION-MATERIAL = '0704TEST01'. "品目text
MATERIALDESCRIPTION-LANGU_ISO = 'EN'.
MATERIALDESCRIPTION-MATL_DESC = 'LANGU_ISO'.
APPEND MATERIALDESCRIPTION.
S_EXTENSIONIN-STRUCTURE = 'YYYTEST'.
LS_MAIN-ZZNETPR = '99.99'.
LS_MAIN-ZZCHAR = '1234567890'.
S_EXTENSIONIN-VALUEPART1+0(18) = LS_MAIN-ZZNETPR.
S_EXTENSIONIN-VALUEPART1+18(10) = LS_MAIN-ZZCHAR.
APPEND S_EXTENSIONIN TO T_EXTENSIONIN.
"enhancement field 2
S_EXTENSIONINX-STRUCTURE = 'YYYTEST'.
*LS_MAIN-ZZNETPR = '9999.9999'.
S_EXTENSIONINX-VALUEPART1+0(1) = 'X'.
S_EXTENSIONINX-VALUEPART1+1(1) = 'X'.
APPEND S_EXTENSIONINX TO T_EXTENSIONINX.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = HEADDATA
CLIENTDATA = CLIENTDATA
CLIENTDATAX = CLIENTDATAX
* PLANTDATA = PLANTDATA
* PLANTDATAX = PLANTDATAX
* FORECASTPARAMETERS = FORECASTPARAMETERS
* FORECASTPARAMETERSX = FORECASTPARAMETERSX
* PLANNINGDATA = PLANNINGDATA
* PLANNINGDATAX = PLANNINGDATAX
* STORAGELOCATIONDATA = STORAGELOCATIONDATA
* STORAGELOCATIONDATAX = STORAGELOCATIONDATAX
* VALUATIONDATA = VALUATIONDATA
* VALUATIONDATAX = VALUATIONDATAX
* WAREHOUSENUMBERDATA = WAREHOUSENUMBERDATA
* WAREHOUSENUMBERDATAX = WAREHOUSENUMBERDATAX
* SALESDATA = SALESDATA
* SALESDATAX = SALESDATAX
* STORAGETYPEDATA = STORAGETYPEDATA
* STORAGETYPEDATAX = STORAGETYPEDATAX
FLAG_ONLINE = ' '
FLAG_CAD_CALL = ' '
NO_DEQUEUE = ' '
NO_ROLLBACK_WORK = ' '
IMPORTING
RETURN = RETURN_T
TABLES
MATERIALDESCRIPTION = MATERIALDESCRIPTION
* UNITSOFMEASURE = UNITSOFMEASURE
* UNITSOFMEASUREX = UNITSOFMEASUREX
** internationalartnos = internationalartnos
* MATERIALLONGTEXT = MATERIALLONGTEXT
* TAXCLASSIFICATIONS = TAXCLASSIFICATIONS
RETURNMESSAGES = RETURNMESSAGES
* prtdata = prtdata
* prtdatax = prtdatax
EXTENSIONIN = T_EXTENSIONIN
EXTENSIONINX = T_EXTENSIONINX.
BREAK-POINT.
IF RETURN_T-TYPE EQ 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
* APPEND RETURN_T TO ET_RETURN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* ET_RETURN[] = RETURNMESSAGES[].
ENDIF.
完成!
MM01/MM02需要修改画面的增强请参考以下内容:
http://t.csdnimg.cn/Uo67Z