SAP Javaコネクタシステムは、RFC関数を呼び出し、呼び出し、

参考ブログ:https://blog.csdn.net/qq_36026747/article/details/81287462

                  https://www.cnblogs.com/jiangzhengjun/p/4291479.html     

 

 

インストールJCO

リンクします。https://pan.baidu.com/s/1DclmG14bjAteTvUC7X-e9A
抽出コード:PPG2

インストールディレクトリに、開梱後:cmdはjavaの-jar sapjco3.jarの実行、実行、以下の画像を示し、インストールは成功しました。

 

RFC関数を作成:

 

Javaコードを書きます:

一度JVM、libのパッケージになりますちょうどjco3ディレクトリsapjco3.jarのを構成しました。

package sapConnection2;

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

import com.sap.conn.jco.ext.DestinationDataProvider;

public class ConnectPooled {// 连接池

    static String ABAP_AS_POOLED = "ConnectionPool";    //配置文件名
    static {

        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxx.xxx.x.xxx"); // IP
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // 客户端编号
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxxx"); // 用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxxxx"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 语言// *********连接池方式与直接不同的是设置了下面两个连接属性*******
        // JCO_PEAK_LIMIT - 同时可创建的最大活动连接数,0表示无限制,默认为JCO_POOL_CAPACITY的值
        // 如果小于JCO_POOL_CAPACITY的值,则自动设置为该值,在没有设置JCO_POOL_CAPACITY的情况下为0
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");
        // JCO_POOL_CAPACITY - 空闲连接数,如果为0,则没有连接池效果,默认为1
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "2");
        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
    }

    /* 创建连接池的配置文件 */
    static void createDataFile(String name, String suffix, Properties properties) {
        File cfg = new File(name + "." + suffix);
        if (!cfg.exists()) {
            try {
                FileOutputStream fos = new FileOutputStream(cfg, false);
                properties.store(fos, "for tests only !");
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }    
}

测试代码:

package sapConnection2;

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;

/*
 * JCoFunction包含importing参数,exporting参数,changing参数,table参数。
 * 分别使用getImportParameterList方法,getExportParameterList方法, getChangingParameterList方法和getTableParameterList获得。
 * 这些方法的返回值都是JCoParameter类型
 */
public class ConnectPooledTest {

    public static void main(String[] args) throws JCoException {
        String bapiFunctionName = "ZPOP_NUMBER";
        JCoDestination destination = JCoDestinationManager.getDestination(ConnectPooled.ABAP_AS_POOLED);
        JCoRepository repository = destination.getRepository();                 //JCoFunction是一个接口,代表SAP系统的函数库
        JCoFunction function = repository.getFunction(bapiFunctionName);     // 从这个函数模板获得该SAP函数的对象        
        JCoParameterList input = function.getImportParameterList();         // 获得函数的import参数列表
        input.setValue("INPUT_NUMB1", 2);
        input.setValue("INPUT_NUMB2", 2);        
        function.execute(destination);
        JCoParameterList output = function.getExportParameterList();         // 获得Export变量列表。
        int value = output.getInt("OUTPUT_NUMB");
        System.out.println(value);    
    }
}

 

 

报错:

Exception in thread "main" com.sap.conn.jco.JCoException: (102) JCO_ERROR_COMMUNICATION: Connect to SAP gateway failed
Connection parameters: TYPE=A DEST=ConnectionPool ASHOST=192.168.1.112 SYSNR=00 PCS=1

可能缺少路由器字符串,在ConnectPooled类中添加: 

connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, "xxxxxxxxx");

 

おすすめ

転載: www.cnblogs.com/freeandeasy/p/11345079.html
おすすめ