其实直接在java中调SAP的RFC就可以把数据传到SAP里 但是通过java程序监听SAP, 然后SAP在需要的时候去访问java的程序,要更加安全。因为java访问SAP的话随时都可以,只需要运行java程序。 而从SAP访问java,只有SAP需要的时候,java才能访问SAP数据或者传送数据到SAP。
在程序之前要先在SM59里配置。在TCP/IP类型中新建一个 -->取一个destination名字,radiobutton选Registered Server Program. 随便取一个 Promgram ID. 在java里就用这个program id. Geteway host 填Sap服务器地址,Gateway service 填 sapgwnn(nn是System number,如00,01等,在SAP登录界面里选择登录的系统,然后选择“更改项目”,可以看到系统编号(system number)和服务器地址)。
SAP代码: z_sap_java这个函数模块只有一个输出参数 return_str. 在java的代码里面给它赋值,传到SAP。
REPORT z_temp_demo.
DATA str(100).
CALL FUNCTION 'Z_SAP_JAVA' DESTINATION 'Z_TEST_DESTINATION'
IMPORTING
RETURN_STR = str
.
message I000(O0) with str.
*********************************************************************************
JAVA代码: 类SAPLogon. 只是用来登录SAP,其实是为了取得SAP里的 JCO.Repository 对象。
类SAPServer. 用来监听来自SAP的消息。该类必须继承 JCO.Server,因为JCO.SERVER的监听是单独开的一个线程,而监听到有信号来的时候,JCO.SERVER会自动执行其中的protected的方法handleRequest,所以也必须重写该方法。
package javaapplication3;
import com.sap.mw.jco.*;
import com.sap.mw.jco.JCO.Function;
class SAPServer extends JCO.Server
{
public SAPServer(JCO.Repository repo)
{
super ("10.60.203.100", "sapgw01", "MYABC", repo);
}
protected void handleRequest(Function arg0) throws Exception {
JCO.ParameterList output = arg0.getExportParameterList();
output.setValue("Singel Lee", "RETURN_STR");
this.stop();
}
}
class SAPLogon
{
public JCO.Client mConnection;
public JCO.Repository mRepository;
public SAPLogon(String client, String userid, String password, String language,
String ip, String system_number)
{
try {
mConnection = JCO.createClient(client,
userid,
password,
language,
ip,
system_number);
mConnection.connect();
mRepository = new JCO.Repository("Lee", mConnection);
System.out.println("SAP连接成功");
mRepository = new JCO.Repository("my_repository", mConnection);
mConnection.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
}
}
}
public class Main {
public static void main(String[] args) {
SAPLogon mySAP = new SAPLogon("800", "DEV0008", "*****", "E", "10.60.203.100", "01");
SAPServer myServer = new SAPServer(mySAP.mRepository);
myServer.start();
}
}
阅读(4855) | 评论(7) | 转发(0) |