JCO访问SAP进行增删改

原创
2015/07/15 18:22
阅读数 159

1.需要下载jco的相关jar包和.dll文件,如果Web项目,需要将dll文件放到tomcat的bin目录下面,在项目中引入jco的jar包,如果不是web项目,直接全部放到lib下面就可以了。

2.

package com.towery.utils;

import com.sap.mw.jco.JCO;

import java.util.Properties;

/**
 * Created by Administrator on xxxxx.
 */
public class BWUtils {
    static Properties logonProperties = new Properties();

    static{
        try{
            logonProperties.load(BWUtils.class.getResourceAsStream("bw_logon.properties"));
        }catch(Exception e){
            System.out.println("加载配置文件出错!");
        }
    }

    /**
     * 获取连接
     * @return
     */
    public static JCO.Client getConnection(){
        return JCO.createClient(logonProperties);
    }

    /**
     * 关闭连接
     * @param conn
     */
    public static void closeConn(JCO.Client conn){
        if(conn != null){
            conn.disconnect();
        }
    }

    public static void main(String[] args) {
        JCO.Client mConn = getConnection();
        mConn.connect();
        System.out.println(mConn.getAttributes());
        closeConn(mConn);
    }
}


配置文件如下:


jco.client.ashost=10.5.60.118
jco.client.client=001
jco.client.sysnr=02
jco.client.user=EKA0281
jco.client.passwd=bw1234



从SAP查询数据:



package com.towery.dao.impl;

import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import com.towery.dao.BWSync;
import com.towery.entity.Branch;
import com.towery.entity.Factory;
import com.towery.entity.Store;
import com.towery.utils.TempUtils;

import java.util.ArrayList;
import java.util.List;

import static com.towery.utils.BWUtils.*;

/**
 * Created by Administrator on 2015/7/15.
 */
public class BWSyncImpl implements BWSync {
    @Override
    public List<Object> syncData(String function, String tabName) {
        List<Object> ol = new ArrayList<Object>();
        JCO.Client mConn = getConnection();
        try{
            mConn.connect();
            if(mConn != null && mConn.isAlive()){
                System.out.println(mConn.getAttributes());
                //从连接获得一个逻辑意义上的‘仓库’对象'
                JCO.Repository myRepository = new JCO.Repository("myRepository",mConn);
                //从‘仓库’获得一个指定函数名称的函数模板
                IFunctionTemplate ft = myRepository.getFunctionTemplate(function.toUpperCase());
                //从这个函数模板获得该SAP函数的对象
                JCO.Function fun = ft.getFunction();
                mConn.execute(fun);//执行该SAP函数
                JCO.Table table = fun.getTableParameterList().getTable(tabName);//从该函数的Table参数列表获得一个指定名称的table

                if(tabName.equals("T_ZTORG")){//分公司
                    do {
                        Object branchid = table.getValue("ZORG");
                        Object branchname = table.getValue("ZORG_TXT");
                        Object areaname = table.getValue("ZONE");
                        String tp = "branchid:%s,branchname:%s,areaname:%s";

                        System.out.println(String.format(tp,branchid,branchname,areaname));
                        Branch b = new Branch();
                        b.setBranchId(branchid.toString());
                        b.setBranchName(branchname.toString());
                        b.setAreaId(TempUtils.getAreaId(areaname.toString()));

                        ol.add(b);
                    }while(table.nextRow());
                }else if(tabName.equals("T_ZTPLANT")){//工厂
                    do {
                        Object factoryid = table.getValue("ZPLANT");
                        Object factoryname = table.getValue("ZPLANT_TXT");
                        Object branchid = table.getValue("ZORG");
                        String tp = "factoryid:%s,factoryname:%s,branchid:%s";
                        System.out.println(String.format(tp,factoryid,factoryname,branchid));

                        if(!branchid.toString().equals("") && (branchid != null) && !factoryname.toString().equals("电子商务中心仓")){
                            Factory f = new Factory();
                            f.setFacId(factoryid.toString());
                            f.setFacName(factoryname.toString());
                            f.setBranchId(branchid.toString());
                            ol.add(f);
                        }

                    }while(table.nextRow());
                }else if(tabName.equals("T_STOR_LOC")){//门店
                    do {
                        Object storeid = table.getValue("STOR_LOC");
                        Object storename = table.getValue("TXTMD");
                        Object factoryid = table.getValue("PLANT");
                        String tp = "storeid:%s,storename:%s,factoryid:%s";
                        System.out.println(String.format(tp,storeid,storename,factoryid));
                        if(!factoryid.toString().equals("") && factoryid != null){
                            Store s = new Store();
                            s.setStoreId(storeid.toString());
                            s.setStoreName(storename.toString());
                            s.setFactoryId(factoryid.toString());
                            ol.add(s);
                        }

                    }while(table.nextRow());
                }
            }
        }catch(JCO.Exception e){
            e.printStackTrace();
        }finally {
            if(mConn != null){
                closeConn(mConn);
            }
        }

        return ol;
    }
}



