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 例子相关推荐

  1. SAP Java Connector(JCo)

    SAP Java Connector(JCo)      JCo是一个高性能的,基于JNI的中间件,它实现了SAP的RFC(Remote Function Call)协议. 1.JCo的安装 从 ht ...

  2. SAP JCo 3.0 下载

    1.登录地址:https://websmp206.sap-ag.de/connectors 2.点击[SAP Java Connector]→[Tools & Services] [img]h ...

  3. SAP JCo应用方案

    SAP JCo应用方案 以下部分描述了 SAP Java Connector 的不同实现方案. SAP JCo通常以两种不同的方式使用: 作为SAP技术组件的集成组件,或作为独立工具,可用于将外部Ja ...

  4. 使用SAP open connector调用第三方系统的API

    我们把hubspot这个SaaS CRM作为第三方系统,首先登录hubspot,创建一个新的API key: 把创建的key拷贝到剪切板里: 然后登录SAP Cloud for Customer上的o ...

  5. 在阿里云上以Daemon进程方式运行SAP Cloud Connector portable版本的尝试

    url: https://help.sap.com/viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/en-US/f069840fa34c4196a5858b ...

  6. 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

    最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数.具体场景和我之前的公众号文章 Cloud for Cust ...

  7. 如何给SAP Cloud Connector Region列表中添加新的Region

    SAP help里提供了CloudFoundry和Neo环境下可用的Region和API endpoint: 当我们期望用SAP Cloud Connector连接某个SAP云平台Region时,一般 ...

  8. “SAP.Middleware.Connector.RfcDestinationManager”的类型初始值设定项引发异常

    "SAP.Middleware.Connector.RfcDestinationManager"的类型初始值设定项引发异常 参考文章: (1)"SAP.Middlewar ...

  9. SAP JCo Standalone版本

    SAP JCo Standalone版本 使用 JCo 的 Standalone版本,您可以在外部(非SAP)Java应用程序和AS ABAP 之间建立通信. SAP JCo Standalone提供 ...

最新文章

  1. dropout是什么?为什么dropout管用?测试集上是否需要使用dropout?说明为什么神经网络中的dropout可以作为正则化?
  2. ipvsadm使用和命令
  3. Cookie application session
  4. 简化 Hadoop 2.4.1 Eclpse 插件编译【原创】
  5. ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
  6. 世纪渣男何书桓! | 今日最佳
  7. 第三章 函数 C++语言程序设计第五版 - 郑莉
  8. linux apache 多域名配置,apache-2.4.12基于域名访问的多虚拟主机配置
  9. 有关计算机程序的论文,有关计算机程序的论文范文.doc
  10. 信息流媒体变现_抖音信息流投放优势,为什么选择抖音信息流广告投放呢?
  11. 《神经网络和深度学习》系列文章七:实现我们的神经网络来分类数字(下)...
  12. 在cygwin下使用VC编译器
  13. 一入前端深似海,从此红尘是路人系列第四弹之未来前端路该何去何从
  14. 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
  15. 解决Chrome插件安装时报错:“Manifest file is missing or unreadable“
  16. 项目mysql数据导入数据的Java程序
  17. (趣文)我是一个线程
  18. 永续合约系统开发功能亮点
  19. TemplateMethod模板方法模式之应用
  20. 基于matlab优化工具箱的机械优化设计,基于MATLAB优化工具箱的机械优化设计.pdf...

热门文章

  1. zz让你成功的九个心理定律
  2. 微信运动:抓住用户的小九九,一个都别跑
  3. 重磅 | 262亿收购LinkedIn,微软甘当接盘侠?
  4. 产品经理八大惹怒程序员而被砍杀的行为
  5. 优化UGC流程,获得图文并茂游记so easy
  6. 用nrm一键切换npm源
  7. java程序打包成exe安装包总结
  8. 网络部署加实验步骤( 续)
  9. [WebGL入门]十二,模型数据和顶点属性
  10. 【leetcode】42. Trapping Rain Water 计算坑洼地的积水量