SAP JCo的Server/Client编程实例


JCo是服务于SAP系统和Java系统的RFC中间件,是用Java实现的API,以Jar包的方式发布。应用灵活,但使用起来相对繁琐,NetWeaver Portal中基于Java的Webdynpro开发环境SAPNetWeaver Developer Studio就是通过JCo连接SAP的。通过一个简单实例,描述一下实现过程,开发环境:Eclipse + ECC,准备好JCo的Jar包。

 

一、SAP端:

 

SE37,创建一个RFC,供Java端调用

function zsap_calculate.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(NUMBER1) TYPE  STRING

*"     VALUE(NUMBER2) TYPE  STRING

*"     VALUE(OPERATOR) TYPE  STRING

*"  EXPORTING

*"     VALUE(RESULT) TYPE  STRING

*"----------------------------------------------------------------------

  try .

      case operator.

        when '+'.

          result number1 + number2.

 

        when '-'.

          result number1 number2.

 

        when '*'.

          result number1 * number2.

 

        when '/'.

          result number1 / number2.

 

        when others.

          result 'Not supported!'.

      endcase.

 

    catch cx_root.

      result 'Not supported!'.

  endtry.

 

  condense result.

 

endfunction.


SM59配置RFC destination


 

注意这里要设置为Unicode的communication type


 

SE37定义Java系统调用的接口函数:


 

SE38创建测试程序:

report  zyincl_test_00 no standard page heading.

 

data:

    l_number1 type string,

    l_number2 type string,

    l_operator type string,

    l_result type string.

 

l_number1 '15'.

l_number2 '221'.

l_operator '+'.

 

call function 'ZJAVA_CALCULATE' destination 'JCOPRO001'

  exporting

    number1  l_number1

    number2  l_number2

    operator l_operator

  importing

    result   l_result.

 

write l_result.

 

二、Java端:

 

在Eclipse中创建一个Java Project


 

把JCo的Jar包配置到项目


 

创建服务类,处理SAP的请求,记得设置属性Unicode为1:

package org.clyde;

import com.sap.mw.jco.*;
import com.sap.mw.jco.JCO.Client;
import com.sap.mw.jco.JCO.Function;
import com.sap.mw.jco.JCO.ParameterList;
import com.sap.mw.jco.JCO.Repository;
import com.sap.mw.jco.JCO.Server;

public class Service extends Server {


private static Client client;


public Service(String gwhost, String gwserv, String progid, IRepository rep) {
super(gwhost, gwserv, progid, rep);
super.setProperty("unicode", "1");


if (client == null) {
client = JCO.createClient("550", "clyde", "1q2w3e4r", "EN",
"192.168.1.8", "00");
client.connect();
}
}


@Override
//重载方法,处理SAP对Java系统的远程访问
protected void handleRequest(Function function) throws Exception {


ParameterList input = function.getImportParameterList();
ParameterList output = function.getExportParameterList();
String number1, number2, operator, result;
number1 = input.getString("NUMBER1");
number2 = input.getString("NUMBER2");
operator = input.getString("OPERATOR");


if (function.getName().equals("ZJAVA_CALCULATE")) {


//调用SAP系统的RFC:ZSAP_CALCULATE实现计算
result = getResult(number1, number2, operator);
System.out.println("Calculating=>  " + number1 + operator + number2
+ " = " + result);


output.setValue(result, "RESULT");
}
}


public String getResult(String number1, String number2, String operator) {


Repository rep = new Repository("", client);
Function func = rep.getFunctionTemplate("ZSAP_CALCULATE").getFunction();


ParameterList input = func.getImportParameterList();
input.setValue(number1, "NUMBER1");
input.setValue(number2, "NUMBER2");
input.setValue(operator, "OPERATOR");


func.setImportParameterList(input);
client.execute(func);


return func.getExportParameterList().getString("RESULT");
}


}

 

创建启动服务的Client类:

package org.clyde;

 

importcom.sap.mw.jco.JCO;

importcom.sap.mw.jco.JCO.Client;

importcom.sap.mw.jco.JCO.Repository;

 

public classJCoClient {

publicstatic void main(String[] args) {

Clientclient = JCO.createClient("550", "clyde","1q2w3e4r", "EN",

"192.168.1.8","00");

client.connect();

Repositoryrep = new JCO.Repository("", client);

//启动服务

newService("192.168.1.8", "sapgw00", "JCOPRO001",rep).start();

System.out.println("Serviceis started.");

}

 

}

 

运行JCoClient,启动服务:


 

回到SAP端,运行测试程序,成功返回结果:


 

修改参数,再测试几次,在Java端可以监控到请求的日志:


 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值