SAP调用BAPI创建物料主数据

2024-11-17 05:52:51
推荐回答(1个)
回答1:

import com.sap.mw.jco.*;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO.Structure;

public class Create_Item extends Connect_Sap_Server{
private JCO.Client mConnection = this.getConnection();
private JCO.Repository mRepository = new JCO.Repository("Repository", mConnection);
private JCO.Function function = null;
private JCO.Table data = null;
private String[] SAPInterfaces;

public Create_Item(){
try {
function = this.createFunction("BAPI_MATERIAL_SAVEDATA");
if (function == null) {
System.out.println("BAPI_MATERIAL_SAVEDATA"
+ " not found in SAP.");
System.out.println("SAP_RFC中没有此函数!");
System.exit(1);
}
JCO.Structure head_data = function.getImportParameterList().getStructure("HEADDATA");
head_data.setValue("00000000999914886", "MATERIAL"); //物料号
head_data.setValue("ROH", "MATL_TYPE"); //物料类型
head_data.setValue("M", "IND_SECTOR"); //行业领域(L、零售;A、工厂工程/结构;C、化学工业;M、机械工程;P、药品)
head_data.setValue("X", "BASIC_VIEW"); //基本数据视图
head_data.setValue("X", "PURCHASE_VIEW"); //采购视图
head_data.setValue("X", "ACCOUNT_VIEW"); //会计视图
// head_data.setValue("X", "SALES_VIEW"); //销售视图
head_data.setValue("X", "MRP_VIEW"); //物料需求计划(MRP)视图

//物料描述(MAKT)
JCO.Table mtl_desc = function.getTableParameterList().getTable("MATERIALDESCRIPTION");
mtl_desc.appendRow();
mtl_desc.setValue(this.changecode("神奇的钻头【java开发测试用物料】"), "MATL_DESC");//物料描述
mtl_desc.setValue("ZH", "LANGU_ISO");
mtl_desc.setValue("1", "LANGU");

//客户端层次物料数据(MARA)
JCO.Structure client_data = function.getImportParameterList().getStructure("CLIENTDATA");
client_data.setValue("999914886", "MATERIAL");
client_data.setValue("ST", "BASE_UOM"); //基本计量单位
client_data.setValue("ST", "BASE_UOM_ISO"); //ISO 代码的计量基本单位
client_data.setValue("01", "MATL_GROUP"); //物料组
//client_data.setValue("", "EXTMATLGRP"); //外部物料组
client_data.setValue("X", "ENVT_RLVT"); //关键件标识

//========start====
//此处必须写如果不写会报“字段MARA-MEINS/BAPI_MARA-BASE_UOM(_ISO)被定义为必需的字段; 它不包含条目”
//等错误并且在SAP中看不到相应的数据
JCO.Structure clientx_data = function.getImportParameterList().getStructure("CLIENTDATAX");
clientx_data.setValue("ST", "BASE_UOM");
clientx_data.setValue("ST", "BASE_UOM_ISO");
clientx_data.setValue("01", "MATL_GROUP"); //物料组
clientx_data.setValue("", "EXTMATLGRP"); //外部物料组
//========end======

//工厂级别的物料数据(MARC)
JCO.Structure plant_data = function.getImportParameterList().getStructure("PLANTDATA");
plant_data.setValue("2005", "PLANT"); //工厂
plant_data.setValue("Z48", "PUR_GROUP"); //采购组
plant_data.setValue("KP", "AVAILCHECK"); //可用性检查的检查组
plant_data.setValue("PD", "MRP_TYPE"); //MRP类型
plant_data.setValue("G01", "MRP_CTRLER"); //MRP控制者
plant_data.setValue("000", "SM_KEY"); //计划边际码
plant_data.setValue("EX", "LOTSIZEKEY"); //批量 (物料计划)

JCO.Structure plantx_data = function.getImportParameterList().getStructure("PLANTDATAX");
plantx_data.setValue("2005", "PLANT");
plantx_data.setValue("KP", "AVAILCHECK");
plantx_data.setValue("PD", "MRP_TYPE");
plantx_data.setValue("G01", "MRP_CTRLER");
plantx_data.setValue("000", "SM_KEY");
plantx_data.setValue("EX", "LOTSIZEKEY");

mConnection.execute(function); // 执行配置好的function
JCO.Structure returnStructure = function.getExportParameterList().getStructure("RETURN");
if(!(returnStructure.getString("TYPE").equals("") || returnStructure.getString("TYPE").equals("S"))){
System.out.println(returnStructure.getString("MESSAGE"));
throw new Exception("新增数据失败:" + returnStructure.getString("MESSAGE"));
}

function = this.createFunction("BAPI_TRANSACTION_COMMIT");
mConnection.execute(function);
System.out.println("新增物料主数据成功!");
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
} finally {
if (mConnection != null) {
mConnection.disconnect();
}
}
}