文档章节

JCO访问SAP进行增删改

影非弦
 影非弦
发布于 2015/07/15 18:22
字数 950
阅读 38
收藏 0

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;
	}

}







© 著作权归作者所有

影非弦
粉丝 6
博文 5
码字总数 3621
作品 0
海淀
程序员
私信 提问
SAP Integration in Mule ESB

Currently, SAP is at the core of most enterprises and needs to connect various systems. Mule ESB provides a connector that enables integration of data with SAP NetWeaver and ext......

Rajesh Kumar
2017/12/26
0
0
OA集成SAP开发(提供开发示例、提供技术支持),需要人手现场开发调试

需要1名满足本需求所述的能力要求的开发工程师驻场开发。 【工作职责】 1、在OA系统中进行开发,开发语言为Java,调用SAP JCO传递数据到SAP,不负责SAP端开发 2、按开发规范完成工作,填写每...

qushuii
2016/08/31
45
3
使用Visual Studio Code编写和激活ABAP代码 (上)

猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标...

JerryWang_SAP
02/24
15
0
Kettle创建SAP连接报错

我将sapjco3.jar和sapjco3.dll放置\libext\下 启动Kettle创建SAP的连接 TEST连接不成功 报错: Cannot get SAP function Connect to SAP gateway failed Connection parameters: TYPE=A DEST......

Wallcot
2012/07/18
3.3K
2
利用 Node.js 实现 SAP Hana 数据库编程接口

自 SAP HANA SP 11 之后,可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别,早期的 XS 被称为 XS Classical。 ...

前端热爱者
2018/05/16
104
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部