JCO3远程调用SAP接口随笔二(输入、出参)

远程调用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");//集成失败时才有消息返回
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值