Java連接SAP實例

1 篇文章 0 订阅

用eclipse時,先導入sapjco3.jar去。
如果沒有sapjco3包,可以https://download.csdn.net/download/qq_44861248/12696839下载,32位64位都有,并附有详细作说明。

package testsap;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
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.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoRepository;
import com.sap.conn.jco.JCoTable;
import com.sap.conn.jco.ext.DestinationDataProvider;


public class test
{
	static String ABAP_AS_POOLED = "ABAP_AS_POOL";
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,"服務器Ip");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "連接的Client");  
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "Username");  
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "Password");  
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "事例號碼");
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "語言");
        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) {
                e.printStackTrace();
            }
        }
	}
	private void writeArrayToTxt(JCoTable demands, String string) {
        try {
            FileWriter fw = new FileWriter(string);
            for (int i = 0; i < 1; i++) {
                for (int j = 0; j < 1; j++)
                    fw.write(demands+ "\t");
                fw.write("\n");
            }
            fw.close();
        }
        catch (IOException e){
            e.printStackTrace();
        } 
	
}	
	public static void RFC() throws JCoException {
		String RFCName = "調用的RFC";
		JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
		JCoRepository repository = destination.getRepository();
		JCoFunction function = repository.getFunction(RFCName); 
		JCoParameterList input = function.getImportParameterList(); 
        input.setValue("要傳的參數", "參數值");	
        JCoStructure structure = input.getStructure("STRUTURENAME");//傳結構體類的參數
		structure.setValue("field1","value1");
		structure.setValue("field2", "value2");
        JCoTable tb_list = function.getTableParameterList().getTable("傳表");
        tb_list.appendRow();
        tb_list.setValue("表中列名","第一行的值");      
        function.execute(destination);
        JCoParameterList exportParams = function.getExportParameterList();//獲取返回的參數值
        String msg = exportParams.getString("參數1");
        
        JCoStructure returnStructure = exportParams.getStructure("STRUCTURE");//獲取返回的結構體的值
        String str1 = returnStructure.getString("字段1");
        String str2 = returnStructure.getString("字段2");
        
        JCoTable codes = function.getTableParameterList().getTable("返回的輸出表");
		//控制台輸出返回內容
        for (int i = 0; i < codes.getNumRows(); i++) 
        {
            codes.setRow(i);
            System.out.println(codes.getString("輸出表的列名") 
            		'\t' + codes.getString("輸出表的列名"));    
            		 
        }
        //保存為txt文檔
        test wa = new test();
		wa.writeArrayToTxt(codes, "my.txt");
	}        
	public static void main(String[] args) throws JCoException  {
		
		RFC();
		
		   
	}
}	

上面的是單個服務器連接,群組服務器連接,換一下參數就行,下面是群組連接參數:

connectProperties.setProperty(DestinationDataProvider.JCO_R3NAME,"系統ID");
		connectProperties.setProperty(DestinationDataProvider.JCO_GROUP,"群組名");
		connectProperties.setProperty(DestinationDataProvider.JCO_MSHOST,"服務器IP");
		connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT,"client");
		connectProperties.setProperty(DestinationDataProvider.JCO_USER,"username");
		connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,"password");
		connectProperties.setProperty(DestinationDataProvider.JCO_LANG,"EN");
		connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,"10");
		connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");

如果传入参数为深层内表:

		JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
		JCoRepository repository = destination.getRepository();
		JCoFunction function = repository.getFunction(RFCName); 
		JCoParameterList input = function.getImportParameterList();
        if (input !=  null){
        	JCoParameterFieldIterator iterator = input.getParameterFieldIterator();
        	while (iterator.hasNextField()) {
        		JCoParameterField field = iterator.nextParameterField();
        		JCoField tableField = iterator.nextField();
        		try{//判断类型,创建对应的方法传入参数
        			if (field.isTable()){
        				fillSAPTable(field);
        			}if (field.isStructure()){
//        				fillSAPStructure(field);
        			}else{
        				input.setValue("FIELD1", "123");
        			}
        		} catch (Exception e){
        			throw new IOException("Function " + function.getName() + " Error >>" + e.getMessage());
        		}
        	}
        } 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值