精华内容
下载资源
问答
  • Linux下Java如何连SAP本文档测试环境:1)Linux操作系统版本:RedHatEnterpriseLinuxServerrelease52.6.18-8.el52)jdk版本1.5.0_16Linux下连Javasap步骤1)下载sapjco.jar请到service.sap.com/connectors,下载sap...

    Linux

    Java

    如何连

    SAP

    本文档测试环境:

    1

    )

    Linux

    操作系统版本:

    Red Hat Enterprise Linux Server release 5

    2.6.18-8.el5

    2

    )

    jdk

    版本

    1.5.0_16

    Linux

    下连

    Java

    sap

    步骤

    1

    )下载

    sapjco.jar

    请到

    service.sap.com/connectors

    下载

    sapjco.jar

    本案下载的是

    sapjco-linuxintel-2.1.8.zip

    2

    )

    zip

    librfccm.so

    libsapjcorfc.so

    $JA

    V

    A_HOME/jre/lib/i386/server

    并将

    sapjco.jar

    复制到特定目录下,

    然后设置

    CLASSPA

    TH

    export

    CLASSPA

    TH=.:/usr/java/jdk1.5.0_16/lib:/usr/java/jdk1.5.0_16/jre/lib:/usr/wuxq/sapjco.jar

    3

    )在进行

    sap

    rfc

    连接的时候,需要

    libstdc++-libc6.2-2.so.3

    库文件,可从

    csdn

    上下载,

    展开全文
  • java调用SAP WebService服务

    千次阅读 2020-02-27 11:25:17
    调用SAP WebService服务需要转换操作 1、通过浏览器访问SAP WebService地址,进行验证并生成wsdl文件 地址并不是可以直接转化的wsdl: 直接访问地址并进行验证后: 另存文件wsdl 2、通过Idea生成java可执行...

    调用SAP WebService服务需要转换操作

    1、通过浏览器访问SAP WebService地址,进行验证并生成wsdl文件

    1. 地址并不是可以直接转化的wsdl:
      这里是引用
    2. 直接访问地址并进行验证后:
      在这里插入图片描述
    3. 另存文件wsdl
      在这里插入图片描述

    2、通过Idea生成java可执行代码

    1. 存放wsdl
      在这里插入图片描述
    2. 选中wsdl文件,选择Tools ->WebService -> Generate Java Code From Wsdl…
      在这里插入图片描述
    3. 最开始引用路径会是一个绝对路径,我们修改Service引用wsdl方式
      在这里插入图片描述

    3、调用service

    在这里插入图片描述
    此时便可以获取到数据了,注意的是构造Holder的时候,我们需要自己构造一个参数传入,否则无法获取到数据信息。

    展开全文
  • JAVA对接SAP接口使用sapjco3的见解

    千次阅读 2019-05-10 10:35:16
    SAP JCo3.0是Java语言与ABAP语言双向通讯的中间件。与之前1.0/2.0相比,是重新设计的产品。API和架构设计与NCo3.0比较类似,前面也说过,NCo3.0的设计参考了JCo3.0。从本篇开始,系统介绍JCo3.0编程的技术要点。 JCo...

    参考了作者zfswff的资料

    SAP

    JCo3.0是Java语言与ABAP语言双向通讯的中间件。与之前1.0/2.0相比,是重新设计的产品。API和架构设计与NCo3.0比较类似,前面也说过,NCo3.0的设计参考了JCo3.0。从本篇开始,系统介绍JCo3.0编程的技术要点。

    JCo3.0 安装

    下载JCo3.0,注意下载的时候根据操作系统和JVM版本(32位还是64)选择不同的版本。安装就是解压,将文件解压到目标文件夹。以Windows系统为例,主要的文件包括:

    sapjco3.dll
    sapjco3.jar

    SAP强烈推荐将这两个文件放在同一文件夹下。
    测试安装是否成功,可以在命令窗口下,进入安装文件夹,运行下面的命令:
    java -jar sapjco3.jar

    JCoDestination

    JCoDestination代表后台SAP系统,程序员不用关心与SAP的连接,jco3.0运行时环境负责管理连接和释放连接。我们先以一个简单的例子看看jco3.0 JCoDestination类的一些要点。

    我使用的编程环境是Eclipse,环境准备如下:

    1. 新建一个spring boot项目,项目名为JCo3Demo。

    2. 将sapjco3.jar加入到项目的resources下lib(新建)中。注意前面所说的sapjco3.jar和sapjco3.dll(不需要build path)要放在同一个文件夹下。

    3. 创建实体类SapConn用来存储对接的SAP系统的连接参数,代码如下:

       // SAP服务器
       private String JCO_ASHOST;
       // SAP系统编号
       private String JCO_SYSNR;
       // SAP集团
       private String JCO_CLIENT;
       // SAP用户名
       private String JCO_USER;
       // SAP密码
       private String JCO_PASSWD;
       // SAP登录语言
       private String JCO_LANG;
       // 最大连接数
       private String JCO_POOL_CAPACITY;
       // 最大连接线程
       private String JCO_PEAK_LIMIT;
       // SAP ROUTER
       private String JCO_SAPROUTER;
      
       public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,
                      String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,
                      String JCO_SAPROUTER) {
           this.JCO_ASHOST = JCO_ASHOST;
           this.JCO_SYSNR = JCO_SYSNR;
           this.JCO_CLIENT = JCO_CLIENT;
           this.JCO_USER = JCO_USER;
           this.JCO_PASSWD = JCO_PASSWD;
           this.JCO_LANG = JCO_LANG;
           this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
           this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
           this.JCO_SAPROUTER = JCO_SAPROUTER;
       }
      
       public SapConn() {}
      
       public String getJCO_ASHOST() {
           return JCO_ASHOST;
       }
      
       public void setJCO_ASHOST(String JCO_ASHOST) {
           this.JCO_ASHOST = JCO_ASHOST;
       }
      
       public String getJCO_SYSNR() {
           return JCO_SYSNR;
       }
      
       public void setJCO_SYSNR(String JCO_SYSNR) {
           this.JCO_SYSNR = JCO_SYSNR;
       }
      
       public String getJCO_CLIENT() {
           return JCO_CLIENT;
       }
      
       public void setJCO_CLIENT(String JCO_CLIENT) {
           this.JCO_CLIENT = JCO_CLIENT;
       }
      
       public String getJCO_USER() {
           return JCO_USER;
       }
      
       public void setJCO_USER(String JCO_USER) {
           this.JCO_USER = JCO_USER;
       }
      
       public String getJCO_PASSWD() {
           return JCO_PASSWD;
       }
      
       public void setJCO_PASSWD(String JCO_PASSWD) {
           this.JCO_PASSWD = JCO_PASSWD;
       }
      
       public String getJCO_LANG() {
           return JCO_LANG;
       }
      
       public void setJCO_LANG(String JCO_LANG) {
           this.JCO_LANG = JCO_LANG;
       }
      
       public String getJCO_POOL_CAPACITY() {
           return JCO_POOL_CAPACITY;
       }
      
       public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {
           this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
       }
      
       public String getJCO_PEAK_LIMIT() {
           return JCO_PEAK_LIMIT;
       }
      
       public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {
           this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
       }
      
       public String getJCO_SAPROUTER() {
           return JCO_SAPROUTER;
       }
      
       public void setJCO_SAPROUTER(String JCO_SAPROUTER) {
           this.JCO_SAPROUTER = JCO_SAPROUTER;
       }
      
       @Override
       public String toString() {
           return "SapConn{" +
                   "JCO_ASHOST='" + JCO_ASHOST + '\'' +
                   ", JCO_SYSNR='" + JCO_SYSNR + '\'' +
                   ", JCO_CLIENT='" + JCO_CLIENT + '\'' +
                   ", JCO_USER='" + JCO_USER + '\'' +
                   ", JCO_PASSWD='" + JCO_PASSWD + '\'' +
                   ", JCO_LANG='" + JCO_LANG + '\'' +
                   ", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +
                   ", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +
                   ", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +
                   '}';
       }
      
    4. 获取 JCoDestination 的工具类,通过new SAPConnUtils().jCoDestination创建链接并获取JCoDestination类,并且项目根目录下会生成配置文件ABAP_AS_WITH_POOL.jcoDestination,之后可以使用jCoDestination= JCoDestinationManager.getDestination("ABAP_AS_WITH_POOL");获取

       private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
       public JCoDestination jCoDestination;
      
       public SAPConnUtils(){
           SapConn con = new SapConn(
                   "xxxxx",
                   "00",
                   "300",
                   "xxx",
                   "xxxxx",
                   "zh",
                   "30",
                   "150",
                   "xxxxxxxxx"
           );
           jCoDestination = connect(con);
       }
      
       /**
        * 创建SAP接口属性文件。
        * @param name  ABAP管道名称
        * @param suffix    属性文件后缀
        * @param properties    属性文件内容
        */
       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连接
        */
      
       private static void initProperties(SapConn sapConn) {
           Properties connectProperties = new Properties();
           // SAP服务器
           connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sapConn.getJCO_ASHOST());
           // SAP系统编号
           connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  sapConn.getJCO_SYSNR());
           // SAP集团
           connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sapConn.getJCO_CLIENT());
           // SAP用户名
           connectProperties.setProperty(DestinationDataProvider.JCO_USER,   sapConn.getJCO_USER());
           // SAP密码
           connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sapConn.getJCO_PASSWD());
           // SAP登录语言
           connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   sapConn.getJCO_LANG());
           // 最大连接数
           connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());
           // 最大连接线程
           connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());
           // SAP ROUTER
           connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER());
      
           createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
       }
      
       /**
        * 获取SAP连接
        * @return  SAP连接对象
        */
       public static JCoDestination connect(SapConn sapConn){
       	System.out.println("正在连接至SAP...");
           JCoDestination destination = null;
           initProperties(sapConn);
           try {
               destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
               destination.ping();
               System.out.println("已成功建立sap的连接");
           } catch (JCoException e) {
           	System.out.println("Connect SAP fault, error msg: " + e.toString());
           }
           return destination;
       }
      

      }

    JCo3.0调用SAP函数的过程

    大致可以总结为以下步骤:

    • 连接至SAP系统(参考上面3和4步骤)
    • 创建JcoFunction接口的实例(这个实例代表SAP系统中相关函数)
    • 设置importing参数
    • 调用函数
    • 从exporting参数或者table参数获取数据

    JCoFunction接口说明

    • JCoFunction是一个接口,代表SAP系统的函数

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

    • JCoFunction.execute方法实际执行函数

    如何创建JCoFunction对象

    • 上面的代码是第一种创建JCoFunction实例的方法,BAPI_COMPANYCODE_GETDETAIL为调用函数名:
     JCoRepository repository = dest.getRepository();    
     JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
    
    • 如果我们不关心JCoRepository,也可以这样写:
     JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
    
    • 第三种方法是使用JCoFunctionTemplate.getFunction方法,JCoFunctionTemplate也是一个接口,代表SAP函数的meta-data。
      JCoFunctionTemplate fmTemplate= dest.getRepository().getFunctionTemplate("BAPI_COMPANYCODE_GETDETAIL");
     JCoFunction fm = fmTemplate.getFunction();
    

    设置importing参数

    			//调用function函数
    			function = jCoDestination.getRepository().getFunction("调用函数名");
    			//ParamKey为的参数名,以逗号隔开,ParamValue为参数名对应的参数值,
    			if("".equals(ParamKey) || "".equals(ParamValue)) {
    				// 不需要参数
    			}else{
    				String[] paramKeys = ParamKey.split(",");
    				String[] paramValues = ParamValue.split(",");
    				for (int i = 0; i < paramKeys.length; i++) {
    					function.getImportParameterList().setValue(paramKeys[i],
    							"null".equals(paramValues[i]) ? "" : paramValues[i]);
    				}
    			}
    			function.execute(jCoDestination);//提交
    

    设置exporting参数,获取结果

    Integer retCode=function.getExportParameterList().getInt("RET_CODE");

    设置table参数

    Table参数作为export parameter

    JCo中,与表参数相关的两个接口是JCoTable和JCoRecordMetaDta, JCoTable就是RFM中tabl参数,而JCoRecordMetaDta是JCoTable或JCoStructure的元数据。

    	//ET_LOG为table名
    	JCoTable jcoTable=function.getTableParameterList().getTable("表名");
    	//要点说明:对JCoTable,输出表头和行项目。
    	//表头通过获取JCoTable的JCoRecordMetaData,然后使用JCoRecordMetaData的getName()方法
    	 JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData();
    	 for(int i = 0; i < tableMeta.getFieldCount(); i++){
    	      System.out.print(String.format("%s\t", tableMeta.getName(i)));
    	 }
    	System.out.println(); // new line
    	//获取表体
    	//JCoTable每一行都是一个JCoStructure,可以通过setRow()设置指针的位置,然后再遍历各个field:
    	for(int i = 0; i < jcoTable.getNumRows(); i++){
           // Sets the row pointer to the specified position(beginning from zero)
           jcoTable.setRow(i);//每次一张表
    
           // Each line is of type JCoStructure
           for(JCoField fld : jcoTable){
              System.out.println(String.format("%s\t%s",fld.getName(),fld.getString()));
           }
           System.out.println();
        }
    

    Table参数作为import parameter

    table作为输入参数,主要解决填充table的问题,基本模式如下:
    someTable.appendRow();
    someTable.setValue("FLDNAME", someValue);
    以RFC_READ_TABLE为例,读取表.

        /**
         * Shows how to process JCoTable (as importing)
         */
        JCoFunction fm = dest.getRepository().getFunction("RFC_READ_TABLE");
    
        // table we want to query is USR04
        // which is user authorization table in SAP
        fm.getImportParameterList().setValue("QUERY_TABLE", "USR04");
    
        // output data will be delimited by comma
        fm.getImportParameterList().setValue("DELIMITER", ",");
    
        // processing table parameters
        JCoTable options = fm.getTableParameterList().getTable("OPTIONS");
        // modification date >= 2012.01.01 and <= 2015.12.31
        options.appendRow();
        options.setValue("TEXT", "MODDA GE '20120101' ");
        options.appendRow();
        options.setValue("TEXT", "AND MODDA LE '20151231' ");
    
        // We only care about fields of [user id] and [modification date]        
        String[] outputFields = new String[] {"BNAME", "MODDA"};
        JCoTable fields = fm.getTableParameterList().getTable("FIELDS");
        int count = outputFields.length;
        fields.appendRows(count);
        for (int i = 0; i < count; i++){
            fields.setRow(i);
            fields.setValue("FIELDNAME", outputFields[i]);            
        }
    
        fm.execute(dest);
    
        JCoTable data = fm.getTableParameterList().getTable("DATA");
    
        return data;
    

    在代码中我们使用了两种方法来插入table的行项目,第一种方法:

    JCoTable options = fm.getTableParameterList().getTable("OPTIONS");
    // modification date >= 2012.01.01 and <= 2015.12.31
    options.appendRow();
    options.setValue("TEXT", "MODDA GE '20120101' ");
    options.appendRow();
    options.setValue("TEXT", "AND MODDA LE '20151231' ");
    

    第二种方法:

    String[] outputFields = new String[] {"BNAME", "MODDA"};
    JCoTable fields = fm.getTableParameterList().getTable("FIELDS");
    int count = outputFields.length;
    fields.appendRows(count);
    for (int i = 0; i < count; i++){
        fields.setRow(i);
        fields.setValue("FIELDNAME", outputFields[i]);
    }
    

    JCoTable重要方法总结

    sapjco3 开发与部署环境设置(以下没验证,网上资料)

    链接

    windows 环境设置

    1. sapjco3.dll 需要与 sapjco3.jar 在同一目录
    2. 设置系统环境变量,将sapjco3所在目录加入系统环境变量
    3. 根据自己的操作系统版本选择对应的sapjco3包
    

    32位系统

    例如:
    新建环境变量
    变量名: JAVA_SAPJCO
    变量值: E:\sapjco3\sapjco3-win32
    将新建的 JAVA_SAPJCO 环境变量加入 系统环境变量 Path变量集合中.
    %JAVA_SAPJCO%\sapjco3.jar

    项目部署运行

    32位系统 
     将 sapjco3.dll 加入到c:/windows/system32/目录 或者 将 sapjco3.dll 加入到 JDK/bin 目录下
    64位系统
     将 sapjco3.dll 加入到c:/windows/SysWOW64/目录 或者 将 sapjco3.dll 加入到 JDK/bin 目录下
    

    部署异常问题

    1.问题
    异常信息 Can’t load IA 64-bit .dll on a AMD 64-bit platform
    项目编译及运行,根据自己的操作系统版本选择对应的sapjco3包
    2.问题
    报错 java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path ,
    是因为没有找到 sapjco3.dll这个库的路径,安装了JDK的环境中,这个库默认的位置不是在system32下,而是在 JDK/JRE/BIN下面。

    sapjco3 开发环境设置

    1.开发中需要将sapjco3.jar加入到项目的build path中
    2.或者将其加入 本地 maven 库

    mvn install:install-file -DgroupId=org.hibersap -DartifactId=sapjco3 -Dversion=3.0 -Dpackaging=jar -Dfile=E:/sapjco3/sapjco3-win32/sapjco3.jar
    

    用以替换 org.hibersap 加载项下载的文件

    <dependency>
        <groupId>org.hibersap</groupId>
        <artifactId>sapjco3</artifactId>
        <version>3.0</version>
    </dependency>
    

    Linux环境设置

    Linux java 环境设置

    1.创建目录

    mkdir /usr/java
    

    2.把下载的rpm文件copy过去

    cp jdk-8u161-linux-x64.rpm /usr/java/
    

    3.进入目录

    cd /usr/java
    

    4.添加可执行权限

    chmod +x jdk-8u161-linux-x64.rpm
    

    5.执行rpm命令安装

    rpm -ivh jdk-8u161-linux-x64.rpm
    

    6.查看是否安装成功

    java -version
    

    Linux sapjco3 环境设置

    1.解压 sapjco3-linux64 或 sapjco3-linuxintel-3.0.5 当前生产环境 centos_X64_32 系统使用的是 sapjco3-linux64
    2.将sapjco3.jar 文件复制至 $JAVA_HOME/lib/sapjco3.jar
    3.将 libsapjco3.so 文件复制至 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so
    4.设置环境变量

        vim /etc/profile //修改文件
    
    	JAVA_HOME=/usr/local/java
    	PATH=$PATH:$JAVA_HOME/bin
    	CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/sapjco3.jar
    	JRE_HOME=$JAVA_HOME/jre
    	LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/amd64/server
    	export JAVA_HOME LD_LIBRARY_PATH PATH
    

    5.刷新配置
    source /etc/profile
    6.配置本地 hosts 将主机名字映射到IP地址
    1.控制台执行 hostname 命令查看计算机名
    2.控制台执行 hostname -i 查看本机IP
    3.编辑hosts文件 vi /etc/hosts
    4.在 /etc/hosts中 加入
    192.168.1.10(本机IP) localhost hostname(计算机名)

    建立 Jco Serever 监听服务时相关设置windows jco 监听设置

    进入 %SystemRoot%\System32\drivers\etc
    1.修改 services文件,在services文件尾部 将  jco.server.gwserv:sapgw00 属性值 sapgw00 加入 SAP 端口映射
    	  sapdp00  3200/tcp #SAP Server
    	  sapgw00  3300/tcp #SAP Gateway
    2.修改 hosts文件,在 hosts中 将 jco.server.gwhost:gmdev01  属性值  gmdev01 加入 SAP服务器IP 地址映射
      10.86.95.121       gmdev01
    3.具体示例
           参考项目目录内的 services/hosts 文件
    

    linux jco 监听设置

     1.执行  vi /etc/hosts
              修改 hosts文件,在 hosts中 将 jco.server.gwhost:gmdev01  属性值  gmdev01 加入 SAP服务器IP 地址映射
       10.86.95.121       gmdev01
     2.执行 vi /etc/services
              修改 services文件,在services文件尾部 将  jco.server.gwserv:sapgw00 属性值 sapgw00 加入 SAP 端口映射
       sapdp00  3200/tcp #SAP Server
       sapgw00  3300/tcp #SAP Gateway
    

    linux 下运行

    运行
    nohup java -jar test.jar >test.txt &
    nohup java -XX:-UseGCOverheadLimit -jar test.jar >SYNC_$(date +%Y%m%d%H%M%S).txt &
    查找进程
    ps -aux|grep test
    结束进程
    kill -s 9 “pid”

    SAP

    JCo3.0是Java语言与ABAP语言双向通讯的中间件。与之前1.0/2.0相比,是重新设计的产品。API和架构设计与NCo3.0比较类似,前面也说过,NCo3.0的设计参考了JCo3.0。从本篇开始,系统介绍JCo3.0编程的技术要点。

    JCo3.0 安装

    下载JCo3.0,注意下载的时候根据操作系统和JVM版本(32位还是64)选择不同的版本。安装就是解压,将文件解压到目标文件夹。以Windows系统为例,主要的文件包括:

    sapjco3.dll
    sapjco3.jar

    SAP强烈推荐将这两个文件放在同一文件夹下。
    测试安装是否成功,可以在命令窗口下,进入安装文件夹,运行下面的命令:
    java -jar sapjco3.jar

    JCoDestination

    JCoDestination代表后台SAP系统,程序员不用关心与SAP的连接,jco3.0运行时环境负责管理连接和释放连接。我们先以一个简单的例子看看jco3.0 JCoDestination类的一些要点。

    我使用的编程环境是Eclipse,环境准备如下:

    1. 新建一个spring boot项目,项目名为JCo3Demo。

    2. 将sapjco3.jar加入到项目的resources下lib(新建)中。注意前面所说的sapjco3.jar和sapjco3.dll(不需要build path)要放在同一个文件夹下。

    3. 创建实体类SapConn用来存储对接的SAP系统的连接参数,代码如下:

       // SAP服务器
       private String JCO_ASHOST;
       // SAP系统编号
       private String JCO_SYSNR;
       // SAP集团
       private String JCO_CLIENT;
       // SAP用户名
       private String JCO_USER;
       // SAP密码
       private String JCO_PASSWD;
       // SAP登录语言
       private String JCO_LANG;
       // 最大连接数
       private String JCO_POOL_CAPACITY;
       // 最大连接线程
       private String JCO_PEAK_LIMIT;
       // SAP ROUTER
       private String JCO_SAPROUTER;
      
       public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,
                      String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,
                      String JCO_SAPROUTER) {
           this.JCO_ASHOST = JCO_ASHOST;
           this.JCO_SYSNR = JCO_SYSNR;
           this.JCO_CLIENT = JCO_CLIENT;
           this.JCO_USER = JCO_USER;
           this.JCO_PASSWD = JCO_PASSWD;
           this.JCO_LANG = JCO_LANG;
           this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
           this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
           this.JCO_SAPROUTER = JCO_SAPROUTER;
       }
      
       public SapConn() {}
      
       public String getJCO_ASHOST() {
           return JCO_ASHOST;
       }
      
       public void setJCO_ASHOST(String JCO_ASHOST) {
           this.JCO_ASHOST = JCO_ASHOST;
       }
      
       public String getJCO_SYSNR() {
           return JCO_SYSNR;
       }
      
       public void setJCO_SYSNR(String JCO_SYSNR) {
           this.JCO_SYSNR = JCO_SYSNR;
       }
      
       public String getJCO_CLIENT() {
           return JCO_CLIENT;
       }
      
       public void setJCO_CLIENT(String JCO_CLIENT) {
           this.JCO_CLIENT = JCO_CLIENT;
       }
      
       public String getJCO_USER() {
           return JCO_USER;
       }
      
       public void setJCO_USER(String JCO_USER) {
           this.JCO_USER = JCO_USER;
       }
      
       public String getJCO_PASSWD() {
           return JCO_PASSWD;
       }
      
       public void setJCO_PASSWD(String JCO_PASSWD) {
           this.JCO_PASSWD = JCO_PASSWD;
       }
      
       public String getJCO_LANG() {
           return JCO_LANG;
       }
      
       public void setJCO_LANG(String JCO_LANG) {
           this.JCO_LANG = JCO_LANG;
       }
      
       public String getJCO_POOL_CAPACITY() {
           return JCO_POOL_CAPACITY;
       }
      
       public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {
           this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
       }
      
       public String getJCO_PEAK_LIMIT() {
           return JCO_PEAK_LIMIT;
       }
      
       public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {
           this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
       }
      
       public String getJCO_SAPROUTER() {
           return JCO_SAPROUTER;
       }
      
       public void setJCO_SAPROUTER(String JCO_SAPROUTER) {
           this.JCO_SAPROUTER = JCO_SAPROUTER;
       }
      
       @Override
       public String toString() {
           return "SapConn{" +
                   "JCO_ASHOST='" + JCO_ASHOST + '\'' +
                   ", JCO_SYSNR='" + JCO_SYSNR + '\'' +
                   ", JCO_CLIENT='" + JCO_CLIENT + '\'' +
                   ", JCO_USER='" + JCO_USER + '\'' +
                   ", JCO_PASSWD='" + JCO_PASSWD + '\'' +
                   ", JCO_LANG='" + JCO_LANG + '\'' +
                   ", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +
                   ", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +
                   ", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +
                   '}';
       }
      
    4. 获取 JCoDestination 的工具类,通过new SAPConnUtils().jCoDestination创建链接并获取JCoDestination类,并且项目根目录下会生成配置文件ABAP_AS_WITH_POOL.jcoDestination

      private static final String ABAP_AS_POOLED = “ABAP_AS_WITH_POOL”;
      public JCoDestination jCoDestination;

      public SAPConnUtils(){
      SapConn con = new SapConn(
      “xxxxx”,
      “00”,
      “300”,
      “xxx”,
      “xxxxx”,
      “zh”,
      “30”,
      “150”,
      “xxxxxxxxx”
      );
      jCoDestination = connect(con);
      }

      /**

      • 创建SAP接口属性文件。
      • @param name ABAP管道名称
      • @param suffix 属性文件后缀
      • @param properties 属性文件内容
        */
        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连接
        */

      private static void initProperties(SapConn sapConn) {
      Properties connectProperties = new Properties();
      // SAP服务器
      connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sapConn.getJCO_ASHOST());
      // SAP系统编号
      connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sapConn.getJCO_SYSNR());
      // SAP集团
      connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sapConn.getJCO_CLIENT());
      // SAP用户名
      connectProperties.setProperty(DestinationDataProvider.JCO_USER, sapConn.getJCO_USER());
      // SAP密码
      connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sapConn.getJCO_PASSWD());
      // SAP登录语言
      connectProperties.setProperty(DestinationDataProvider.JCO_LANG, sapConn.getJCO_LANG());
      // 最大连接数
      connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());
      // 最大连接线程
      connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());
      // SAP ROUTER
      connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER());

       createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
      

      }

      /**

      • 获取SAP连接
      • @return SAP连接对象
        */
        public static JCoDestination connect(SapConn sapConn){
        System.out.println(“正在连接至SAP…”);
        JCoDestination destination = null;
        initProperties(sapConn);
        try {
        destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
        destination.ping();
        System.out.println(“已成功建立sap的连接”);
        } catch (JCoException e) {
        System.out.println("Connect SAP fault, error msg: " + e.toString());
        }
        return destination;
        }

    }

    JCo3.0调用SAP函数的过程

    大致可以总结为以下步骤:

    • 连接至SAP系统(参考上面3和4步骤)
    • 创建JcoFunction接口的实例(这个实例代表SAP系统中相关函数)
    • 设置importing参数
    • 调用函数
    • 从exporting参数或者table参数获取数据

    JCoFunction接口说明

    • JCoFunction是一个接口,代表SAP系统的函数

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

    • JCoFunction.execute方法实际执行函数

    如何创建JCoFunction对象

    • 上面的代码是第一种创建JCoFunction实例的方法,BAPI_COMPANYCODE_GETDETAIL为调用函数名:
     JCoRepository repository = dest.getRepository();    
     JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
    
    • 如果我们不关心JCoRepository,也可以这样写:
     JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
    
    • 第三种方法是使用JCoFunctionTemplate.getFunction方法,JCoFunctionTemplate也是一个接口,代表SAP函数的meta-data。
      JCoFunctionTemplate fmTemplate= dest.getRepository().getFunctionTemplate("BAPI_COMPANYCODE_GETDETAIL");
     JCoFunction fm = fmTemplate.getFunction();
    

    设置importing参数

    			//调用function函数
    			function = jCoDestination.getRepository().getFunction("调用函数名");
    			//ParamKey为的参数名,以逗号隔开,ParamValue为参数名对应的参数值,
    			if("".equals(ParamKey) || "".equals(ParamValue)) {
    				// 不需要参数
    			}else{
    				String[] paramKeys = ParamKey.split(",");
    				String[] paramValues = ParamValue.split(",");
    				for (int i = 0; i < paramKeys.length; i++) {
    					function.getImportParameterList().setValue(paramKeys[i],
    							"null".equals(paramValues[i]) ? "" : paramValues[i]);
    				}
    			}
    			function.execute(jCoDestination);//提交
    

    设置exporting参数,获取结果

    Integer retCode=function.getExportParameterList().getInt("RET_CODE");

    设置table参数

    Table参数作为export parameter

    JCo中,与表参数相关的两个接口是JCoTable和JCoRecordMetaDta, JCoTable就是RFM中tabl参数,而JCoRecordMetaDta是JCoTable或JCoStructure的元数据。
    //ET_LOG为table名
    JCoTable jcoTable=function.getTableParameterList().getTable(“表名”);
    //要点说明:对JCoTable,输出表头和行项目。
    //表头通过获取JCoTable的JCoRecordMetaData,然后使用JCoRecordMetaData的getName()方法
    JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData();
    for(int i = 0; i < tableMeta.getFieldCount(); i++){
    System.out.print(String.format("%s\t", tableMeta.getName(i)));
    }
    System.out.println(); // new line
    //获取表体
    //JCoTable每一行都是一个JCoStructure,可以通过setRow()设置指针的位置,然后再遍历各个field:
    for(int i = 0; i < jcoTable.getNumRows(); i++){
    // Sets the row pointer to the specified position(beginning from zero)
    jcoTable.setRow(i);//每次一张表

               // Each line is of type JCoStructure
               for(JCoField fld : jcoTable){
                  System.out.println(String.format("%s\t%s",fld.getName(),fld.getString()));
               }
               System.out.println();
            }
    

    Table参数作为import parameter

    table作为输入参数,主要解决填充table的问题,基本模式如下:
    someTable.appendRow();
    someTable.setValue("FLDNAME", someValue);
    以RFC_READ_TABLE为例,读取表.
    /**
    * Shows how to process JCoTable (as importing)
    */
    JCoFunction fm = dest.getRepository().getFunction(“RFC_READ_TABLE”);

        // table we want to query is USR04
        // which is user authorization table in SAP
        fm.getImportParameterList().setValue("QUERY_TABLE", "USR04");
    
        // output data will be delimited by comma
        fm.getImportParameterList().setValue("DELIMITER", ",");
    
        // processing table parameters
        JCoTable options = fm.getTableParameterList().getTable("OPTIONS");
        // modification date >= 2012.01.01 and <= 2015.12.31
        options.appendRow();
        options.setValue("TEXT", "MODDA GE '20120101' ");
        options.appendRow();
        options.setValue("TEXT", "AND MODDA LE '20151231' ");
    
        // We only care about fields of [user id] and [modification date]        
        String[] outputFields = new String[] {"BNAME", "MODDA"};
        JCoTable fields = fm.getTableParameterList().getTable("FIELDS");
        int count = outputFields.length;
        fields.appendRows(count);
        for (int i = 0; i < count; i++){
            fields.setRow(i);
            fields.setValue("FIELDNAME", outputFields[i]);            
        }
    
        fm.execute(dest);
    
        JCoTable data = fm.getTableParameterList().getTable("DATA");
    
        return data;
    在代码中我们使用了两种方法来插入table的行项目,第一种方法:
    
    JCoTable options = fm.getTableParameterList().getTable("OPTIONS");
    // modification date >= 2012.01.01 and <= 2015.12.31
    options.appendRow();
    options.setValue("TEXT", "MODDA GE '20120101' ");
    options.appendRow();
    options.setValue("TEXT", "AND MODDA LE '20151231' ");
    

    第二种方法:

    String[] outputFields = new String[] {"BNAME", "MODDA"};
    JCoTable fields = fm.getTableParameterList().getTable("FIELDS");
    int count = outputFields.length;
    fields.appendRows(count);
    for (int i = 0; i < count; i++){
        fields.setRow(i);
        fields.setValue("FIELDNAME", outputFields[i]);
    }
    

    JCoTable重要方法总结

    sapjco3 开发与部署环境设置(以下没验证,网上资料)

    链接

    windows 环境设置

    1. sapjco3.dll 需要与 sapjco3.jar 在同一目录
    2. 设置系统环境变量,将sapjco3所在目录加入系统环境变量
    3. 根据自己的操作系统版本选择对应的sapjco3包
    

    32位系统

    例如:
    新建环境变量
    变量名: JAVA_SAPJCO
    变量值: E:\sapjco3\sapjco3-win32
    将新建的 JAVA_SAPJCO 环境变量加入 系统环境变量 Path变量集合中.
    %JAVA_SAPJCO%\sapjco3.jar

    项目部署运行

    32位系统 
     将 sapjco3.dll 加入到c:/windows/system32/目录 或者 将 sapjco3.dll 加入到 JDK/bin 目录下
    64位系统
     将 sapjco3.dll 加入到c:/windows/SysWOW64/目录 或者 将 sapjco3.dll 加入到 JDK/bin 目录下
    

    部署异常问题

    1.问题
    异常信息 Can’t load IA 64-bit .dll on a AMD 64-bit platform
    项目编译及运行,根据自己的操作系统版本选择对应的sapjco3包
    2.问题
    报错 java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path ,
    是因为没有找到 sapjco3.dll这个库的路径,安装了JDK的环境中,这个库默认的位置不是在system32下,而是在 JDK/JRE/BIN下面。

    sapjco3 开发环境设置

    1.开发中需要将sapjco3.jar加入到项目的build path中
    2.或者将其加入 本地 maven 库

    mvn install:install-file -DgroupId=org.hibersap -DartifactId=sapjco3 -Dversion=3.0 -Dpackaging=jar -Dfile=E:/sapjco3/sapjco3-win32/sapjco3.jar
    

    用以替换 org.hibersap 加载项下载的文件

    <dependency>
        <groupId>org.hibersap</groupId>
        <artifactId>sapjco3</artifactId>
        <version>3.0</version>
    </dependency>
    

    Linux环境设置

    Linux java 环境设置

    1.创建目录

    mkdir /usr/java
    

    2.把下载的rpm文件copy过去

    cp jdk-8u161-linux-x64.rpm /usr/java/
    

    3.进入目录

    cd /usr/java
    

    4.添加可执行权限

    chmod +x jdk-8u161-linux-x64.rpm
    

    5.执行rpm命令安装

    rpm -ivh jdk-8u161-linux-x64.rpm
    

    6.查看是否安装成功

    java -version
    

    Linux sapjco3 环境设置

    1.解压 sapjco3-linux64 或 sapjco3-linuxintel-3.0.5 当前生产环境 centos_X64_32 系统使用的是 sapjco3-linux64
    2.将sapjco3.jar 文件复制至 $JAVA_HOME/lib/sapjco3.jar
    3.将 libsapjco3.so 文件复制至 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so
    4.设置环境变量

        vim /etc/profile //修改文件
    
    	JAVA_HOME=/usr/local/java
    	PATH=$PATH:$JAVA_HOME/bin
    	CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/sapjco3.jar
    	JRE_HOME=$JAVA_HOME/jre
    	LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/amd64/server
    	export JAVA_HOME LD_LIBRARY_PATH PATH
    

    5.刷新配置
    source /etc/profile
    6.配置本地 hosts 将主机名字映射到IP地址
    1.控制台执行 hostname 命令查看计算机名
    2.控制台执行 hostname -i 查看本机IP
    3.编辑hosts文件 vi /etc/hosts
    4.在 /etc/hosts中 加入
    192.168.1.10(本机IP) localhost hostname(计算机名)

    建立 Jco Serever 监听服务时相关设置windows jco 监听设置

    进入 %SystemRoot%\System32\drivers\etc
    1.修改 services文件,在services文件尾部 将  jco.server.gwserv:sapgw00 属性值 sapgw00 加入 SAP 端口映射
    	  sapdp00  3200/tcp #SAP Server
    	  sapgw00  3300/tcp #SAP Gateway
    2.修改 hosts文件,在 hosts中 将 jco.server.gwhost:gmdev01  属性值  gmdev01 加入 SAP服务器IP 地址映射
      10.86.95.121       gmdev01
    3.具体示例
           参考项目目录内的 services/hosts 文件
    

    linux jco 监听设置

     1.执行  vi /etc/hosts
              修改 hosts文件,在 hosts中 将 jco.server.gwhost:gmdev01  属性值  gmdev01 加入 SAP服务器IP 地址映射
       10.86.95.121       gmdev01
     2.执行 vi /etc/services
              修改 services文件,在services文件尾部 将  jco.server.gwserv:sapgw00 属性值 sapgw00 加入 SAP 端口映射
       sapdp00  3200/tcp #SAP Server
       sapgw00  3300/tcp #SAP Gateway
    

    linux 下运行

    运行
    nohup java -jar test.jar >test.txt &
    nohup java -XX:-UseGCOverheadLimit -jar test.jar >SYNC_$(date +%Y%m%d%H%M%S).txt &
    查找进程
    ps -aux|grep test
    结束进程
    kill -s 9 “pid”

    展开全文
  • SAP Java Connector 3.0 操作手册(英文)
  • SAP-JAVA操作手册

    千次阅读 2008-09-03 13:06:00
    SAP-JAVA;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">操作手册<span lang="EN-US" sty

                                      SAP-JAVA操作手册

    SAP Java Connector(JCo)

    JCo是一个高性能的,基于JNI的中间件,它实现了SAPRFCRemote Function Call)协议,JCoJava Connector的简称,实现了基于RFCBAPIJAVA接口。通常用于BAPI的外部调用,RFC_enabled FM也可以调用,但一般不常用。

    1JCo的安装
    http://service.sap.com/connectors下载JCo,解压后将librfc32.dllsapjcorfc.dll拷贝到WINNT/SYSTEM32下,将sapjco.jar加入项目的classpath中。

                 

    2、与SAP的连接
    ⑴、JCo支持两种连接方式,direct connectionsconnection pools
     
    direct connections
       import com.sap.mw.jco.*

        public TutorialConnect1() {
        JCO.Client mConnection;
        try {
            mConnection = JCO.createClient("001", // SAP client
                                            "", // userid
                                       "****", // password
                                          null, // language
                                           "", // server host name
                                        "00"); // system number mConnection.connect();
           mConnection.connect();
        } catch (Exception ex) {
       }
       }

    connection pools
        static final String POOL_NAME = "Pool";
        public TutorialConnect2() {
          JCO.Client mConnection;
          try {
               JCO.Pool pool = JCO.getClientPoolManager().getPool(POOL_NAME);
               if (pool == null) {
               OrderedProperties properties = OrderedProperties.load("/logon.properties");
               JCO.addClientPool(POOL_NAME, // pool name
                                          5, // maximum number of connections
                            logonProperties); // properties
               }
              mConnection = JCO.getClient(POOL_NAME);
            } catch (Exception ex) {
            } finally { //
    返回连接到连接池,否则会导致无可用连接
            JCO.releaseClient(mConnection);
       }
       }

    logon.properties文件的定义:
       jco.client.client=001
       jco.client.user=userid
       jco.client.passwd=****
       jco.client.ashost=hostname
       jco.client.sysnr=00

    3、对SAP进行操作

     
    SAP中有JCO.Repository对象,包含着SAPRFM的运行环境元数据。
         JCO.Repository mRepository;
         mRepository = new JCO.Repository("ARAsoft", mConnection);
     
    构造器中包含两个参数,第一个是一个任意名称,第二个是连接池或JCO.Client对象。
        IFunctionTemplate
    对象包含着某个特定的RFM元数据,JCO.Function则代表着一个包含所有参数的      RFM。它们之间的关系类似JavaClassObject的关系。
        IFunctionTemplate ft = mRepository.getFunctionTemplate("BAPI_SALESORDER_GETLIST");
       //ft
    为空表示没有在SAP发现对应的RFM
       if (ft == null) return null;
       JCO.Function function = ft.getFunction();
       JCO.ParameterList
    对象包含做Function的输入、输出和表参数。
       client = JCO.getClient(SID); //
    Pool中取得Client
       JCO.ParameterList input = function.getImportParameterList();
       //
    设置参数,参数名为第二个参数,参数值为第一个参数,
       input.setValue("0000001200", "CUSTOMER_NUMBER" );
       input.setValue( "170", "SALES_ORGANIZATION");
       client.execute(function);


    展开全文
  • Java連接sap的包

    2020-08-08 08:50:29
    java連接sap的文件,32位64位都有,附有操作說明 java連接sap的文件,32位64位都有,附有操作說明 java連接sap的文件,32位64位都有,附有操作說明
  • 原理:SAP通过发布WEBService,java代码去调用,从而控制sap操作。这一方案可以将sap的业务拿到web或者Android中去。首先SAP发布Webservice这时我们可以看到sap webservice的wsdl文档。注意,我们使用SOAMANAGER...
  • (二)通过JAVA调用SAP接口 (增加一二级参数) 一、建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二、测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三、源码编写及...
  • @SAP仓库移动操作 采购入库migo 01 101 调拨入库MB1B 04 311 领料出库 MB1A 03 261 MD04 CO03 工单退料 03 261 加入XSTOB = ‘X’ 使用冲销移动类型标识符 查看库存 MMBE MB51 查询凭证 MB03 GM_CODE GM_Code 01: ...
  • Java连接SAP ————JCO 3.0技术详解

    千次阅读 2019-04-08 20:06:36
    SAP的ERP平台很强大,这是毋庸置疑的,它被运用于个个行业领域,也正因如此,所以公司上线SAP后,总需要花费很多时间去培养用户,有时候,在SAP上,用户的操作需求很简单,但在SAP平台上,却不得不进行许多复杂的...
  • JAVASAP RFC连接

    千次阅读 2009-12-17 22:14:00
    操作步骤: 1.项目名上右击-->new -->web service client 2.Enter a uri to a wsdl 输入网址:http://服务器地址:8000/sap/bc/soap/wsdl/?services=RFC名称 示例代码: //RFC名称 = Z_RFC_GETLIST Z_RFC_...
  • 中文教程 Web编程学习六:使用Apache olingo将JPA数据库操作转化为RESTful Web Service http://blog.csdn.net/starshus/article/details/22709923中文教程 Web编程学习三: 使用SAPUI5来创建Web应用UI ...
  • Linux下Java如何连SAP

    千次阅读 2009-10-20 10:45:00
    本文档测试环境:1)Linux操作系统版本: Red Hat Enterprise Linux Server release 5 2.6.18-8.el52)jdk版本 1.5.0_16 Linux下连Javasap步骤1)下载sapjco.jar 请到service.sap.com/connectors,下载s
  • 今天是鼠年正月十二。这是Jerry鼠年的第11篇文章,也是汪子熙...除了编程语言之外,SAP新发布的SAP Intelligent Robotic Process Automation(简称SAP iRPA),提供了强大的企业级自动化流程解决方案,善加利用,...
  • 默认的连接下,中文字符显示是小方块,而操作系统本生的配置以及SAP服务器端的都没有问题,怎么调都没有效果。问题的本质是需要让java的JVM能识别中文字体,需要给JVM安装中文字体。1、copy windows下的fonts目录下...
  • 本文假设您对JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客:ADBC and JDBC这篇文章分为... 开发一个Java应用,部署到SAP云平台上。...
  • 本文假设您对JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客ADBC and JDBC ...开发一个Java应用,部署到SAP云平台上。该J...
  • 本资料简要的讲述了java怎样通过jco连接sap,怎样存取数据等,内含基本操作的一些常用例子,是入门的好资料!
  • java 通过JCO 连接SAP 求jar包跟操作步骤 求大神 ! java 通过JCO 连接SAP 求jar包跟操作步骤 求大神 ! java 通过JCO 连接SAP 求jar包跟操作步骤 求大神 !
  • J代码调用操作SAP创建

    2018-10-29 15:37:13
    首先在我们自己的maven项目中,提供一个属性配置文件如下图所示,提供SAP足够权限用户的用户名密码等信息然后测试java代码TestNG代码如下 package com.tsmi.hibernate.utils; import org.testng.annotations.Test; ...
  • JAVA使用JCO实现调用SAP接口方法

    千次阅读 2019-04-08 20:21:35
    1.根据操作系统将sapjco3.dll文件放入C:\Windows\System32目录; 2.在项目中引入sapjco3.jar包; 3.创建DisplaySalesActivity.java类,配置生成连接 public class DisplaySalesActivity { static String ...
  • JAVA+FLEX与SAP RFC连接

    2009-12-17 22:14:00
    FLEX炫界面,JAVA做后台服务类,读取操作SAP的数据.用BlazeDs做JAVA+FLEX的通信配置.JAVA:在proxy-config.xml中做如下配置: class="flex.messaging.services.HTTPProxyService"> 100 2 
  • 我用java web 开发了一个成品库库位管理系统 用条码扫描入库 但sap系统得继续使用 就是说得开两个窗口 只扫描一次两个系统在文本框中都要有值 才不会出现两次重复 操作扫描,请各位大神帮忙

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

java操作sap

java 订阅