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; ...
最新文章
- XCode 导入头文件不提示解决
- android 输入锁屏密码错误,安卓系统手机锁屏密码输错被停用了如何解决
- 洛谷 - P1025 数的划分(dfs)
- 饿了么风神登录_海底捞首度登陆第三方外卖!联手饿了么全国配送“小火锅”...
- java stringbuffer长度限制_Java中的String、StringBuffer和StringBuilder
- “猫癣”集团借IE7新漏洞再掀风浪
- 操作系统双语阅读 - Schedulers调度器2
- Language Models are Unsupervised Multitask Learners翻译
- 苹果登陆qq邮箱服务器,iPad和iPhone如何登陆QQ邮箱 怎么设置
- 2018湖南计算机对口高考C语言答案,2018年湖南省对口高考C语言试题
- Unity 性能优化:资源篇
- 什么是3D摄影机,与普通摄影机有什么不同?
- 一文读懂如何证明充要条件
- 瞬间“友尽”的五大整蛊代码,快去坑你的小伙伴吧!
- 有哪些非常好的前端网站或个人博客?
- web网页短信系统平台后台源码搭建功能篇|移讯云短信系统
- C#编程,Parallel类实现数据并行与任务并行
- “中国网事·感动2022”二季度网络感动人物评选结果揭晓
- 数据库系统概念 第三章 SQL介绍
- Jvxetable增加自定义按钮