更新和删除,在SAP中创建的函数是给它的输入参数传值"I"表示更新和插入,传值"D"表示删除



package com.towery.imp.dao.impl;

import java.util.List;

import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import com.towery.imp.bean.CompositeIndicators;
import com.towery.imp.bean.CostRate;
import com.towery.imp.bean.DaySalesAmount;
import com.towery.imp.bean.DirectSales;
import com.towery.imp.bean.EfficiencyTarget;
import com.towery.imp.bean.OrderImp;
import com.towery.imp.bean.OrderTarget;
import com.towery.imp.bean.PaymentIndicators;
import com.towery.imp.bean.SalesRatio;
import com.towery.imp.bean.SoldOutTarget;
import com.towery.imp.bean.UpperData;
import com.towery.imp.dao.BWSynchronize;
import com.towery.imp.utils.BWUtils;
import com.towery.imp.utils.DateUtils;

public class BWSynchronizeImpl implements BWSynchronize {

	public boolean synchronizeData(List<Object> ol, String param, String function,String tabName) {
		if(ol.size() > 0){
			JCO.Client myConn = BWUtils.getConnection();//获取连接
			try{
				myConn.connect();
				//如果连接不为null并且处于活动状态
				if(myConn != null && myConn.isAlive()){
					System.out.println(myConn.getAttributes());
					//从连接获得一个逻辑意义上的“仓库”对象(Repository)
					JCO.Repository myRepository = new JCO.Repository("Repository", myConn);
					//从“仓库”中获得一个指定函数名的函数模板
					IFunctionTemplate ft = myRepository.getFunctionTemplate(function.toUpperCase());
					//从这个函数模板获得该SAP函数的对象
					JCO.Function fun = ft.getFunction();
					//获得函数的import参数列表
					JCO.ParameterList input = fun.getImportParameterList();
					input.setValue(param, "I_FLAG");//设置输入参数
					//获得函数的export参数列表
					JCO.ParameterList output = fun.getExportParameterList();
					//获取table参数列表
					JCO.Table tab = fun.getTableParameterList().getTable(tabName);
					
						for(int i = 0; i < ol.size(); i++){
							PaymentIndicators pi = (PaymentIndicators) ol.get(i);
							tab.insertRow(i+1);
							tab.setValue("", "/BIC/Z3MBQR");//目标确认情况
				        	tab.setValue(pi.getArea_name(), "/BIC/Z1ZONE");//大区
				        	tab.setValue(pi.getBranch_id(), "/BIC/Z1_ORG");//分公司
				        	tab.setValue(pi.getBranch_name(), "/BIC/Z3ORGTXT");//公司名称
				        	tab.setValue(pi.getFac_id(), "/BIC/Z3PLANT");//工厂
				        	tab.setValue(pi.getFac_name(), "/BIC/Z3PLATXT");//工厂描述
				        	tab.setValue(pi.getPi_year(), "/BIC/Z3YEAR");//年
				        	tab.setValue(pi.getPi_month(), "/BIC/Z3MONTH");//月
				        	tab.setValue(pi.getPi_create_date(), "/BIC/Z3CJDATE");//创建日期
				        	tab.setValue("", "/BIC/Z3GXDATE");//更新日期
				        	tab.setValue("", "RECORDMODE");//增量模式:更新处理
				        	tab.setValue(pi.getPi_base_target(), "/BIC/Z3JCHKMB");//基础回款目标
				        	tab.setValue(pi.getPi_complete_target(), "/BIC/Z3DCHKMB");//达成回款目标
				        	tab.setValue(pi.getPi_challenge_target(), "/BIC/Z3TZHKMB");//挑战回款目标
				        	tab.setValue(pi.getPi_sale_target(), "/BIC/Z3XSHKMB");//销售目标
						}
					
		        	myConn.execute(fun);
					System.out.println("E_MESSAGE=" + output.getString("E_MESSAGE"));
					if(output.getString("E_MESSAGE").equals("S")){
						return true;
					}
				}
			}catch(JCO.Exception e){
				System.out.println("连接失败!");
				e.printStackTrace();
			}finally{
				if(myConn != null){
					BWUtils.closeConn(myConn);
				}
			}
		}
		return false;
	}

}







展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部