SAP JCO connector 例子
SAP JCO connector3与SAP 通过RFC的方式建立连接以及数据交互的例子。
步骤:
- 初始化连接用户名,密码,连接池等信息
sap-conig.properties文件:
#notes:更多配置项@see com.sap.conn.jco.ext.DestinationDataProvider #客户端编号 jco.client.client=830 #用户名 jco.client.user= #密码 jco.client.passwd= #语言 jco.client.lang=ZH #IP jco.client.ashost= #系统编号 jco.client.sysnr=10 #最大空闲连接数 jco.destination.pool_capacity=1000 #超时 jco.destination.max_get_client_time=100 #最大活动连接数 jco.destination.peak_limit=1000
SapJcoStore.java 初始化
/*** 初始化SAP连接* @param fdPoolName* @return* @throws Exception*/private static synchronized JCoDestination doInitialize(String fdPoolName)throws Exception {Properties sapConfig=new Properties();// Properties的配置项@see com.sap.conn.jco.ext.DestinationDataProviderInputStream is=SapJcoStore.class.getResourceAsStream("/com/test/share/sap/sap-config.properties");sapConfig.load(is);
// 扩展参数,需要扩展参数的时候使用sapConfig.setProperty((String)DestinationDataProvider.class.getField("JCO_SAPROUTER").get(DestinationDataProvider.class),"/H/219.141.250.71/H/");createDataFile(fdPoolName, "jcoDestination", sapConfig);JCoDestination destination=getDestination(fdPoolName);return destination;}/*** 创建连接文件(必须)* @param name* @param suffix* @param properties*/private static void createDataFile(String name, String suffix, Properties properties) {File cfg = new File(name + "." + suffix);try {FileOutputStream fos = new FileOutputStream(cfg, false);properties.store(fos, "for connection");fos.close();} catch (Exception e) {throw new RuntimeException("Unable to create the destination file "+ cfg.getName(), e);}}
- 建立连接池
public static Hashtable<String, JCoDestination> destinations = new Hashtable<String, JCoDestination>();/*** 获取连接池,利用JCoDestinationManager创建连接池放到表中** @param fdPoolName* @return* @throws Exception*/public static JCoDestination getDestination(String fdPoolName) throws Exception {JCoDestination destination = null;if (destinations.containsKey(fdPoolName)) {destination = destinations.get(fdPoolName);} else {destination = JCoDestinationManager.getDestination(fdPoolName);destinations.put(fdPoolName, destination);}return destination;}
- 通过连接池获取BAPI传输对象JCOFunction
/*** 根据连接池,rfc 名称获取rfc函数模板** @param rfcName* @param poolName* @return* @throws Exception*/public static JCoFunctionTemplate getRfcTemplate(String rfcName,String fdPoolName) throws Exception {JCoDestination destination = SapJcoStore.getDestination(fdPoolName);JCoRepository repository = null;try {repository = destination.getRepository();} catch (Exception e) {destination = JCoDestinationManager.getDestination(fdPoolName);SapJcoStore.destinations.remove(fdPoolName);SapJcoStore.destinations.put(fdPoolName, destination);repository = destination.getRepository();}JCoFunctionTemplate template = repository.getFunctionTemplate(rfcName);return template;}/*** 根据RFC 函数名称,连接池获取函数* @param rfcName* @param fdPoolName* @param store* @return* @throws Exception*/public static JCoFunction getRfcFunction(String rfcName, String fdPoolName) throws Exception {JCoFunctionTemplate template = getRfcTemplate(rfcName, fdPoolName);return template.getFunction();}
- 填充数据-->execute
填充数据有import 跟table 2种
/*** 填充数据,根据上面表格* 在SAP中间件其实也就是解析在填充数据这里加工很多配置,实现同理**/public static JCoFunction fillData(JCoFunction jcoFunc){JCoRecord record =jcoFunc.getImportParameterList();// 构造业务数据Map<String, Object> importData=new HashMap<String, Object>();importData.put("COMPANYCODE", "8880");importData.put("CUSTOMER", "0099000032");importData.put("KEYDATE", "20070830");
// 填充传入值for(String key:importData.keySet()){Object value=importData.get(key);record.setValue(key, value);}// 上面构造数据只有传入的参数数据,下面是传入table的数据/*设置值JCoTable jcoTable= jcoFunc.getTableParameterList().getTable("");for(){// 增加一行数据,同时游标也只想了当前行jcoTable.appendRow();
// 设置当前行的某个列的值jcoTable.setValue("", "");jcoTable.setValue("", "");....}*/return jcoFunc;}
execute
/**** @param poolName 连接池名称* @param function 传输的带数据JCoFunction对象* @return* @throws Exception*/public Object processSap(String poolName, JCoFunction function)throws Exception {doBefore();try {parsePostData(function);JCoFunction func = execFunc(function, poolName);Object rtn = parseRtnData(func);return rtn;} catch (Exception e) {doError(e);} finally {doAfter();}return null;}
- 处理返回值 主要是遍历,游标的处理
/**** @param jcoFunction* @param tableName*/public static void resultPrint(JCoFunction jcoFunction,String tableName){// 需要打印的列名称List<String> printKey=new ArrayList<String>();printKey.add("COMP_CODE");printKey.add("CUSTOMER");printKey.add("SP_GL_IND");printKey.add("ITEM_TEXT");// 得到tableJCoTable table =jcoFunction.getTableParameterList().getTable(tableName); // 取得行int rows=table.getNumRows();for(int i=0,len=rows;i<len;i++){ // 游标移动到rowtable.setRow(i);JCoFieldIterator iterator = table.getFieldIterator();while (iterator.hasNextField()) {// System.out.println(parameterField.getName()+"JCoFieldIterator");JCoField recordField = iterator.nextField();String fieldName=recordField.getName(); // 过滤不需要的字段if(!printKey.contains(fieldName)){continue;}// 取值打印 // Object value=recordField.getValue();String val_str=recordField.getString();System.out.print(val_str+" ");}System.out.print("\n====================================\n");}
demo例子
https://github.com/tian-github/sapjco3_demo
SAP JCO connector 例子相关推荐
- SAP Java Connector(JCo)
SAP Java Connector(JCo) JCo是一个高性能的,基于JNI的中间件,它实现了SAP的RFC(Remote Function Call)协议. 1.JCo的安装 从 ht ...
- SAP JCo 3.0 下载
1.登录地址:https://websmp206.sap-ag.de/connectors 2.点击[SAP Java Connector]→[Tools & Services] [img]h ...
- SAP JCo应用方案
SAP JCo应用方案 以下部分描述了 SAP Java Connector 的不同实现方案. SAP JCo通常以两种不同的方式使用: 作为SAP技术组件的集成组件,或作为独立工具,可用于将外部Ja ...
- 使用SAP open connector调用第三方系统的API
我们把hubspot这个SaaS CRM作为第三方系统,首先登录hubspot,创建一个新的API key: 把创建的key拷贝到剪切板里: 然后登录SAP Cloud for Customer上的o ...
- 在阿里云上以Daemon进程方式运行SAP Cloud Connector portable版本的尝试
url: https://help.sap.com/viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/en-US/f069840fa34c4196a5858b ...
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数.具体场景和我之前的公众号文章 Cloud for Cust ...
- 如何给SAP Cloud Connector Region列表中添加新的Region
SAP help里提供了CloudFoundry和Neo环境下可用的Region和API endpoint: 当我们期望用SAP Cloud Connector连接某个SAP云平台Region时,一般 ...
- “SAP.Middleware.Connector.RfcDestinationManager”的类型初始值设定项引发异常
"SAP.Middleware.Connector.RfcDestinationManager"的类型初始值设定项引发异常 参考文章: (1)"SAP.Middlewar ...
- SAP JCo Standalone版本
SAP JCo Standalone版本 使用 JCo 的 Standalone版本,您可以在外部(非SAP)Java应用程序和AS ABAP 之间建立通信. SAP JCo Standalone提供 ...
最新文章
- dropout是什么?为什么dropout管用?测试集上是否需要使用dropout?说明为什么神经网络中的dropout可以作为正则化?
- ipvsadm使用和命令
- Cookie application session
- 简化 Hadoop 2.4.1 Eclpse 插件编译【原创】
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
- 世纪渣男何书桓! | 今日最佳
- 第三章 函数 C++语言程序设计第五版 - 郑莉
- linux apache 多域名配置,apache-2.4.12基于域名访问的多虚拟主机配置
- 有关计算机程序的论文,有关计算机程序的论文范文.doc
- 信息流媒体变现_抖音信息流投放优势,为什么选择抖音信息流广告投放呢?
- 《神经网络和深度学习》系列文章七:实现我们的神经网络来分类数字(下)...
- 在cygwin下使用VC编译器
- 一入前端深似海,从此红尘是路人系列第四弹之未来前端路该何去何从
- 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
- 解决Chrome插件安装时报错:“Manifest file is missing or unreadable“
- 项目mysql数据导入数据的Java程序
- (趣文)我是一个线程
- 永续合约系统开发功能亮点
- TemplateMethod模板方法模式之应用
- 基于matlab优化工具箱的机械优化设计,基于MATLAB优化工具箱的机械优化设计.pdf...