上一篇: sap-基于jco2.x的简单封装          下一篇: abap-将BDC导数据时的错误信息封装为标准的bapi返回参数 BAPIRET2

abap-BAPI_MATERIAL_SAVEDATA 扩展字段的使用

事情原由: 需要用 jco 来调用 BAPI_MATERIAL_SAVEDATA 创建物料,但是发现有个 可配置栏位,没有地方传入 这个 bapi .


imports 和 tables 里都没办法将这个字段传入,检查了一下当初上线导入的程序,发现当初外部顾问是通过改写 这个BAPI 的源代码,通过 memory 方式传进去的.


当然如果 在 jco 也调一个能 export memory 的 bapi 能连接上这段修改。但是种作法本身就是不合常规的,改标准代码还是少做的好。 所以仔细研读了一下关于这个 bapi的 sap 英文在线文档,其实类似这种扩充字段,或自定义的字段是可以通过 EXTENSIONIN 这个 table 参数传入此bapi 的.

只要找到这种字段所在的结构,填充结构并最终交结构填充到 EXTENSIONIN 和 EXTENSIONINX 参数里就可以了。 找结构的话可能根据字段原本所在的表名 按这种格式找到: bapi_te_<表名> ,bapi_te_<表名> X .  具体填写参数方式,请参考我的一段java代码,如果是用 abap 可相应调整一下.

// MARA-KZKFG 是否可配置物料

te_mara_data.setValue(entity.getKzkfg(),"KZKFG");

te_mara_data_x.setValue("X","KZKFG");

te_mara_data.setValue(entity.getMaterial_no(),"MATERIAL");

te_mara_data_x.setValue(entity.getMaterial_no(),"MATERIAL");

//更新扩展字段

extensionin.appendRow();

extensionin_x.appendRow();

extensionin.setValue("BAPI_TE_MARA","STRUCTURE");

extensionin.setValue(te_mara_data.getString("MATERIAL")+te_mara_data.getString("KZKFG"),"VALUEPART1");

extensionin_x.setValue("BAPI_TE_MARAX","STRUCTURE");

extensionin_x.setValue(te_mara_data_x.getString("MATERIAL")+ te_mara_data_x.getString("KZKFG"),"VALUEPART1");