JAVA連接SAP


1.首先需要在SAP事務碼SE37中新建一個可以被遠程調用的RFC

事務碼:SE37

新建一個函數組:輸入事務碼SE37回車后,來到函數構建器屏幕,到上面一排菜單欄:轉到 -> 函數組 -> 創建組

 

輸入描述信息,方便以后使用,以后功能相似的函數都可以放到該函數組下

 

 函數組創建完畢后,回到SE37初始界面,創建函數,鍵入函數名后,點擊創建按鈕

在屬性頁簽下,輸入函數的描述,將遠程啟用的模塊選上

 

 

在導入導出參數頁簽下設置輸入輸出參數(遠程調用模塊的注入,輸出),要注意參考類型,可選性和傳遞值

 

 

在源代碼中

 1 FUNCTION zchenh001.
 2 *"----------------------------------------------------------------------
 3 *"*"局部接口:
 4 *"  IMPORTING
 5 *"     VALUE(P1) TYPE  INT4 DEFAULT 0
 6 *"     VALUE(P2) TYPE  INT4 DEFAULT 0
 7 *"     VALUE(OPERATOR) TYPE  CHAR1 DEFAULT '+'
 8 *"  EXPORTING
 9 *"     VALUE(RESULT) TYPE  INT4
10 *"     VALUE(MSG) TYPE  CHAR255
11 *"----------------------------------------------------------------------
12   DATA:err_text TYPE string,
13        e TYPE REF TO cx_root.
14   TRY .
15     CASE operator.
16       WHEN '+'.       result = p1 + p2.
17       WHEN '-'.       result = p1 - p2.
18       WHEN '*'.       result = p1 * p2.
19       WHEN '/'.       result = p1 / p2.
20       WHEN OTHERS.
21         CONCATENATE '操作符' operator ',SAP無法識別' into msg.
22     ENDCASE.
23     CATCH cx_root INTO e.
24       err_text = e->get_text( ).
25       msg = err_text.
26 
27   ENDTRY.
28 
29 ENDFUNCTION.

 在SAP中測試如下:

測試一:

 測試二:

 

測試三:

測試四:

 

 接下來需要下載連接SAP的驅動sapjco3.jar包,

本處提供下載:sapjco3.jar

  解壓密碼:1187163927

激活后可以在SAP內部測試 ,至此SAP部分已完成

 

2在eclipse(myeclipse)新建的項目中將sapjco3.jar導入,記得build path.

  打開該項目樹狀圖,將下載好的sapjco3.jar直接拖到該項目中,然后鼠標左鍵選中該文件,右鍵Build Path即可。

 2.1 配置與SAP系統的連接(此處最好在SAP系統中新建一個RFC用戶)

 1 package com.cee.conn;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.util.Properties;
 6 import java.util.logging.Logger;
 7 
 8 import com.sap.conn.jco.JCoDestination;
 9 import com.sap.conn.jco.JCoDestinationManager;
10 import com.sap.conn.jco.JCoException;
11 import com.sap.conn.jco.ext.DestinationDataProvider;
12 
13 /**
14  * 與SAP連接配置
15  * 
16  * @author jay
17  */
18 public class SAPConn {
19     private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
20     static {
21         Properties connectProperties = new Properties();
22         connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx.xxxx");// 服務器
23         connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系統編號
24         connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集團
25         connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxxx"); // SAP用戶名
26         connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxxx"); // 密碼
27         connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登錄語言:ZH EN
28         connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大連接數
29         connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大連接線程
30 
31         createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
32     }
33 
34     /**
35      * 創建SAP接口屬性文件。
36      * 
37      * @param name
38      *            ABAP管道名稱
39      * @param suffix
40      *            屬性文件后綴
41      * @param properties
42      *            屬性文件內容
43      */
44     private static void createDataFile(String name, String suffix, Properties properties) {
45         File cfg = new File(name + "." + suffix);
46         if (cfg.exists()) {
47             cfg.deleteOnExit();
48         }
49         try {
50             FileOutputStream fos = new FileOutputStream(cfg, false);
51             properties.store(fos, "for tests only !");
52             fos.close();
53         } catch (Exception e) {
54             System.out.println("Create Data file fault, error msg: " + e.toString());
55             throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
56         }
57     }
58 
59     /*
60      * * 獲取SAP連接
61      * 
62      * @return SAP連接對象
63      */
64     public static JCoDestination connect() {
65         JCoDestination destination = null;
66         try {
67             destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
68         } catch (JCoException e) {
69             System.out.println("Connect SAP fault, error msg: " + e.toString());
70         }
71         return destination;
72     }
73 }

2.2 在java代碼中測試連接

 1 package com.cee.test;
 2 import java.io.ObjectInputStream.GetField;
 3 import com.cee.conn.SAPConn;
 4 import com.sap.conn.jco.JCoDestination;
 5 import com.sap.conn.jco.JCoFunction;
 6 import com.sap.conn.jco.JCoParameterList;
 7 import com.sap.conn.jco.JCoTable;
 8 
 9 public class CheckSnFromSAP {
10     public static void main(String[] args) {
11         JCoFunction function = null;
12         JCoDestination destination = SAPConn.connect();
13         int result=0;//調用接口返回狀態
14         String message="";//調用接口返回信息
15         try {
16             //調用ZCHENH001函數
17             function = destination.getRepository().getFunction("ZCHENH001");
18             JCoParameterList input = function.getImportParameterList();
19             input.setValue("P1", 10); 20             input.setValue("P2", 2); 21             input.setValue("OPERATOR", "?"); // 輸入參數 22             function.execute(destination);
23             result= function.getExportParameterList().getInt("RESULT");//調用接口返回結果
24             message= function.getExportParameterList().getString("MSG");//調用接口返回信息 
25             System.out.println("調用返回結果--->"+result+";調用返回狀態--->"+message);
26         }catch (Exception e) {
27             e.printStackTrace();
28         }
29     }
30 }

運行結果如下:

測試一: 注入參數分別為:10,2,?

    

測試二: 注入參數分別為:10,2,/

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM