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端可以监控到请求的日志:
SAP JCo的Server/Client编程实例相关推荐
- [Step By Step]SAP HANA PAL多项式回归预测分析Polynomial Regression编程实例FORECASTWITHPOLYNOMIALR(预测)...
多项式回归预测分析编程规范(模型):http://www.cnblogs.com/omygod/archive/2013/05/15/3080391.html 多项式回归预测分析编程规范(预测):ht ...
- [Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例FORECASTWITHEXPR(预测)...
指数回归预测分析编程规范(模型):http://www.cnblogs.com/omygod/archive/2013/05/15/3079517.html 指数回归预测分析编程规范(预测):http ...
- epoll 入门例子 tcp server/client
原文: https://rebootcat.com/2020/09/26/epoll_examples/ 复习一下 上一篇博文 epoll原理深入分析 详细分析了 epoll 底层的实现原理,如果对 ...
- mysql c api example_The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- ROS入门-12.服务端Server的编程实现
实现服务通讯的服务端Server的编程实现 主要给海龟发送速度指令,通过topic发,Service实现:Client发布request来控制Server是不是给海龟发指令让其动起来,Client相当 ...
- C语言 socket编程实例
C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...
- TCP套接字编程实例(一)
TCP套接字编程实例(一) TCP套接字编程第一部分我们先用单线程简单实现客户端的"发"和服务器的"收".话不多说,直接上代码. 1.Client部分: #in ...
- 【RDMA】RDMA 编程实例(rdma_cm API)
目录 RDMA编程基础 说明 1. RDMA的学习环境搭建 2. RDMA与socket的类比 3. RDMA服务器的代码流程 main() { } 实例 用法 Makefile 服务端server. ...
- NIO Socket编程实例
1.阻塞模式实例 NIOUtil类,用来通过SOcket获取BufferedReader和PrintWriter. package IO;import java.io.BufferedReader; ...
最新文章
- JDK1.6安装与环境变量设置详细图解
- Visual C++ Windows 用来定位 DLL 的搜索路径
- CRM+Mysql+php初学
- JQuery-Table斑马线
- Jsoup解析的例子 之 选择器
- .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)
- 服务发现和注册和Eureka
- 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确
- 计算机桌面打开图像管理,如何给电脑桌面设置几张图片自动播放
- caffe︱Pascal VOC 2012 Multilabel Classification Model
- Delphi自动清除临时文件及备份文件的批处理
- 【BMC】Redfish简述
- 软件测试报告怎么编写,最新软件测试模板推荐【建议收藏】
- 发布和订阅业务交易事件库(BTE事件及函数)
- Debian/Kali possible missing /lib/firmware/i915.... 的解决办法
- 苹果app退款_苹果app退款流程:App Store应用如何申请iOS退款教程
- tensorflow代码翻译成pytorch代码 -详细教程+案例
- 音视频技术开发周刊 | 263
- 计算机word文例试题及答案,大学计算机考试word试题及答案
- hackthebox- Arctic (考点:ColdFusion安全/windows)