Java连接SAP客户端调用SAP RFC函数

java连接sap需要做的:

1.下载sap的jar,sapjco3相关的包

jar包放百度云上了,免费下载(jar包下载第四个就行了,32位,64位都包含)

链接:https://pan.baidu.com/s/15hw0BskEvH4hkN6sDIM5cQ 
提取码:bobo 
--来自百度网盘超级会员V5的分享

2.上代码测试

package com.lns.saptest.controller;

import com.sap.conn.jco.*;
import com.sap.conn.jco.ext.DestinationDataProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

@RestController
public class SapConnectionController {
    //这个跟我写的一样就行了,具体用处我不太清楚,欢迎评论补充
    private static final String ABAP_AS_POOLED= "ABAP_AS_WITH_POOL";

    static{
        Properties connectProperties = new Properties();
        //主要参数,根据你的配置来
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "88.88.88.88");//服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "01");        //系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "051");       //SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "RFC_OA");  //SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "12345678");     //密码


        //下面三个参数默认跟我的一样就行了
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "zh");        //登录语言
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");  //最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");     //最大连接线程

        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
    }


    //我用的是接口地址访问,自己测试用测试类main方法就可以测
    @GetMapping("/sapConnection")
    public void sapConnection() throws JCoException {
        JCoDestination destination = connect();
        //.ping方法是测试连接是否可用,如果这一步报错了,1.检查配置是否正确,2.检查sap的网络是否通
        destination.ping();
        System.out.println("连接sap成功");
        JCoFunction function = destination.getRepository().getFunction("ZRFC_GET_MC_ACC_GG");
        if (function == null) {
            throw new RuntimeException("STFC_CONNECTION not found in SAP.");
        }

        //设置请求头参数:I_FGCODE是我的入参key
        function.getImportParameterList().setValue("I_FGCODE", "000000000007900787");
        try {
            function.execute(destination);
        } catch (AbapException e) {
            System.out.println(e.toString());
        }
        //调用SAP函数成功会返回结果
        JCoParameterList list = function.getExportParameterList();

        //输出:E_MCCODE是我的输出参数key
        System.out.println(list.getString("E_MCCODE"));
    }


    /**
     *创建SAP接口属性文件。
     *@paramnameABAP管道名称
     *@paramsuffix属性文件后缀
     *@paramproperties属性文件内容
     */
    private static 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){
            System.out.println("Create Data file fault, error msg: " + e.toString());
            throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
        }
    }


    /**
     *获取SAP连接
     *@returnSAP连接对象
     */
    public static JCoDestination connect(){
        JCoDestination destination =null;
        try {
            destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
        } catch (JCoException e) {
            System.out.println("Connect SAP fault, error msg: " + e.toString());
        }
        return destination;
    }
}

有问题欢迎留言提问,看到就会回复

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用 SAPRFC 接口,需要使用 SAP 提供的 Java Connector(SAP JCo)库。在使用 SAP JCo 调用 RFC 接口时,需要在 SAP JCo 的配置文件中设置系统 ID(System ID),以便正确地连接SAP 系统。 要配置 SAP JCo 的系统 ID,需要进行以下步骤: 1. 打开 SAP JCo 的配置文件 sapjco3.properties,该文件通常位于应用程序的 classpath 下。 2. 在 sapjco3.properties 文件中添加以下配置项: ``` jco.client.sysnr=<系统编号> jco.client.client=<客户端> jco.client.user=<用户名> jco.client.passwd=<密码> jco.client.lang=<语言> jco.client.ashost=<应用服务器主机名> jco.client.saprouter=<SAP 路由器> ``` 其中,<系统编号> 是 SAP 系统的编号,<客户端> 是 SAP 客户端的编号,<用户名> 和 <密码> 是 SAP 用户的登录信息,<语言> 是登录时使用的语言代码,<应用服务器主机名> 是 SAP 应用服务器的主机名,<SAP 路由器> 是可选的 SAP 路由器配置。 3. 在 Java 代码中使用 SAP JCo 的 API 调用 RFC 接口时,可以使用以下代码获取 SAP JCo 的配置信息: ``` JCoDestination destination = JCoDestinationManager.getDestination("<destination>"); ``` 其中,<destination> 是 SAP JCo 的目标名称,可以在 sapjco3.properties 文件中配置。 4. 使用 SAP JCo 的 API 调用 RFC 接口时,需要使用 SAP JCo 的函数模块名称和函数模块的输入参数,例如: ``` JCoFunction function = destination.getRepository().getFunction("<function_module>"); if (function == null) { throw new RuntimeException("<function_module> not found in SAP system."); } function.getImportParameterList().setValue("<parameter_name>", "<parameter_value>"); function.execute(destination); ``` 其中,<function_module> 是 SAP RFC 函数模块的名称,<parameter_name> 和 <parameter_value> 是函数模块的输入参数名称和值。 以上是 Java 调用 SAP RFC 接口时配置系统 ID 的基本步骤。具体的配置和调用方法可能会因不同的 SAP 系统和 RFC 接口而有所不同,需要根据实际情况进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值