SAP JCo的Server/Client编程实例
JCo是服務于SAP系統和Java系統的RFC中間件,是用Java實現的API,以Jar包的方式發布。應用靈活,但使用起來相對繁瑣,NetWeaver Portal中基于Java的Webdynpro開發環境SAPNetWeaver Developer Studio就是通過JCo連接SAP的。通過一個簡單實例,描述一下實現過程,開發環境:Eclipse + ECC,準備好JCo的Jar包。
?
一、SAP端:
?
SE37,創建一個RFC,供Java端調用
function?zsap_calculate.
*"----------------------------------------------------------------------
*"*"Local?interface:
*"??IMPORTING
*"?????VALUE(NUMBER1)?TYPE??STRING
*"?????VALUE(NUMBER2)?TYPE??STRING
*"?????VALUE(OPERATOR)?TYPE??STRING
*"??EXPORTING
*"?????VALUE(RESULT)?TYPE??STRING
*"----------------------------------------------------------------------
??try?.
??????case?operator.
????????when?'+'.
??????????result?=?number1?+?number2.
?
????????when?'-'.
??????????result?=?number1?-?number2.
?
????????when?'*'.
??????????result?=?number1?*?number2.
?
????????when?'/'.
??????????result?=?number1?/?number2.
?
????????when?others.
??????????result?=?'Not?supported!'.
??????endcase.
?
????catch?cx_root.
??????result?=?'Not?supported!'.
??endtry.
?
??condense?result.
?
endfunction.
SM59配置RFC destination
?
注意這里要設置為Unicode的communication type
?
SE37定義Java系統調用的接口函數:
?
SE38創建測試程序:
report??zyincl_test_00?no?standard?page?heading.
?
data:
????l_number1?type?string,
????l_number2?type?string,
????l_operator?type?string,
????l_result?type?string.
?
l_number1?=?'15'.
l_number2?=?'221'.
l_operator?=?'+'.
?
call?function?'ZJAVA_CALCULATE'?destination?'JCOPRO001'
??exporting
????number1??=?l_number1
????number2??=?l_number2
????operator?=?l_operator
??importing
????result???=?l_result.
?
write?l_result.
?
二、Java端:
?
在Eclipse中創建一個Java Project
?
把JCo的Jar包配置到項目
?
創建服務類,處理SAP的請求,記得設置屬性Unicode為1:
package org.clyde;
import com.sap.mw.jco.*;
import com.sap.mw.jco.JCO.Client;
import com.sap.mw.jco.JCO.Function;
import com.sap.mw.jco.JCO.ParameterList;
import com.sap.mw.jco.JCO.Repository;
import com.sap.mw.jco.JCO.Server;
public class Service extends Server {
private static Client client;
public Service(String gwhost, String gwserv, String progid, IRepository rep) {
super(gwhost, gwserv, progid, rep);
super.setProperty("unicode", "1");
if (client == null) {
client = JCO.createClient("550", "clyde", "1q2w3e4r", "EN",
"192.168.1.8", "00");
client.connect();
}
}
@Override
//重載方法,處理SAP對Java系統的遠程訪問
protected void handleRequest(Function function) throws Exception {
ParameterList input = function.getImportParameterList();
ParameterList output = function.getExportParameterList();
String number1, number2, operator, result;
number1 = input.getString("NUMBER1");
number2 = input.getString("NUMBER2");
operator = input.getString("OPERATOR");
if (function.getName().equals("ZJAVA_CALCULATE")) {
//調用SAP系統的RFC:ZSAP_CALCULATE實現計算
result = getResult(number1, number2, operator);
System.out.println("Calculating=> ?" + number1 + operator + number2
+ " = " + result);
output.setValue(result, "RESULT");
}
}
public String getResult(String number1, String number2, String operator) {
Repository rep = new Repository("", client);
Function func = rep.getFunctionTemplate("ZSAP_CALCULATE").getFunction();
ParameterList input = func.getImportParameterList();
input.setValue(number1, "NUMBER1");
input.setValue(number2, "NUMBER2");
input.setValue(operator, "OPERATOR");
func.setImportParameterList(input);
client.execute(func);
return func.getExportParameterList().getString("RESULT");
}
}
?
創建啟動服務的Client類:
package org.clyde;
?
importcom.sap.mw.jco.JCO;
importcom.sap.mw.jco.JCO.Client;
importcom.sap.mw.jco.JCO.Repository;
?
public classJCoClient {
publicstatic void main(String[] args) {
Clientclient = JCO.createClient("550", "clyde","1q2w3e4r", "EN",
"192.168.1.8","00");
client.connect();
Repositoryrep = new JCO.Repository("", client);
//啟動服務
newService("192.168.1.8", "sapgw00", "JCOPRO001",rep).start();
System.out.println("Serviceis started.");
}
?
}
?
運行JCoClient,啟動服務:
?
回到SAP端,運行測試程序,成功返回結果:
?
修改參數,再測試幾次,在Java端可以監控到請求的日志:
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔為你收集整理的SAP JCo的Server/Client编程实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C3P0 配置
- 下一篇: 自动化集成:Pipeline整合Dock