`
wfzhanga
  • 浏览: 70197 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA与Sap交互技术RFC

 
阅读更多
public class SapFunction {
    //JCo 返回参数类型定义
    public static final Integer Type_String = 1;
    public static final Integer Type_Int = 2;
    public static final Integer Type_Long = 3;
    public static final Integer Type_Double = 4;
    public static final Integer Type_Date = 5;
    public static final Integer Type_Float = 6;
    
    /** 
     * @Description: 返回值为List,有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param paramMap  SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  List<?>  SAP方法返回的List,?为指定类型;
     * @throws 
    */ 
    public static List<?> getList(String functionName,String tableName, Map<String,Integer> keyTypeMap, Class<?> beanClazz){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        List<Object> list = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            function.execute(jCoDestination);
            JCoTable tb = function.getTableParameterList().getTable(tableName);
            for (int i = 0; i < tb.getNumRows(); i++) {  
                tb.setRow(i);
                Map<String,Object> map = new HashMap<String,Object>();
                for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                    switch(entry.getValue().intValue()){
                        case 1:
                            map.put(entry.getKey(), tb.getString(entry.getKey()));
                            break;
                        case 2:
                            map.put(entry.getKey(), tb.getInt(entry.getKey()));
                            break;
                        case 3:
                            map.put(entry.getKey(), tb.getLong(entry.getKey()));
                            break;
                        case 4:
                            map.put(entry.getKey(), tb.getDouble(entry.getKey()));
                            break;
                        case 5:
                            map.put(entry.getKey(), tb.getDate(entry.getKey()));
                            break;
                        case 6:
                            map.put(entry.getKey(), tb.getFloat(entry.getKey()));
                            break;
                    }
                }
                if(list == null){
                    list = new ArrayList<Object>();
                }
                Object obj = CommonUtils.getBean(map, beanClazz);
                list.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    /** 
     * @Description: 返回值为List,有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param paramMap  SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  List<?>  SAP方法返回的List,?为指定类型;
     * @throws 
    */ 
    public static List<?> getList(String functionName, Map<String,Object> paramMap,String tableName, Map<String,Integer> keyTypeMap, Class<?> beanClazz){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        List<Object> list = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            JCoParameterList parameterList = function.getImportParameterList();
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                parameterList.setValue(entry.getKey(), entry.getValue());
            }
            function.execute(jCoDestination);
            JCoTable tb = function.getTableParameterList().getTable(tableName);
            for (int i = 0; i < tb.getNumRows(); i++) {  
                tb.setRow(i);
                Map<String,Object> map = new HashMap<String,Object>();
                for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                    switch(entry.getValue().intValue()){
                        case 1:
                            map.put(entry.getKey(), tb.getString(entry.getKey()));
                            break;
                        case 2:
                            map.put(entry.getKey(), tb.getInt(entry.getKey()));
                            break;
                        case 3:
                            map.put(entry.getKey(), tb.getLong(entry.getKey()));
                            break;
                        case 4:
                            map.put(entry.getKey(), tb.getDouble(entry.getKey()));
                            break;
                        case 5:
                            map.put(entry.getKey(), tb.getDate(entry.getKey()));
                            break;
                        case 6:
                            map.put(entry.getKey(), tb.getFloat(entry.getKey()));
                            break;
                    }
                }
                if(list == null){
                    list = new ArrayList<Object>();
                }
                Object obj = CommonUtils.getBean(map, beanClazz);
                list.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    /** 
     * @Description: 返回值为List,有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param paramMap  SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  Map<String,Object>  SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
     * @throws 
    */ 
    public static List<Map<String,Object>> getList(String functionName, Map<String,Object> paramMap,String tableName, Map<String,Integer> keyTypeMap){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        List<Map<String,Object>> list = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            JCoParameterList parameterList = function.getImportParameterList();
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                parameterList.setValue(entry.getKey(), entry.getValue());
            }
            function.execute(jCoDestination);
            JCoTable tb = function.getTableParameterList().getTable(tableName);
            for (int i = 0; i < tb.getNumRows(); i++) {  
                tb.setRow(i);
                Map<String,Object> map = new HashMap<String,Object>();
                for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                    switch(entry.getValue().intValue()){
                        case 1:
                            map.put(entry.getKey(), tb.getString(entry.getKey()));
                            break;
                        case 2:
                            map.put(entry.getKey(), tb.getInt(entry.getKey()));
                            break;
                        case 3:
                            map.put(entry.getKey(), tb.getLong(entry.getKey()));
                            break;
                        case 4:
                            map.put(entry.getKey(), tb.getDouble(entry.getKey()));
                            break;
                        case 5:
                            map.put(entry.getKey(), tb.getDate(entry.getKey()));
                            break;
                        case 6:
                            map.put(entry.getKey(), tb.getFloat(entry.getKey()));
                            break;
                    }
                }
                if(list == null){
                    list = new ArrayList<Map<String,Object>>();
                }
                list.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    /** 
     * @Description: 返回值为List,没有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  Map<String,Object>  SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
     * @throws 
    */ 
    public static List<Map<String,Object>> getList(String functionName,String tableName, Map<String,Integer> keyTypeMap){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        List<Map<String,Object>> list = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            function.execute(jCoDestination);
            JCoTable tb = function.getTableParameterList().getTable(tableName);
            for (int i = 0; i < tb.getNumRows(); i++) {  
                tb.setRow(i);
                Map<String,Object> map = new HashMap<String,Object>();
                for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                    switch(entry.getValue().intValue()){
                        case 1:
                            map.put(entry.getKey(), tb.getString(entry.getKey()));
                            break;
                        case 2:
                            map.put(entry.getKey(), tb.getInt(entry.getKey()));
                            break;
                        case 3:
                            map.put(entry.getKey(), tb.getLong(entry.getKey()));
                            break;
                        case 4:
                            map.put(entry.getKey(), tb.getDouble(entry.getKey()));
                            break;
                        case 5:
                            map.put(entry.getKey(), tb.getDate(entry.getKey()));
                            break;
                        case 6:
                            map.put(entry.getKey(), tb.getFloat(entry.getKey()));
                            break;
                    }
                }
                if(list == null){
                    list = new ArrayList<Map<String,Object>>();
                }
                list.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    /** 
     * @Description: 返回值为MAP,但有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param paramMap  SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  Map<String,Object>  SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
     * @throws 
    */ 
    public static Map<String,Object> getMap(String functionName, Map<String,Object> paramMap, Map<String,Integer> keyTypeMap){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        Map<String,Object> map = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            JCoParameterList parameterList = function.getImportParameterList();
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                parameterList.setValue(entry.getKey(), entry.getValue());
            }
            function.execute(jCoDestination);
            JCoParameterList resultList = function.getExportParameterList();
            for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                if(map == null){
                    map = new HashMap<String,Object>();
                }
                switch(entry.getValue().intValue()){
                    case 1:
                        map.put(entry.getKey(), resultList.getString(entry.getKey()));
                        break;
                    case 2:
                        map.put(entry.getKey(), resultList.getInt(entry.getKey()));
                        break;
                    case 3:
                        map.put(entry.getKey(), resultList.getLong(entry.getKey()));
                        break;
                    case 4:
                        map.put(entry.getKey(), resultList.getDouble(entry.getKey()));
                        break;
                    case 5:
                        map.put(entry.getKey(), resultList.getDate(entry.getKey()));
                        break;
                    case 6:
                        map.put(entry.getKey(), resultList.getFloat(entry.getKey()));
                        break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    
    
    /** 
     * @Description: 返回值为MAP,但没有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param keyTypeMap  SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
     * @return  Map<String,Object>  SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
     * @throws 
    */ 
    public static Map<String,Object> getMap(String functionName, Map<String,Integer> keyTypeMap){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        Map<String,Object> map = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            function.execute(jCoDestination);
            JCoParameterList resultList = function.getExportParameterList();
            for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
                if(map == null){
                    map = new HashMap<String,Object>();
                }
                switch(entry.getValue().intValue()){
                    case 1:
                        map.put(entry.getKey(), resultList.getString(entry.getKey()));
                        break;
                    case 2:
                        map.put(entry.getKey(), resultList.getInt(entry.getKey()));
                        break;
                    case 3:
                        map.put(entry.getKey(), resultList.getLong(entry.getKey()));
                        break;
                    case 4:
                        map.put(entry.getKey(), resultList.getDouble(entry.getKey()));
                        break;
                    case 5:
                        map.put(entry.getKey(), resultList.getDate(entry.getKey()));
                        break;
                    case 6:
                        map.put(entry.getKey(), resultList.getFloat(entry.getKey()));
                        break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    
    
    /** 
     * @Description: 返回值为String,但没有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param paramMap  SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
     * @param valueKey  SAP方法返回的参数名称;
     * @return  String  SAP方法返回的参数值;
     * @throws 
    */ 
    public static String getString(String functionName, Map<String,Object> paramMap, String valueKey){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            JCoParameterList parameterList = function.getImportParameterList();
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                parameterList.setValue(entry.getKey(), entry.getValue());
            }
            function.execute(jCoDestination);
            JCoParameterList resultList = function.getExportParameterList();
            return resultList.getString(valueKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    
    /** 
     * @Description: 返回值为String,但没有入参的情况
     * @param functionName  调用的SAP方法名称
     * @param valueKey  SAP方法返回的参数名称;
     * @return  String  SAP方法返回的参数值;
     * @throws 
    */ 
    public static String getString(String functionName, String valueKey){
        JCoDestination jCoDestination = null;
        JCoFunction function = null;
        try {
            jCoDestination = SapFactory.getConnection();
            function = jCoDestination.getRepository().getFunction(functionName);
            function.execute(jCoDestination);
            JCoParameterList resultList = function.getExportParameterList();
            return resultList.getString(valueKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

 

public class SapFactory {
    
    private static SapFactory instance = null;
    private static String abap_as_pooled = "ABAP_AS_WITH_POOL";
    private SapFactory(){
    }
    
    public static JCoDestination getConnection(){
        if(instance == null){
            instance = new SapFactory();
            instance.init();
        }
        return instance.connection();
    }
    
    private void init(){
        Properties connectProperties = new Properties();
        abap_as_pooled = AppContext.getSystemProperty("formFlowListener.abap_as_pooled");
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, AppContext.getSystemProperty("formFlowListener.jco_ashost"));                //连接IP
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  AppContext.getSystemProperty("formFlowListener.jco_sysnr"));                 //系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, AppContext.getSystemProperty("formFlowListener.jco_client"));                //SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   AppContext.getSystemProperty("formFlowListener.jco_user"));                  //SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, AppContext.getSystemProperty("formFlowListener.jco_passwd"));                //密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   AppContext.getSystemProperty("formFlowListener.jco_lang"));                  //登录语言
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, AppContext.getSystemProperty("formFlowListener.jco_pool_capacity"));  //最大连接数  
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, AppContext.getSystemProperty("formFlowListener.jco_peak_limit"));        //最大连接线程
        createDataFile(abap_as_pooled, "jcoDestination", connectProperties);
    }

    private void createDataFile(String name, String suffix, Properties properties){
        File cfg = new File(name+"."+suffix);
        if(cfg.exists()){
            cfg.deleteOnExit();
        }
        try{
            FileOutputStream fos = new FileOutputStream(cfg, false);
            properties.store(fos, "for tests only !");
            fos.close();
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
        }
    }
    
    private JCoDestination connection(){
        JCoDestination destination =null;
        try {
            destination = JCoDestinationManager.getDestination(abap_as_pooled);
        } catch (JCoException e) {
            e.printStackTrace();
        }
        return destination;
    }
}

 

需要引入的 jar与dll文件

 

 

 

 

分享到:
评论

相关推荐

    java调用sap rfc说明

    Java调用SAP RFC(Remote Function Call)是一种技术,允许Java应用程序与SAP系统进行通信,执行SAP系统中的特定业务逻辑。SAP RFC是SAP NetWeaver平台提供的一种接口技术,它允许外部系统调用SAP的功能模块,就像...

    java连接RFC综合例子,java调用sap例子,泛微E8,E9调用SAP RFC例子

    Java连接RFC(Remote Function Call)是一种技术,允许Java应用程序与SAP系统进行通信,执行SAP的业务逻辑。本文将详细解析标题和描述中提到的知识...通过学习和理解这些代码,可以更好地掌握Java与SAP RFC的交互技术。

    Java 调用 SAP RFC 案例

    JCo允许Java应用程序创建与SAP系统之间的连接,通过RFC接口进行交互。要使用JCo,你需要先在SAP系统中配置RFC目的地,然后在Java代码中设置相应的连接参数。 以下是调用SAP RFC的基本步骤: 1. **配置SAP RFC目的...

    java与sap交互 jco包

    Java与SAP交互是企业级应用集成中的常见需求,JCO(Java Connector)是SAP提供的用于Java应用程序与SAP系统通信的接口。本篇将详细介绍如何利用JCO包进行Java与SAP的交互,以及如何处理jar包和dll文件。 首先,JCO...

    java连接sap RFC函数 所需文件

    总之,`sapjco3.jar`、`sapjco.jar`和`sapjco3.dll`是Java连接SAP RFC的关键组件,它们构成了Java与SAP系统交互的基础框架。正确理解和使用这些文件,可以帮助开发者高效地实现Java应用程序与SAP系统的集成。

    java在Linux下调用sap的RFC接口必备so文件 libsapjco3.so

    Java在Linux环境中调用SAP RFC接口涉及到的关键技术点包括Java与SAP的集成、Linux系统下的动态链接库(.so文件)以及SAP的RFC(远程功能调用)技术。这里将详细介绍这些知识点。 首先,SAP RFC是SAP提供的一种通信...

    JAVA与SAP数据交互的方式总结

    JAVA与SAP数据交互主要涉及两种方式:RFC和IDoc。这两种方式都是为了实现JAVA应用程序与SAP系统之间的数据交换,使得非SAP系统能够利用SAP的强大功能和数据。 1. RFC(Remote Function Call)方式: RFC是SAP系统...

    SAP ABAP与JAVA之间通过RFC传递数据实例

    本文档主要介绍了如何在SAP ABAP系统与JAVA应用程序之间通过RFC(Remote Function Call远程函数调用)实现数据交互的具体实现方法。核心需求是在给定特定的选择条件下,从SAP系统的数据库表T001中提取数据,并将这些...

    sapjco.jar.rar_java rfc_rfc sap_sap rfc_sapjco jar_sapjco.j

    在描述中提到,“sapjco.jar”是JAVA连接SAP-RFC接口的开发包,这意味着它提供了必要的Java库,使开发者能够在Java环境中与SAP系统进行交互。这通常涉及到在Java应用程序中实现SAP的功能,如数据交换、业务流程集成...

    SAP NetWeaver RFC SDK

    ### SAP NetWeaver RFC SDK:深入理解与应用 #### 核心知识点概览: 1. **SAP NetWeaver RFC SDK定义与作用** - SAP NetWeaver RFC SDK(Software Development Kit)是SAP官方提供的工具包,用于开发、集成和调用...

    建立系统完成与SAP系统的RFC交互.zip

    SAP JCo (Java Connector) 是SAP提供的Java接口,允许Java应用程序通过RFC与SAP系统进行通信。开发者使用JCo库可以创建 RFC 客户端,调用SAP系统中的函数模块,实现数据的导入和导出。 至于"newfile"这个文件名,...

    Java调用SAP RFC驱动程序 Windows版本 亲测可用 sapjco30P_17-64-Windows

    Java调用SAP RFC驱动程序是企业集成中的常见场景,特别是在Windows环境下,SAP与Java应用的交互往往依赖于SAP提供的JCO(Java Connector)库。本文将深入讲解如何在Windows系统上配置和使用SAP JCO 3.0(sapjco30P_...

    SAP的RFC接口调用

    在SAP系统中,RFC(Remote Function Call)是一种远程过程调用技术,允许不同系统间进行数据交互和功能调用。本文将详细讨论如何通过Java来调用SAP的RFC接口,并涉及JCO3.0库的使用。 首先,JCO(Java Connector)...

    spirngboot链接SAP RFC.都是最新版,看上传时间.7z

    首先,`SAP RFC`是一种接口技术,允许外部系统与SAP系统进行通信,执行SAP系统中的函数模块。通过RFC,非SAP应用可以访问SAP的业务逻辑和数据,实现双向数据交换。 SpringBoot是一个轻量级的Java框架,它简化了创建...

    java调用SAP RFC

    Java调用SAP RFC是一种常见的企业级集成技术,主要用于连接Java应用程序与SAP系统,实现数据交换和业务流程自动化。SAP RFC(Remote Function Call)是SAP提供的一种远程调用机制,允许不同系统间安全地交换数据和...

    ASP.NET连接SAP 调用RFC

    1. **启动VS2010并创建新项目**:创建一个ASP.NET Web应用程序或Windows应用程序,这将作为与SAP交互的平台。 2. **添加SAP Connector引用**:在解决方案资源管理器中右键点击项目,选择“添加引用”,然后找到SAP....

    windows中JAVA对接SAP所需SDK

    它实现了SAP系统的远程调用功能,允许Java代码通过JNI(Java Native Interface)与SAP系统交互。在Windows系统中,Java程序不能直接调用C/C++编写的原生代码,因此需要这样的DLL来桥接Java和SAP的原生接口。 2. sap...

    【SAP】 RFC接口链接包

    描述中提到的几个文件是SAP Java Connector (JCo)的库文件,用于Java应用程序与SAP系统通过RFC接口进行通信: 1. `libsapjco3.so`:这是SAP JCo的动态链接库文件,用于Linux或Unix系统。它实现了SAP RFC接口,使得...

    SAP-JCO.rar_Linux rfc jco_SAP_SAP jco RFC_jco linux64_sap rfc

    SAP JCO是SAP NetWeaver平台的一部分,它允许Java应用程序通过RFC协议与SAP系统交互。RFC是一种标准的SAP通信机制,允许远程调用SAP系统的功能模块,就像它们是在本地调用一样。 在Linux环境下设置SAP JCO,你需要...

Global site tag (gtag.js) - Google Analytics