博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

李海鑫的SAP博客

  lihaixin.cublog.cn

关于作者
姓名:
职业:
年龄:
位置:
个性介绍:
|| << >> ||
我的分类


通过SAP访问java程序 将数据从java传到SAP
  其实直接在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();
    }
}
 
 
 
 

发表于: 2008-04-24,修改于: 2008-04-24 17:54,已浏览191次,有评论5条 推荐 投诉


网友评论
网友: 本站网友 时间:2008-07-16 16:28:17 IP地址:219.148.40.★
'Z_TEST_DESTINATION'是什么

网友: v41dugu 时间:2008-07-16 17:38:32 IP地址:221.10.60.★
"取一个destination名字"
就是在sm59里面定义的destination名字

网友: 本站网友 时间:2008-07-17 10:10:57 IP地址:219.148.40.★
不好意思我是初学!很感谢您!但是我还是有点不明白,您是怎么将java程序注册到sap中的,调用过程是怎样的!方便的话留个qq!

网友: 本站网友 时间:2008-07-17 10:25:08 IP地址:219.148.40.★
Promgram ID是什么?它和'Z_TEST_DESTINATION'有没有关系?

网友: v41dugu 时间:2008-07-17 17:12:54 IP地址:221.10.60.★
呵呵 不好意思 调用过程我也不是太清楚。
Program Id就是一个标识,java通过这个表示来查找到SAP的程序

 发表评论