Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201190
  • 博文数量: 49
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 09:35
文章分类

全部博文(49)

文章存档

2008年(49)

我的朋友

分类:

2008-04-24 17:54:24

  其实直接在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();
    }
}
 
 
 
 
阅读(4825) | 评论(7) | 转发(0) |
给主人留下些什么吧!~~

v41dugu2009-04-10 15:57:50

就是jco找不到这个 Z_SAP_JAVA 撒 有什么地方没有配置哇

chinaunix网友2009-03-31 10:32:51

我參照上面 java 執行.. sm59 測試連線也可以通... 執行.. abap CALL FUNCTION 'Z_SAP_JAVA' DESTINATION 'JCO_RFC' IMPORTING RETURN_STR = str. 會出現.. Runtime Errors CALL_FUNCTION_REMOTE_ERROR JCO.Server could not find server function 'Z_SAP_JAVA'" 是哪裡出問題?

v41dugu2008-07-17 17:12:54

呵呵 不好意思 调用过程我也不是太清楚。 Program Id就是一个标识,java通过这个表示来查找到SAP的程序

chinaunix网友2008-07-17 10:25:08

Promgram ID是什么?它和'Z_TEST_DESTINATION'有没有关系?

chinaunix网友2008-07-17 10:10:57

不好意思我是初学!很感谢您!但是我还是有点不明白,您是怎么将java程序注册到sap中的,调用过程是怎样的!方便的话留个qq!