SAP JCO3 官网代码解读 sap call java server
自己从网上把自己的代码拷回来,文章时间大约是2017年。
SAP JCO版本 3.0.18, 官网例子代码文件 StepByStepServer.java,保留其中第4个例子函数,实现sap call java server.
/* 第一步,SAP系统中,rz10里面参数gw/acl_mode的值要0才可以,运行SM59有注册网关服务。
/* 第二步,SAP系统中,SE37里面定义一个远程调用的函数JCO_SET_TRACE。
FUNCTION JCO_SET_TRACE.
*"----------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(TRACE_LEVEL) TYPE SY-LISEL
*" VALUE(TRACE_PATH) TYPE SY-LISEL
*"----------------------------------------------------------------------
ENDFUNCTION.
第三步,SE38里面做一个程序来调用这个远程的function
REPORT ZTEST_JCO_SET_TRACE.
DATA trace_level TYPE N.
DATA trace_path TYPE STRING.
DATA msg(255) TYPE C.
trace_level = '555555555'.
trace_path = '33333333333333.'.
CALL FUNCTION 'JCO_SET_TRACE' destination 'JCO_SERVER'
EXPORTING
TRACE_LEVEL = trace_level
TRACE_PATH = trace_path
EXCEPTIONS
COMMUNICATION_FAILURE = 1
SYSTEM_FAILURE = 2 MESSAGE msg
RESOURCE_FAILURE = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
write: 'ERROR: ', SY-SUBRC, msg.
ENDIF.
第四点,SM59中NCO连接项目里面,有一个“注册的服务器程序,程序标识【】”,需要同程序配置文件中,server参数中的PROGRAM_ID一致。 这个程序名称,还可以在SMGW中的登陆客户端信息中看到。
在DEV系统测试通过,先放上代码,有空再来仔细解读。
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.io.File;
import java.io.FileOutputStream;import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoContext;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoField;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoFunctionTemplate;
import com.sap.conn.jco.JCoStructure;
import com.sap.conn.jco.JCoTable;
import com.sap.conn.jco.JCo;
import com.sap.conn.jco.JCoCustomRepository;
import com.sap.conn.jco.JCoListMetaData;
import com.sap.conn.jco.JCoMetaData;import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.ext.ServerDataProvider;import com.sap.conn.jco.server.DefaultServerHandlerFactory;
import com.sap.conn.jco.server.JCoServer;
import com.sap.conn.jco.server.JCoServerContext;
import com.sap.conn.jco.server.JCoServerContextInfo;
import com.sap.conn.jco.server.JCoServerErrorListener;
import com.sap.conn.jco.server.JCoServerExceptionListener;
import com.sap.conn.jco.server.JCoServerFactory;
import com.sap.conn.jco.server.JCoServerFunctionHandler;
import com.sap.conn.jco.server.JCoServerState;
import com.sap.conn.jco.server.JCoServerStateChangedListener;
import com.sap.conn.jco.server.JCoServerTIDHandler;public class StepByStepServer
{static String SERVER_NAME1 = "SERVER";static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";static {Properties connectProperties = new Properties();connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,"10.0.3.51");connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,"00");connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT,"100");connectProperties.setProperty(DestinationDataProvider.JCO_USER,"60489");connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,"********");connectProperties.setProperty(DestinationDataProvider.JCO_LANG,"ZH");createDataFile(DESTINATION_NAME1, "jcoDestination",connectProperties);connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");createDataFile(DESTINATION_NAME2, "jcoDestination",connectProperties);Properties servertProperties = new Properties();servertProperties.setProperty(ServerDataProvider.JCO_GWHOST,"10.0.3.51");servertProperties.setProperty(ServerDataProvider.JCO_GWSERV,"3300");servertProperties.setProperty(ServerDataProvider.JCO_PROGID,"JCO_SERVER");servertProperties.setProperty(ServerDataProvider.JCO_REP_DEST,"ABAP_AS_WITH_POOL");servertProperties.setProperty(ServerDataProvider.JCO_CONNECTION_COUNT, "2");createDataFile(SERVER_NAME1, "jcoServer",servertProperties);}static void createDataFile(String name, String suffix, Properties properties){File cfg = new File(name+"."+suffix);if(!cfg.exists()){ try{FileOutputStream fos = new FileOutputStream(cfg,false);properties.store(fos, "for tests only !");fos.close();}catch (Exception e){throw new RuntimeException("Unable to create thedestination file " + cfg.getName(), e);}}} /*** The following server example demonstrates how to develop a function module available only on Java side. At first* we create the respective function meta data, because the function is not available in ABAP DDIC. Then the function* meta data is stored in a custom repository which is registered with the server instance. Naturally we also* need the implementation of the function - see the class SetTraceHandler. * * Last but not least, the following ABAP report invokes the function module SetTraceHandler.REPORT ZTEST_JCO_SET_TRACE.DATA trace_level TYPE N.DATA trace_path TYPE STRING.DATA msg(255) TYPE C.trace_level = '5'.trace_path = '.'.CALL FUNCTION 'JCO_SET_TRACE' destination 'JCO_SERVER'EXPORTINGTRACE_LEVEL = trace_levelTRACE_PATH = trace_pathEXCEPTIONSCOMMUNICATION_FAILURE = 1SYSTEM_FAILURE = 2 MESSAGE msgRESOURCE_FAILURE = 3OTHERS = 4.IF SY-SUBRC <> 0.write: 'ERROR: ', SY-SUBRC, msg.ENDIF. */static class MyFunction implements JCoServerFunctionHandler{public void handleRequest(JCoServerContext serverCtx, JCoFunction function){int level = function.getImportParameterList().getInt("TRACE_LEVEL");String path = function.getImportParameterList().getString("TRACE_PATH");System.out.println("A:" + level + " B:"+ path);// JCo.setTrace(level, path);}} public static void main(String[] a){JCoListMetaData impList = JCo.createListMetaData("IMPORTS");impList.add("TRACE_LEVEL", JCoMetaData.TYPE_NUM, 1, 2, 0, null, null, JCoListMetaData.IMPORT_PARAMETER, null, null);impList.add("TRACE_PATH", JCoMetaData.TYPE_STRING, 8, 8, 0, null, null, JCoListMetaData.IMPORT_PARAMETER, null, null);impList.lock();JCoFunctionTemplate fT = JCo.createFunctionTemplate("JCO_SET_TRACE", impList, null, null, null, null);JCoCustomRepository cR = JCo.createCustomRepository("MyCustomRepository");cR.addFunctionTemplateToCache(fT); //Repository add FunctionTemplateJCoServer server ;try{server = JCoServerFactory.getServer(SERVER_NAME1); //create server}catch(JCoException ex){throw new RuntimeException("Unable to create the server " + SERVER_NAME1 + " because of " + ex.getMessage(), ex);}String repDest = server.getRepositoryDestination();System.out.println("repDest:"+ repDest);if(repDest!=null){try{cR.setDestination(JCoDestinationManager.getDestination(repDest)); //Repository setDestination}catch (JCoException e) { }}server.setRepository(cR); //server add RepositoryJCoServerFunctionHandler myf = new MyFunction();DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();factory.registerHandler(fT.getName(), myf);server.setCallHandlerFactory(factory);server.start();System.out.println("The program can be stoped using <ctrl>+<c>");}
}
SAP JCO3 官网代码解读 sap call java server相关推荐
- pytorch实现:Resnet模型识别花朵数据集(参考pytorch官网代码)
pytorch实现:Resnet模型识别花朵数据集 一.pytorch实现:Resnet模型识别花朵数据集 1.1 训练模型 1.2 图像预测和可视化 1.3 对新来的数据进行处理和展示 一.pyto ...
- html制作小米官网代码,仿小米官网(html+js+css)
[实例简介] 学习前端知识时写的一个仿小米官网的一些页面+css样式+js验证代码 [实例截图] [核心代码] 小米官网(高仿) └── xiaomi ├── css_1 │ ├── financ ...
- 顺丰官网代码(自编)
<!DOCTYPE html> <html> <head> <title>顺丰官网</title> <meta charset=&qu ...
- SAP ABAP 官网文档
https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abenabap.htm 自行查看,多看文档有帮助!
- MATLAB实现自编码器(六)——变分自编码器(VAE)官网代码的改进
本文内容参考了Conditional VAE (Variational Auto Encoder) 条件付きVAE 是对官方网页Train Variational Autoencoder (VAE) ...
- 全国计算机二级java考试官网_全国计算机二级Java考试题库
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合.数据和方法一起描述对象(object)的状态和行为.下面是关于全国计算机二级Java考试题库,希望大家认真阅读! 全国计算机二级J ...
- SAP ME架构官网文档学习总结
认证平台 SAP ME PAM(Platform Availability Matrix ) 安装的应用以及相应的数据库均可在官网上进行查看https://support.sap.com/pam 最低 ...
- SAP成都研究院廖婧:SAP C4C社交媒体集成概述
曾经有朋友在知乎上向我提问,咨询在SAP成都研究院工作的体验. 当时,我的回答提到一点,SAP注重工作与生活的平衡,这也是SAP中国官网强调的一点. https://www.sap.com/china ...
- 搜索 SAP成都研究院廖婧:SAP C4C社交媒体集成概述
曾经有朋友在知乎上向我提问,咨询在SAP成都研究院工作的体验. 当时,我的回答提到一点, SAP注重工作与生活的平衡 ,这也是SAP中国官网强调的一点. https://www.sap.com/chi ...
- 微信企业转账JAVA版(包括:1,转账个人零钱;2,转账个人银行卡;3,微信官网的SDK3.0.9存在的支付问题)
前言: 最近公司做产品,有这样几个需求 微信退款 微信企业给用户转账到零钱 通过微信给用户转账到银行卡 支付宝退款 支付宝转账到余额 根据上述需求,本人呢,做了几天的研究与学习,在此期间不免会出现摇头 ...
最新文章
- iphone开发小技巧,转载
- 说说第三方支付接口开发及开发中遇到的坑爹问题
- android 一个很漂亮的控件ObservableScrollView(含片段代码和源码)
- Ubuntu: 谷歌日历指示器托盘软件
- 选择用 Java 开发 GUI:
- 《Ray Tracing in One Weekend》——Chapter 8: Metal
- 2020行政区划重新划分_邯郸市的20年,2000年-2020年区划对比,你觉得成绩如何?...
- 区块链 FISCO BCOS网络端口讲解
- android使用的数据,在 Android 应用中使用数据 - Xamarin | Microsoft Docs
- 跟着莫烦python 从零开始强化学习之Q-Learning 一维探索者 代码完整注释版
- 高校学生竞赛信息管理系统介绍
- win10系统下xilinx烧写器不亮
- Excel简单学习笔记(1)
- 牛客小白月赛24 D.牛妹吃豆子
- 关于安装wordcloud库的那些事
- 设备管理 android问号,设备管理查有问号怎么修理
- 超声成像_人工智能如何帮助转变医学超声成像
- Android实现异步加载图片 ListView
- SAR成像处理软件运行环境配置(AGX平台)
- oj网站的训练题:输入两个数A,B,输出A+B的值(标准题解)