BAPI_MATERIAL_SAVEREPLICA中需要对物料主数据比如MARA的附加结构进行维护时,需要使用BAPI的扩展结构。经过调试BAPI发现FORM extension_preprocess 和FORM process_extension都是处理扩展字段,但FORM extension_preprocess只处理扩展参数的 valuepart1部分,而 FORM process_extension 才会处理扩展字段的所有部分。
在包含文件L1001MASSUEBF01中 FORM extension_preprocess 处理如下:
在包含文件L1001MASSUEBF01中 FORM process_extension 处理如下:MOVE it_p_extensionin+c_length TO wa_bapi_te_e1mara 或MOVE it_p_extensionin+c_length TO wa_bapi_te_e1mara2才是处理扩展字段的所有部分。
传入的结构名有两个
cust_mara LIKE t133d-routn VALUE 'BAPI_TE_E1MARA',
cust_mara2 LIKE t133d-routn VALUE 'BAPI_TE_E1MARA2'。
BAPI_TE_E1MARA 的字段MATERIAL长度只有18位,适合SAP ECC, BAPI_TE_E1MARA2 的字段MATERIAL长度40位,适合SAP S4 。
表it_p_extensionin的结构如下图:
结构wa_bapi_te_e1mara 或 wa_bapi_te_e1mara2 如下图。其中结构ZABAPI_TE_E1MARA2中的字段是需要给物料主数据表MARA中附加的相关字段,需要开发人员手动添加,注意:ZABAPI_TE_E1MARA2中字段类型都要为字符型。
*处理扩展字段
DATA:begin of ls_exmara.
data matnr type mara-matnr.
include STRUCTURE zabapi_te_e1mara2.
data end of ls_exmara.
DATA:begin of ls_exmarax.
data matnr type mara-matnr.
include STRUCTURE zabapi_te_e1mara2x.
data end of ls_exmarax.
DATA: l_valuepart(960),
l_valuepartx(960).
data:lt_extensionin like STANDARD TABLE OF bapie1parex WITH HEADER LINE,
lt_extensioninx like STANDARD TABLE OF bapie1parexx WITH HEADER LINE.
MOVE-CORRESPONDING zsmara TO ls_exmara.
l_valuepart = ls_exmara.
lt_extensionin-material_long = zsmara-matnr.
lt_extensionin-structure = 'BAPI_TE_E1MARA2'.
lt_extensionin-valuepart1 = l_valuepart(240).
lt_extensionin-valuepart2 = l_valuepart+240(480).
APPEND lt_extensionin.
ls_exmarax-matnr = zsmara-matnr.
ls_exmarax-BRGEW = 'X'.
ls_exmarax-VOLEH = 'X'.
ls_exmarax-VOLUM = 'X'.
ls_exmarax-ZZCPLB = 'X'.
ls_exmarax-ZZCC = 'X'.
ls_exmarax-ZZSW = 'X'.
ls_exmarax-ZZGL = 'X'.
ls_exmarax-ZZZDKH = 'X'.
ls_exmarax-ZZCX = 'X'.
ls_exmarax-ZZJX = 'X'.
ls_exmarax-ZZHGBM = 'X'.
ls_exmarax-ZZSQR = 'X'.
ls_exmarax-ZZSQDAT = 'X'.
ls_exmarax-ZZGLGX = 'X'.
ls_exmarax-ZZWLCR = 'X'.
ls_exmarax-ZZBQTY = 'X'.
ls_exmarax-ZZBZGG = 'X'.
ls_exmarax-ZZPRD = 'X'.
ls_exmarax-ZZAUFNR = 'X'.
ls_exmarax-ZZOBNAME = 'X'.
l_valuepartx = ls_exmarax.
lt_extensioninx-material_long = zsmara-matnr.
lt_extensioninx-structure = 'BAPI_TE_E1MARA2X'.
lt_extensioninx-valuepart1 = l_valuepartx(240).
lt_extensioninx-valuepart2 = l_valuepartx+240(480).
APPEND lt_extensioninx.
CALL FUNCTION 'BAPI_MATERIAL_SAVEREPLICA'
EXPORTING
noappllog = ''
nochangedoc = ''
testrun = ''
inpfldcheck = ''
* FLAG_CAD_CALL = ' '
* NO_ROLLBACK_WORK = ' '
* FLAG_ONLINE = ' '
IMPORTING
return = ls_return
TABLES
headdata = it_headdata
clientdata = lt_clientdata
clientdatax = lt_clientdatax
plantdata = lt_plantdata
plantdatax = lt_plantdatax
materialdescription = lt_bapimakt
extensionin = lt_extensionin "扩展字段
extensioninx = lt_extensioninx
materiallongtext = lt_mltx
returnmessages = lt_return.
注:附加结构中的字段必须分配字段组,才能在MARA中更新成功!这是在程序 LMGMUF02的 FORM ABMISCHEN_TABELLE中的751行控制.
字段组的分配保存在透明表T130F中.配置如下: