SAPService.java
package com.resunly.sap; /** * Created by IntelliJ IDEA. * User: resunly * Date: 11-12-22 * Time: 下午4:24 * To change this template use File | Settings | File Templates. */ import com.sap.mw.jco.IFunctionTemplate; import com.sap.mw.jco.JCO; import java.util.List; import java.util.Properties; abstract public class SAPService { //連接创建對象 abstract protected JCO.Client getConnection(); //释放连接对象 abstract protected void releaseConnection(JCO.Client myConnection); //连接参数 protected Properties getSAPProperties() { Properties logonProperties = new Properties(); logonProperties.put("jco.client.ashost", "10.134.99.100"); //SAP系統的IP位址 logonProperties.put("jco.client.client", "810"); //要登錄的用戶端 logonProperties.put("jco.client.sysnr", "02"); //系統編號 00 logonProperties.put("jco.client.user", "userName"); //登錄用戶名 logonProperties.put("jco.client.passwd","password"); //用戶登錄口令 return logonProperties; } public String sendDataToSAP(String mesCode,String holdFlag,List<String []> list){ String result = ""; JCO.Client myConnection = getConnection(); myConnection.connect(); //進行實際連接 try { //如果連接不為null並且處於活動狀態 if (myConnection != null && myConnection.isAlive()) { //從連接獲得一個邏輯意義上的“倉庫”物件(Repository) JCO.Repository myRepository = new JCO.Repository("Repository", //只是一個名字 myConnection); //活動的連接 //要調用的SAP函數名稱 String strFunc = "ZRFC_SD_PCE_0109"; //從“倉庫”中獲得一個指定函數名的函數範本 IFunctionTemplate ft = myRepository.getFunctionTemplate(strFunc.toUpperCase()); //從這個函數範本獲得該SAP函數的物件 JCO.Function function = ft.getFunction(); //獲得函數的import參數列表 JCO.ParameterList input = function.getImportParameterList(); //JCO.Structure sFrom = input.getStructure("DESTINATION_FROM"); input.setValue("PNK1","PLANT"); input.setValue("O","SEND_FLAG"); input.setValue(mesCode,"MSG_CODE"); input.setValue(holdFlag,"HOLD_FLAG"); //设置table参数 JCO.Table tDateRange = function.getTableParameterList().getTable("CMSHOLD"); for(int i = 0; i<list.size(); i++){ String [] tempStr = list.get(i); tDateRange.appendRow(); //添加行 tDateRange.setRow(i); //定位行位 tDateRange.setValue(tempStr[0], "PO_NUM"); tDateRange.setValue(tempStr[1], "PO_TIE"); tDateRange.setValue(tempStr[2], "MSG_TEXT"); } //執行函數 myConnection.execute(function); //在執行函數後可用相同方式獲得輸出結果 JCO.ParameterList output = function.getExportParameterList(); result = (String)output.getValue("ZRETURN"); releaseConnection(myConnection); } else { throw new Exception("No connection!"); } } catch (Exception e) { e.printStackTrace(); } finally { //斷開連接 try { releaseConnection(myConnection); } catch (Exception e) { e.printStackTrace(); } } return result; } }
SAPServiceImpl.java
package com.resunly.sap; /** * Created by IntelliJ IDEA. * User: resunly * Date: 11-12-22 * Time: 下午4:24 * To change this template use File | Settings | File Templates. */ import com.sap.mw.jco.JCO; import java.util.List; public class SAPServiceImpl extends SAPService { protected JCO.Client getConnection() { System.out.println("=====SAPServiceImpl.getconnect====="); //用上述條件創建一個連接物件 JCO.Client myConnection = JCO.createClient(this.getSAPProperties()); /*獲得一個到SAP系統的連接 END */ return myConnection; } protected void releaseConnection(JCO.Client myConnection) { System.out.println("=====SAPServiceImpl.releaseConnection====="); //斷開連接 myConnection.disconnect(); } public String callSAPMeth(String mesCode,String holdFlag,List<String []> list) { SAPService service = new SAPServiceImpl(); String result = ""; try { result = service.sendDataToSAP(mesCode, holdFlag,list); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } return result; } }
test.java
package com.resunly.sap; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 11-12-22 * Time: 下午4:24 * To change this template use File | Settings | File Templates. */ public class test { public static void main(String args[]) { SAPServiceImpl sapser = new SAPServiceImpl(); //SAPServicePoolImpl sp = new SAPServicePoolImpl(); List<String[]> list = new ArrayList<String[]>(); String[] array = new String[3]; array[0] = "20101215001"; array[1] = "1"; array[2] = "666666"; list.add(array); System.out.println(sapser.callSAPMeth("D05", "N", list)); } }