使用Java connector消费ABAP系统的函数
Java Connector(JCO)环境的搭建:Step by step to download and configure JCO in your laptop
我的ABAP系统有个函数名叫ZDIS_GET_UPSELL_MATERIALS,输入一个customer ID和product ID,会输出为这对客户和product组合维护的一组Upsell product ID和描述信息。
测试如下:
下面是使用Java消费该函数的代码:
package jco;import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoRepository;
import com.sap.conn.jco.JCoTable;
import com.sap.conn.jco.ext.DestinationDataProvider;/*** basic examples for Java to ABAP communication * See help: https://help.sap.com/saphelp_nwpi711/helpdata/en/48/70792c872c1b5ae10000000a42189c/frameset.htm*/
public class StepByStepClient
{static String DESTINATION_NAME = "ABAP_AS_WITHOUT_POOL";static public final String ABAP_DURATION = "abapLayerDuration";static public final String UPSELL_PRODUCT = "upsellProducts";static public final String PRODUCT_ID = "productID";static public final String PRODUCT_TEXT = "productText";static private Properties prepareProperty(){Properties connectProperties = new Properties();connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "ldcixcd.wdf.sap.corp");connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00");connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "111");connectProperties.setProperty(DestinationDataProvider.JCO_USER, "WANGJER");connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "Saptest1");connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en");createDestinationDataFile(DESTINATION_NAME, connectProperties);connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");createDestinationDataFile(DESTINATION_NAME, connectProperties);return connectProperties;}static public void main(String[] arg) {createDestinationDataFile(DESTINATION_NAME, prepareProperty());JCoDestination destination = null;try {destination = JCoDestinationManager.getDestination(DESTINATION_NAME);JCoRepository repo = destination.getRepository();JCoFunction stfcConnection = repo.getFunction("ZDIS_GET_UPSELL_MATERIALS");JCoParameterList imports = stfcConnection.getImportParameterList();String customerID = "1000040";String materialID = "11";imports.setValue("IV_CUSTOMER_ID", customerID);imports.setValue("IV_MATERIAL_ID", materialID);stfcConnection.execute(destination);JCoParameterList exports = stfcConnection.getExportParameterList();// int result = exports.getInt("EV_RESULT");int abapDuration = exports.getInt("EV_DURATION");StringBuilder sb = new StringBuilder();sb.append("{ \"" + ABAP_DURATION + "\": " + abapDuration + ",");sb.append("\"" + UPSELL_PRODUCT + "\":[");JCoTable codes = exports.getTable("ET_MATERIALS");int row = codes.getNumRows();System.out.println("Total rows: " + row);System.out.println("ABAP duration: " + abapDuration);for( int i = 0; i < row; i++){codes.setRow(i);System.out.println(codes.getString("MATERIAL_ID") + '\t' + codes.getString("MATERIAL_TEXT"));sb.append("{\"" + PRODUCT_ID + "\":" + codes.getString("MATERIAL_ID") + ","+ "\"" + PRODUCT_TEXT + "\":\"" + codes.getString("MATERIAL_TEXT") + "\"");if( i < row - 1){sb.append("},");}else{sb.append("}");}}sb.append("]}");System.out.println("Final json: " + sb.toString());} catch (JCoException e) {// TODO Auto-generated catch blocke.printStackTrace();}}static private void createDestinationDataFile(String destinationName, Properties connectProperties){File destCfg = new File(destinationName+".jcoDestination");try{FileOutputStream fos = new FileOutputStream(destCfg, false);connectProperties.store(fos, "for tests only !");fos.close();}catch (Exception e){throw new RuntimeException("Unable to create the destination files", e);}}
}
为简单起见没有使用Google的gson库进行Json的序列化。
执行结果:
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
使用Java connector消费ABAP系统的函数相关推荐
- 使用Excel调用ABAP系统的函数
效果:在excel里创建一个按钮,开发一些VB script,可以连接指定的ABAP系统并执行系统里的ABAP function module. 在这里例子里执行ABAP系统的函数TH_USER_LI ...
- 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数.具体场景和我之前的公众号文章 Cloud for Cust ...
- 基于java的商场VIP会员消费查询系统——计算机毕业设计
本次毕业课程设计为了解决传统的商场运营模式,只是简单的记录当天营业额,无法与实际的购买人相关连,无法直观的了解购买人的购买次数,第一次购物与多次购物的人享受同等待遇,从而不能形成有效的消费激励机制,为 ...
- 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...
- Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
原文链接 导航目录 工具类ZCL_ABAP_DYNAMIC_PROXY_FACTORY 工具类zcl_abap_cglib_tool Jerry Wang的ABAP专题文章 工具类ZCL_ABAP_D ...
- 通过 Lotus Domino Java 代理消费 Web 服务
Web 服务是一种允许两台或更多的计算机在网络中交互的系统设计.这种服务的主要优点是,它是在多台不同操作系统的计算机和应用服务器之间发送对象的标准解决方法.例如,我们的公司使用 Web 服务从一台运行 ...
- JAVA中获取当前系统时间
JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...
- java进销存一个人要做多久,如何取得当前年的时间! 找java进销存系统
财务软件版1楼: 如何取得当前年的时间! 如去年是2005年,得到:2005 今年是2006年,得到:2006 2007年,得到:2007 ... 2楼: Returns the year repre ...
最新文章
- 部署Rsync服务器-差异化数据同步
- boost::type_erasure::tuple相关的测试程序
- 很好的开源项目ranet-uilibrary-olap
- 格兰杰因果关系检验r语言_R语言系列第四期:R语言单样本双样本差异性检验
- [硬件技术] 教你如何挑选主板:电脑主板质量好坏的鉴别方法
- oracle 函数索引
- 打破次元壁球体相互碰撞_打破软件的第四壁
- 博途IEC TIME数据类型_基于博途V15 西门子S7-1200数据处理指令应用-移动操作
- 计算机网络教程 笔记整理
- 操作系统的发展历史(综述性小论文)
- 博客什么的写也就写了
- 硬纪元干货|视+AR联合创始人涂意:AR将是下一代计算平台
- 如何修改图片的dpi?教你一招快速修改照片dpi的方法
- 深度相机原理揭秘之3D结构光Sensor(iPhone X、小米8探索版、OPPO Find)
- fpu测试_浮点运算单元FPU能给电机控制带来什么?
- Ubuntu16.04 安装 ROS Kinetic
- nrf51822资料
- KgoUI(2) 之 vue + layui
- 计算机专业毕业论文摘要,计算机科学与技术专业论文摘要怎么写 计算机科学与技术专业论文摘要范文参考...
- Ubuntu服务器找不到网卡