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