`
JerryWang_SAP
  • 浏览: 1055213 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用Java connector消费ABAP系统的函数

阅读更多

我的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的序列化。

执行结果:

 

0
0
分享到:
评论

相关推荐

    sap java connector jco 3.1.1.7z

    JCO的核心功能在于提供了一组API,使得Java开发者可以创建ABAP远程函数调用(RFC)客户端,这些函数调用在SAP系统中定义并可被外部系统调用。它还支持传输BAPI(Business Application Programming Interface)以及...

    ABAP 常用函数总结

    ABAP 开发中,函数是非常重要的一部分,合理地使用函数可以大大提高开发效率和代码质量。本文总结了 ABAP 中常用的函数,包括日期计算、表操作、数据转换、权限检查、报表生成、PDF 转换、日期转换、浮点数转换、...

    ABAP调用函数自动填充模式

    在SAP系统中,"Z"开头的函数通常是用户自定义的,区别于标准的"SAP Library"函数模块。 描述中的“ABAP编辑器快速调用函数时自动填充调用参数”指的是当我们在ABAP源代码中输入函数模块名称后,IDE(如SE80或ABAP ...

    ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例

    ABAP 日期函数是 SAP 系统中用于处理日期和时间的函数集合。在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的周数、弹出选择周的对话框等。 ...

    JAVA与ABAP之间通过RFC互传数据_JCO实例及API

    本篇文章将深入探讨如何使用JCo(Java Connector)库来实现Java与ABAP系统通过RFC(Remote Function Call)进行数据互传的实例,并解析JCO API的使用。 JCo是SAP提供的一个Java库,它为Java应用程序提供了一种与...

    ABAP 函数介绍

    ABAP 函数调用是 SAP 系统中的一种常用技术,用于实现业务逻辑的复杂处理。该技术可以实现同步调用和异步调用两种方式,本文将对这两种方式进行详细的介绍。 1. 异步调用 异步调用是指在主程序中调用函数模块,但...

    SAP变式配置-相关性程序如何调用ABAP函数[参照].pdf

    SAP变式配置-相关性程序如何调用ABAP函数 SAP变式配置是一种复杂的系统配置,相关性程序是其中的一部分,主要用于实现一些简单的逻辑判断。然而,对于一些负责的算法,相关性程序无法直接实现,需要通过调用ABAP...

    SAPABAP常用函数清单.pdf

    SAP ABAP是一种高级程序设计语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了许多实用的函数,可以帮助开发者快速、高效地开发应用程序。本文将对SAP ABAP常用函数进行总结,涵盖文档下载、日志处理、对象...

    SAP ABAP 时间函数.docx

    - 对于性能敏感的应用,可以考虑使用内置的ABAP日期和时间函数,以减少调用外部函数的开销。 理解并熟练运用这些时间函数,可以帮助开发者更高效地编写处理日期逻辑的SAP ABAP程序,提升代码质量和效率。

    SAP Java Connector3.0

    SAP Java Connector 3.0(简称JCo3)是SAP公司开发的一款用于Java应用程序与SAP系统间通信的接口库。它提供了一种标准的、基于Java的API,使得开发者可以方便地在Java环境中集成SAP业务逻辑,实现数据交换和功能调用...

    java +abap+rfc

    在本项目中,我们使用了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 JCon (2.1.9) jar 包 Windows 平台

    SAP Java Connector,通常简称为SAP JCo,是一种用于在Java应用程序与SAP系统之间建立连接的软件组件。这个2.1.9版本的JAR包是专门为Windows平台设计的,确保在system32和sys64x环境下能够顺利运行。在本文中,我们...

    ABAP常用函数

    今天,我们将详细介绍 ABAP 中常用的系统变量和函数。 系统变量 在 ABAP 中,系统变量是系统预定义的变量,用于存储当前系统状态信息。常用的系统变量有: 1. SY-PAGNO:当前页号 2. SY-DATUM:当前时间 3. SY-...

    abap 函数大全 abap function

    通过“ABAP 函数 -=SapSky=-.htm”和“ABAP 函数 -=SapSky=-.files”这两个文件,你可以深入学习和了解这些函数模块的具体使用方法,从而提升你的ABAP编程技能。理解并熟练运用这些函数模块,能够使你在处理SAP系统...

    ABAP函数讲解系列

    ABAP函数是SAP系统中最基本也是最重要的组件之一,它们提供了大量的功能性和逻辑控制,可以帮助开发者快速实现业务逻辑。ABAP函数可以分为多种类型,例如字符串处理函数、日期处理函数、算术运算函数等,每种类型的...

    jco(sap java connector)

    JCO,全称Java Connector,是SAP公司提供的一个关键组件,用于在Java应用程序与SAP系统之间建立通信桥梁。它是一个基于Java的中间件,允许开发者利用Java语言来访问和操作SAP R/3系统中的数据和业务流程,从而实现跨...

    ABAP常用函数集锦

    ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的编程语言。以下是一些ABAP常用函数...以上就是ABAP常用函数的一些关键功能和应用场景,它们在SAP系统的开发中起到了至关重要的作用。

    ABAP常见函数的使用资料

    在ABAP编程中,函数是实现特定功能的重要组成部分。这些函数可以帮助我们简化代码,提高效率。以下是基于给定标题和描述中的几个关键函数的详细解释: 1. FUNC12(将字符串尾部的负号移到字符串头部): 这个函数...

    SAPABAP常用函数清单[参考].pdf

    SAP ABAP 常用函数清单 SAP ABAP 是一种基于对象的编程语言,用于在 SAP R/3 系统中开发应用程序。ABAP 语言提供了许多函数模块,帮助开发者快速地开发和维护应用程序。本文总结了常用的 SAP ABAP 函数模块,包括...

Global site tag (gtag.js) - Google Analytics