SAP接口

1.此处不涉及到sap端的开发,sap端接口写好了,只是通过JAVA直接调用接口名 2.sapjco3.jar,sapjco3.dll和sapjcorfc.dll要放在容器的lib下面,而不是项目的   WEB-INF\lib,例如tomcat,D:\Pro...

1.此处不涉及到sap端的开发,sap端接口写好了,只是通过JAVA直接调用接口名
2.sapjco3.jar
sapjco3.dllsapjcorfc.dll要放在容器的lib下面,而不是项目的   WEB-INF\lib,例如tomcatD:\Program Files\Tomcat 6.0\lib,就是你tomcat安装路径下。


1.原因见 http://www.iteye.com/problems/96263


本文章中两个例子:1.读取SAP系统中的借款余额;2.生成SAP会计凭证
1.下载下面的jardll,放到容器的lib中;接着通过代码实现与sap连接sapjco.jar、sapjco3.jar、sapjco3.dll

 

SAPConn.javaJAVAsap连接代码


Java代码:


package rising.sap;

import java.io.File;

import java.io.FileOutputStream;

import java.util.Properties;

import org.apache.log4j.Logger;

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoDestinationManager;

import com.sap.conn.jco.JCoException;

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

/**
* SAP连接配置

* @author wy

*/

public class SAPConn {

private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
  static{

Properties connectProperties = new Properties();

    connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.17.8");        //服务器

 connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");        //系统编号

 connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "120");       //SAP集团

    connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "OASERVICE");  //SAP用户名

    connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "oatest");     //密码

    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);

}

/**

 * 创建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){

              log.error("Create Data file fault, error msg: " + e.toString());

              throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);

         }

     }

    

                /**

      * 获取SAP连接

      * @return    SAP连接对象

      */

    

     public static JCoDestination connect(){

         JCoDestination destination =null;

         try {

              destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);

         } catch (JCoException e) {

              log.error("Connect SAP fault, error msg: " + e.toString());

         }

         return destination;

     }

     private static Logger log = Logger.getLogger(SAPConn.class); // 初始化日志对象

2.sap取余额接口的文档

attachments-2017-11-9DeeWeq25a0e4b8e3fada.png    这个接口的功能是去sap中查询出个人借款余额
    ZRFC_GET_REMAIN_SUM这个为接口名;
    输入参数I_PARAMI_KUNNR...这些表示你调用该接口时传入的参数
    输出参数:
    (1)E_STATUS 数据返回状态
      S:
成功读取余额
      F:
无余额
      E:
异常
    (2)E_MESSAGE数据返回消息
     E_STATUS
返回数据为E,错误信息存放于E_MESSAGE
    (3)E_REMAIN_SUM 余额,就是你想要的余额
    
接口调用成功返回正确的余额数据
    LoadBorrowMoneyBalanceFromSAP.javaJAVA调用sap获取余额
    

Java代码

 

package rising.test;

import rising.sap.SAPConn;

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoException;

import com.sap.conn.jco.JCoFunction;

    

/**

 * sap中取得借款余额

 * @author kmd

 * 2013-06-05

 *

 */

public class LoadBorrowMoneyBalanceFromSAP {

    

/*

      * balanceType     借款类型  01:个人借款余额  02:其他应付借款余额    03:供应商的应付款余额

      * customerEmployeeNumber  客户员工编号

      * supplierCode  供应商编码

      * companyCode  公司代码(法人体)

      * accountNumber  会计科目编号

      * year  

      * month 

      */

