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

热门文章

  1. 搭建IBM z/OS 1.9(ADCD 1.9)
  2. 数据结构之图的应用:拓扑排序
  3. 数据结构-线性表之用队列实现栈用栈实现队列
  4. Rsync未授权访问漏洞记录(影响范围:全版本,端口:873)
  5. Permission denied的解决办法
  6. poj3253 Fence Repair(贪心+哈夫曼 经典)
  7. python学习笔记(五)
  8. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
  9. 设计模式之笔记--简单工厂模式(Simple Factory)
  10. PHP生成静态网页的方法