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端可以监控到请求的日志:

SAP JCo的Server/Client编程实例相关推荐

  1. [Step By Step]SAP HANA PAL多项式回归预测分析Polynomial Regression编程实例FORECASTWITHPOLYNOMIALR(预测)...

    多项式回归预测分析编程规范(模型):http://www.cnblogs.com/omygod/archive/2013/05/15/3080391.html 多项式回归预测分析编程规范(预测):ht ...

  2. [Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例FORECASTWITHEXPR(预测)...

    指数回归预测分析编程规范(模型):http://www.cnblogs.com/omygod/archive/2013/05/15/3079517.html 指数回归预测分析编程规范(预测):http ...

  3. epoll 入门例子 tcp server/client

    原文: https://rebootcat.com/2020/09/26/epoll_examples/ 复习一下 上一篇博文 epoll原理深入分析 详细分析了 epoll 底层的实现原理,如果对 ...

  4. mysql c api example_The MySQL C API 编程实例

    在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...

  5. ROS入门-12.服务端Server的编程实现

    实现服务通讯的服务端Server的编程实现 主要给海龟发送速度指令,通过topic发,Service实现:Client发布request来控制Server是不是给海龟发指令让其动起来,Client相当 ...

  6. C语言 socket编程实例

    C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...

  7. TCP套接字编程实例(一)

    TCP套接字编程实例(一) TCP套接字编程第一部分我们先用单线程简单实现客户端的"发"和服务器的"收".话不多说,直接上代码. 1.Client部分: #in ...

  8. 【RDMA】RDMA 编程实例(rdma_cm API)

    目录 RDMA编程基础 说明 1. RDMA的学习环境搭建 2. RDMA与socket的类比 3. RDMA服务器的代码流程 main() { } 实例 用法 Makefile 服务端server. ...

  9. NIO Socket编程实例

    1.阻塞模式实例 NIOUtil类,用来通过SOcket获取BufferedReader和PrintWriter. package IO;import java.io.BufferedReader; ...

最新文章

  1. JDK1.6安装与环境变量设置详细图解
  2. Visual C++ Windows 用来定位 DLL 的搜索路径
  3. CRM+Mysql+php初学
  4. JQuery-Table斑马线
  5. Jsoup解析的例子 之 选择器
  6. .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)
  7. 服务发现和注册和Eureka
  8. 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确
  9. 计算机桌面打开图像管理,如何给电脑桌面设置几张图片自动播放
  10. caffe︱Pascal VOC 2012 Multilabel Classification Model
  11. Delphi自动清除临时文件及备份文件的批处理
  12. 【BMC】Redfish简述
  13. 软件测试报告怎么编写,最新软件测试模板推荐【建议收藏】
  14. 发布和订阅业务交易事件库(BTE事件及函数)
  15. Debian/Kali possible missing /lib/firmware/i915.... 的解决办法
  16. 苹果app退款_苹果app退款流程:App Store应用如何申请iOS退款教程
  17. tensorflow代码翻译成pytorch代码 -详细教程+案例
  18. 音视频技术开发周刊 | 263
  19. 计算机word文例试题及答案,大学计算机考试word试题及答案
  20. hackthebox- Arctic (考点:ColdFusion安全/windows)

热门文章

  1. spring 优越性实践
  2. Windows 服务程序编写
  3. USACO-Section2.3 Money Systems
  4. sigprocmask()函数实例详解,设置信号规定时间堵塞,取消信号堵塞
  5. 1. OD-界面视图及基本快捷键操作,修改hello word
  6. 推荐系统(Recommendation system)
  7. Windows编程—控制面板程序显示信息修改(程序图标、名称、链接等)
  8. eclipse 安装反编译软件jadclipse
  9. foreach的 多种用法
  10. 浅析Unity 坐标系