     public static String LoadBorrowMoneyBalance(String balanceType,String customerEmployeeNumber,String supplierCode,String companyCode,String accountNumber,String year,String month){

                

                           String balance="";

         JCoFunction function = null;

         //连接sap,其实就类似于连接数据库

         JCoDestination destination = SAPConn.connect();

         try {

              //调用ZRFC_GET_REMAIN_SUM函数

              function = destination.getRepository().getFunction("ZRFC_GET_REMAIN_SUM");

              //将当前传入的值赋予各个参数

              function.getImportParameterList().setValue("I_PARAM", balanceType);

              function.getImportParameterList().setValue("I_KUNNR", customerEmployeeNumber);     

              function.getImportParameterList().setValue("I_LIFNR", supplierCode);      

              function.getImportParameterList().setValue("I_BUKRS", companyCode);       

              function.getImportParameterList().setValue("I_KOBEZ", accountNumber);

              function.getImportParameterList().setValue("I_YEAR", year);     

              function.getImportParameterList().setValue("I_MONTH", month);        

              function.execute(destination);

              //获取借款余额

              balance=function.getExportParameterList().getString("E_REMAIN_SUM");

              //获返回状态

              String state=function.getExportParameterList().getString("E_STATUS");

              //获返回信息

                                        

String message=function.getExportParameterList().getString("E_MESSAGE");

              System.out.println("调用返回状态--->"+state);

              System.out.println("调用返回信息--->"+message);

         } catch (JCoException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

         }

         return balance;

     }

}

3.sap生成凭证接口的文档

attachments-2017-11-6MdoDKiE5a0e4c224faa1.png

    

该接口表示传入为一个表的形式,参数公司代码和凭证类型封装在表T_ACCDOCUMENT
而输出来的有返回状态 ,返回消息和表T_ACCDOCUMENT,而从文档可以看出会附带得出会计凭证号和会计凭证行项目这两个参数。(为了简单方便,文档中有些参数省略了)
CreateVoucherFromSAP.java
生成SAP会计凭证

 

Java代码

package rising.test;

import rising.sap.SAPConn;

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoFunction;

import com.sap.conn.jco.JCoTable;

        

/**

 * sap中生成凭证

 * @author kmd

 * 2013-06-05

 */

public class CreateVoucherFromSAP {

     public static void main(String[] args) {

         JCoFunction function = null;

         JCoDestination destination = SAPConn.connect();

         String state="";//调用接口返回状态

         String message="";//调用接口返回信息

         String belnr="";//会计凭证号

         String buzei="";//会计凭证行项目

         try {

              //调用ZRFC_GET_REMAIN_SUM函数

              function = destination.getRepository().getFunction("ZRFC_OA_ACC_DOCUMENT");

              //获取传入表参数T_ACCDOCUMENT

              JCoTable T_ACCDOCUMENT = function.getTableParameterList().getTable("T_ACCDOCUMENT");

              T_ACCDOCUMENT.appendRow();//增加一行

              //给表参数中的字段赋值,此处测试,就随便传两个值进去

              T_ACCDOCUMENT.setValue("BUKRS", "1000");

              T_ACCDOCUMENT.setValue("BLART", "SA");

              function.execute(destination);

              state= function.getExportParameterList().getString("E_STATUS");//调用接口返回状态

                

message= function.getExportParameterList().getString("E_MESSAGE");//调用接口返回信息

              System.out.println("调用返回状态--->"+state+";调用返回信息--->"+message);

              T_ACCDOCUMENT.firstRow();//获取第一行的对象(此处看sap端如何写的,如果返回的可能有多行,那得循环)

              belnr=T_ACCDOCUMENT.getString("BELNR");

              buzei=T_ACCDOCUMENT.getString("BUZEI");

              System.out.println("会计凭证号--->"+belnr+";会计凭证行项目--->"+buzei);

              T_ACCDOCUMENT.clear();//清空本次条件,如果要继续传入值去或者还要循环,那得将之前的条件清空

         }catch (Exception e) {

              e.printStackTrace();

         }

     }

}

 


    











 




  • 发表于 2017-11-17 10:42
  • 阅读 ( 1429 )
  • 分类:Java

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
HJ社区-肖峰

IT

29 篇文章

作家榜 »

  1. 威猛的小站长 124 文章
  2. Jonny 65 文章
  3. 江南烟雨 36 文章
  4. - Nightmare 33 文章
  5. doublechina 31 文章
  6. HJ社区-肖峰 29 文章
  7. 伪摄影 22 文章
  8. Alan 14 文章