欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

JCO连接SAP例子,jcosap例子

来源: javaer 分享于  点击 11347 次 点评:61

JCO连接SAP例子,jcosap例子


JCO连接SAP例子

 SAP JCo(SAP Java Connector,SAP Java连接器)是SAP组件和Java应用程序之间的中间件和接口实现机制。
JCo基于JNI(Java Native Interface),建立在RFC协议基础之上,支持SAP服务器端入站(JAVA调用ABAP)及出站(ABAP调用JAVA)数据通信。

使用JCo的机器中必须要安装JRE(JAVA运行时环境)。
将从SAP官方服务站点下载的 JCO文件 sapjco3-ntintel-3.0.0.zip解压,其中有连接组件(sapjco3.dll、sapjco3.jar)以及相关文档和示例。

下面就用JCreator 做一个简单的例子来测试JCO的功能:

1. 环境部署
   在D盘建立一个目录lib,将sapjco3.dll、sapjco3.jar 拷贝到D:\lib下
   打开JCreator,打开菜单:配置--》选项,然后打开JDK配置文件,选中配置文件后点击编辑,然后将D:\lib\sapjco3.jar添加到JDK配置文件的类清单中。

2.SAP端开发

SAP端用事务代码SE37开发一个Function Module,支持RFC:

FUNCTION Z_BAPI_GET_ALL_USERS_DAILY.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(USTYP) TYPE  XUUSTYP
*"  TABLES
*"      USERS STRUCTURE  USR02
*"----------------------------------------------------------------------
TABLES:USR02.
DATA:ITAB_SAPUSERS TYPE TABLE of USR02 WITH HEADER LINE.

SELECT * INTO CORRESPONDING FIELDS OF TABLE ITAB_SAPUSERS
FROM USR02.

LOOP AT ITAB_SAPUSERS.
  users = ITAB_SAPUSERS.
  APPEND USERS.
ENDLOOP.

if ustyp is not INITIAL.
   delete users
       where  ustyp <> ustyp.
endif.

ENDFUNCTION.

3.Java程序开发

用JCreator开发Java端程序:

1) 创建类User,封装用户的属性

public class User { 
    private String userId; 
    private String name; 
    private int age; 

    public User(){} 
    public User(String userId,String name,int age){ 
        this.userId = userId; 
        this.name = name; 
        this.age = age; 
    } 

    public String getUserId() { 
        return userId; 
    } 

    public void setUserId(String userId) { 
        this.userId = userId; 
    } 

    public String getName() { 
        return name; 
    } 

    public void setName(String name) { 
        this.name = name; 
    } 

    public int getAge() { 
        return age;  
    } 

    public void setAge(int age) { 
        this.age = age; 
    } 
}  

2) 创建ConnectSAPServer类,实现对连接池的管理

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;


public class ConnectSAPServer
{
 //SAP服务器IP地址    
 static String D12 = "XXX.25.0.XX";   
 static String T11 = "XXX.25.0.XX";        
 static String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";     
 static{     
Properties connectProperties = new Properties();      
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, D12);         
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");        //系统编号        
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "900");       //SAP集团      
connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "baichi");       //SAP用户名       
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "12345678");     //密码      
connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "ZH");        //登录语言        
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");  //最大连接数       
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,"10");     //最大连接线程            
createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);   
 }       

  //如果连接配置文件不存在,则创建一个配置文件,并把配置信息写入到文件中
  static void createDataFile(String name, String suffix, Properties properties)
 {   
     File cfg = new File(name+"."+suffix);      
     if(!cfg.exists()){           
      try{              
         FileOutputStream fos = new FileOutputStream(cfg, false);       
         properties.store(fos, "for tests only !");             
         fos.close();          
         }
catch (Exception e){             
  throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);  
          }    
    }   
 } 
    
public static JCoDestination Connect(){   
  JCoDestination destination =null;         
  try {           
        destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);  
      }
  catch (JCoException e)
      { 
        e.getCause();    
      }               
  return destination;  
  }
 
  public static void main(String[] s)
  {
   JCoDestination jcoConn = testJCO.Connect();
   System.out.println(jcoConn.getDestinationName());
  }
}

3) 创建一个类ConnectSAPTable,用于调用sap的function module

import java.util.ArrayList; 
import java.util.List; 
import com.sap.conn.jco.JCoDestination; 
import com.sap.conn.jco.JCoException; 
import com.sap.conn.jco.JCoFunction; 
import com.sap.conn.jco.JCoTable; 
//import User; 
public class ConnectSAPTable {  
    private static JCoDestination jCoDestination; 
    public static List<User> returnSAPUser_All(String ustyp) throws JCoException{ 
        List<User> users = new ArrayList<User>(); 
        jCoDestination = ConnectSAPServer.Connect();  
        JCoFunction function = jCoDestination.getRepository().getFunction("Z_BAPI_GET_ALL_USERS_DAILY");  
        if (function == null) throw new RuntimeException("Z_BAPI_GET_ALL_USERS_DAILY  not found in SAP."); 
        //传入的参数
        function.getImportParameterList().setValue("USTYP",ustyp);  // user type
        function.execute(jCoDestination); 
        JCoTable returnTable = function.getTableParameterList().getTable("USERS"); 
        if (returnTable.getNumRows()>0) { 
           returnTable.firstRow();  
            for (int i = 0; i < returnTable.getNumRows(); i++,returnTable.nextRow()) { 
                User user = new User();  
                user.setUserId(returnTable.getString("BNAME"));  
                users.add(user); 
            } 
        } 
        return users; 
    } 
}  

4) 创建一个类ExportSAPUserByDaily,用于调度,提供参数输入并处理返回的结果

import java.util.List;   
import com.sap.conn.jco.JCoException;
//import User;
public class ExportSAPUserByDaily { 
    public static void main(String[] args) { 
        System.out.println("the call result by JCo:");
        try {  
            List<User> userList = ConnectSAPTable.returnSAPUser_All(args[0]); 
            for (User sapUser : userList) {  
                System.out.println(sapUser.getUserId()); 
            }  
        } catch (JCoException e) { 
            e.getCause(); 
            e.printStackTrace();
        } 
    } 

相关文章

    暂无相关文章
相关栏目:

用户点评