事情原由: 需要用 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");
标签:BAPI,setValue,mara,MATERIAL,bapi,abap,te,data From: https://blog.51cto.com/fangkailove/5889836