远程调用SAP接口,一般函数的传参类型有几种,据个人不完全了解,大概分为字符串,结构体,内表,下面整理了下这三种的传参方式以及返回值(字符串/内表)。
注入获取链接的BeanSerive(调用Bean moethod请见随笔一)
@Resource(name="SAPConnectionPool")
private SAPConnectionPool sAPConnectionPool;
一、传参
1.字符串
函数:ZRFC_SD_160
传参(字段):MOVE_TYPE
//获取连接
JCoDestination jCoDestination=this.sAPConnectionPool.getSAPDestination();
//从知识库中取得一个函数模板 ZRFC_SD_160
JCoFunction function = jCoDestination.getRepository().getFunction("ZRFC_SD_160");
//获取传入参数
function.getImportParameterList().setValue("MOVE_TYPE", 261);
//执行BAPI函数
function.execute(jCoDestination);
2.结构体
函数:ZRFC_PP_053_MB1A
传参(结构体):GDSMT_HEADER
结构体包含属性:PSTNG_DATE
//获取连接
JCoDestination jCoDestination=this.sAPConnectionPool.getSAPDestination();
//从知识库中取得一个函数模板 ZRFC_PP_053_MB1A
JCoFunction function = jCoDestination.getRepository().getFunction("ZRFC_PP_053_MB1A");
//获取输入的结构体
JCoStructure input = function.getImportParameterList().getStructure("GDSMT_HEADER");
//给结构体中的参数赋值
input.setValue("PSTNG_DATE",);
//执行BAPI函数
function.execute(jCoDestination);
3、内表
函数:ZRFC_MM_004
传参(内表):IT_LABST
内表包含属性:MATNR,WERKS
//从知识库中取得一个函数模板 ZRFC_MM_004
JCoFunction function = jCoDestination.getRepository().getFunction("ZRFC_MM_004");
//获取输入的内部参数
JCoTable inTable =function.getTableParameterList().getTable("IT_LABST");
//对内部参数包含属性赋值
inTable.appendRow();
inTable.setValue("MATNR","?");
inTable.setValue("WERKS","?");
//执行BAPI函数
function.execute(jCoDestination);
....
对象是集合,可循环赋值
......
for(KedaPjInprocMatapplydetail detailPo:detailPos){
inputTable.appendRow();
//给表参数中的字段赋值
inputTable.setValue("MATNR", "1600");
inputTable.setValue("WERKS","?");
}
......
二、输出参数
1、字段
输出参数(字段):MAT_DOC
//执行BAPI函数
function.execute(jCoDestination);
//获取执行成功后返回的值
String invoNo = function.getExportParameterList().getString("MAT_DOC");
2.输出内表:
输出参数(表):IT_LABST
表字段:MATNR,LGORT
//执行BAPI函数
function.execute(jCoDestination);
JCoTable outTable = function.getTableParameterList().getTable("IT_LABST");
if(outTable!=null&&outTable.getNumRows()>0){
for(int i=0;i<outTable.getNumRows();i++){
outTable.setRow(i);
?=outTable.getString("MATNR");
?=outTable.getString("LGORT");
}
}
整合例子:
综合需求:
代码(需try…catch):
//获取连接
JCoDestination jCoDestination=this.sAPConnectionPool.getSAPDestination();
//从知识库中取得一个函数模板 ZRFC_PP_053_MB1A
JCoFunction function = jCoDestination.getRepository().getFunction("ZRFC_PP_053_MB1A");
//获取传入参数(移动类型)
function.getImportParameterList().setValue("MOVE_TYPE", 261);
//获取输入的结构体
JCoStructure input = function.getImportParameterList().getStructure("GDSMT_HEADER");
//给结构体中的参数赋值(凭证中的记帐日期)
//input.setValue("PSTNG_DATE",);
//凭证中的记帐日期
//input.setValue("DOC_DATE",);
//抬头文本(非必填)
input.setValue("HEADER_TXT","60008804操作内部订单用料过账");
//获取输入表参数 MB1A_ITEM
JCoTable inputTable = function.getTableParameterList().getTable("MB1A_ITEM");
inputTable.appendRow();
//给表参数中的字段赋值
inputTable.setValue("MATERIAL", "100000705"); //物料号
inputTable.setValue("PLANT", "1600"); //工厂
inputTable.setValue("STGE_LOC", "440N"); //库存地点
inputTable.setValue("ENTRY_QNT", 1); //数量
inputTable.setValue("ENTRY_UOM", "EA"); //单位
inputTable.setValue("ORDERID", "9003728"); //订单编码
//执行BAPI函数
function.execute(jCoDestination);
//获取执行成功后返回的值
String invoNo = function.getExportParameterList().getString("MAT_DOC");//物料凭证编号
String doc_year=function.getExportParameterList().getString("DOC_YEAR");//物料凭证年度
String message=function.getExportParameterList().getString("EXMSG");//集成失败时才有消息返回