我的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, "your abap system host name");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "111");
connectProperties.setProperty(DestinationDataProvider.JCO_USER, "WANGJER");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "your password");
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 block
e.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的序列化。
执行结果:
相关推荐
JCO的核心功能在于提供了一组API,使得Java开发者可以创建ABAP远程函数调用(RFC)客户端,这些函数调用在SAP系统中定义并可被外部系统调用。它还支持传输BAPI(Business Application Programming Interface)以及...
ABAP 开发中,函数是非常重要的一部分,合理地使用函数可以大大提高开发效率和代码质量。本文总结了 ABAP 中常用的函数,包括日期计算、表操作、数据转换、权限检查、报表生成、PDF 转换、日期转换、浮点数转换、...
在SAP系统中,"Z"开头的函数通常是用户自定义的,区别于标准的"SAP Library"函数模块。 描述中的“ABAP编辑器快速调用函数时自动填充调用参数”指的是当我们在ABAP源代码中输入函数模块名称后,IDE(如SE80或ABAP ...
ABAP 日期函数是 SAP 系统中用于处理日期和时间的函数集合。在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的周数、弹出选择周的对话框等。 ...
本篇文章将深入探讨如何使用JCo(Java Connector)库来实现Java与ABAP系统通过RFC(Remote Function Call)进行数据互传的实例,并解析JCO API的使用。 JCo是SAP提供的一个Java库,它为Java应用程序提供了一种与...
ABAP 函数调用是 SAP 系统中的一种常用技术,用于实现业务逻辑的复杂处理。该技术可以实现同步调用和异步调用两种方式,本文将对这两种方式进行详细的介绍。 1. 异步调用 异步调用是指在主程序中调用函数模块,但...
SAP变式配置-相关性程序如何调用ABAP函数 SAP变式配置是一种复杂的系统配置,相关性程序是其中的一部分,主要用于实现一些简单的逻辑判断。然而,对于一些负责的算法,相关性程序无法直接实现,需要通过调用ABAP...
SAP ABAP是一种高级程序设计语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了许多实用的函数,可以帮助开发者快速、高效地开发应用程序。本文将对SAP ABAP常用函数进行总结,涵盖文档下载、日志处理、对象...
- 对于性能敏感的应用,可以考虑使用内置的ABAP日期和时间函数,以减少调用外部函数的开销。 理解并熟练运用这些时间函数,可以帮助开发者更高效地编写处理日期逻辑的SAP ABAP程序,提升代码质量和效率。
SAP Java Connector 3.0(简称JCo3)是SAP公司开发的一款用于Java应用程序与SAP系统间通信的接口库。它提供了一种标准的、基于Java的API,使得开发者可以方便地在Java环境中集成SAP业务逻辑,实现数据交换和功能调用...
在本项目中,我们使用了JCo3(Java Connector version 3)库,它是SAP提供的Java API,用于与SAP R/3系统进行集成。以下是关于"java + abap + rfc"的相关知识点: 1. **Java Connector (JCo)**: JCo是SAP为Java...
SAP Java Connector,通常简称为SAP JCo,是一种用于在Java应用程序与SAP系统之间建立连接的软件组件。这个2.1.9版本的JAR包是专门为Windows平台设计的,确保在system32和sys64x环境下能够顺利运行。在本文中,我们...
今天,我们将详细介绍 ABAP 中常用的系统变量和函数。 系统变量 在 ABAP 中,系统变量是系统预定义的变量,用于存储当前系统状态信息。常用的系统变量有: 1. SY-PAGNO:当前页号 2. SY-DATUM:当前时间 3. SY-...
通过“ABAP 函数 -=SapSky=-.htm”和“ABAP 函数 -=SapSky=-.files”这两个文件,你可以深入学习和了解这些函数模块的具体使用方法,从而提升你的ABAP编程技能。理解并熟练运用这些函数模块,能够使你在处理SAP系统...
ABAP函数是SAP系统中最基本也是最重要的组件之一,它们提供了大量的功能性和逻辑控制,可以帮助开发者快速实现业务逻辑。ABAP函数可以分为多种类型,例如字符串处理函数、日期处理函数、算术运算函数等,每种类型的...
JCO,全称Java Connector,是SAP公司提供的一个关键组件,用于在Java应用程序与SAP系统之间建立通信桥梁。它是一个基于Java的中间件,允许开发者利用Java语言来访问和操作SAP R/3系统中的数据和业务流程,从而实现跨...
ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的编程语言。以下是一些ABAP常用函数...以上就是ABAP常用函数的一些关键功能和应用场景,它们在SAP系统的开发中起到了至关重要的作用。
在ABAP编程中,函数是实现特定功能的重要组成部分。这些函数可以帮助我们简化代码,提高效率。以下是基于给定标题和描述中的几个关键函数的详细解释: 1. FUNC12(将字符串尾部的负号移到字符串头部): 这个函数...
SAP ABAP 常用函数清单 SAP ABAP 是一种基于对象的编程语言,用于在 SAP R/3 系统中开发应用程序。ABAP 语言提供了许多函数模块,帮助开发者快速地开发和维护应用程序。本文总结了常用的 SAP ABAP 函数模块,包括...