java jco方式调用sap函数创建采购订单、销售订单

时间:2024-02-15 18:28:28

1.把librfc32.dll,sapjcorfc.dll 放到jdk\bin目录下

(不然会报错:sap Field IT_TABLnot a member of TABLES)

2.下载 sap.jar;sapjco.jar;sappool.jar加到JAVA应用下.
3.下面类代码介绍调用sap函数创建采购订单、销售订单

##属性文件信息
host=172.16.0.6 clientId=101 userName=GPC_RFC_JCTP password=QWERTY lang=zh sysnr=00 functionorder21=Zcrm_rfc_mm_write_me21 order_in1=IP_INPUT001 order_in2=IP_INPUT002 order_int_b=IT_INPUT001 functionorderlogtext=ZCRM_RFC_CREATE_LONG_TEXT write_headtext=IT_INPUT001 functionorderVA01=ZCRM_RFC_SD_WRITE_VA01 saleorder_in1=IP_INPUT001 saleorder_in2=IP_INPUT002 saleorder_in_b1=IT_INPUT001 saleorder_in_b2=IT_INPUT002 saleorder_in_b3=IT_INPUT003

 

package nc.bs.pu.m21.util;

import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.Client;


public class SapConn {
    private JCO.Client client; //客户端连接对象
    private JCO.Function function; //RFC Function 对象
    private String host;//地址
    private String clientId;//客户端
    private String userName;//用户名
    private String  password;//密码
    private String lang;//语言
    private String  sysnr; //系统标识
    
    /**
     * @return host
     */
    public String getHost() {
        return host;
    }

    /**
     * @param host 要设置的 host
     */
    public void setHost(String host) {
        this.host = host;
    }

    /**
     * @return clientId
     */
    public String getClientId() {
        return clientId;
    }

    /**
     * @param clientId 要设置的 clientId
     */
    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    /**
     * @return userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * @param userName 要设置的 userName
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password 要设置的 password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return lang
     */
    public String getLang() {
        return lang;
    }

    /**
     * @param lang 要设置的 lang
     */
    public void setLang(String lang) {
        this.lang = lang;
    }

    /**
     * @return sysnr
     */
    public String getSysnr() {
        return sysnr;
    }

    /**
     * @param sysnr 要设置的 sysnr
     */
    public void setSysnr(String sysnr) {
        this.sysnr = sysnr;
    }

    public SapConn(){
    
    }
    
    /**
     * 创建连接对象
     */
    public void connect(){
        this.client = JCO.createClient(clientId, userName,password,lang,host,sysnr);  
        this.client.connect();
    }
    
    /**
     * 断开连接
     */
    public void disconnect(){
        this.client.disconnect(); 
    }
    
    
    public Client getClient() {
        return client;
    }
    
    public void setClient(Client client) {
        this.client = client;
    }
    
    
    
    /**
     * 注册并获取一个RFC函数
     * @param reName 注册名称,任意
     * @param ftName RFC 名称
     */
    public void regFunction(String reName,String ftName){ 
        JCO.Repository mRepository = new JCO.Repository(reName,this.client); 
        IFunctionTemplate ft = mRepository.getFunctionTemplate(ftName.toUpperCase());
        this.function = ft.getFunction();
    }
    
    /**
     * 设置输入参数
     * @param parameter 参数名
     * @param value 值
     */
    public void setImport(String parameter,Object value){
        JCO.ParameterList im = this.function.getImportParameterList();
        im.setValue(value,parameter);
    }
    
    /**
     * @desc:输入参数 
     * @param strname 结构名
     * @时间:2016年5月4日
     * @作者:lhz
     */
    public JCO.Structure getStructure(String strname){
        return this.function.getImportParameterList().getStructure(strname);
    }
    
    /**
     * 获取Tables结构对象
     * @param tableName 参数名称
     * @return
     */
    public JCO.Table getTable(String tableName){
        return this.function.getTableParameterList().getTable(tableName);
    }
    
    /**
     * 执行当前注册的函数
     */
    public void execute(){
        this.client.execute(this.function);
    }

    public JCO.Function getFunction() {
        return function;
    }

    public void setFunction(JCO.Function function) {
        this.function = function;
    }
    

}
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import nc.bs.pu.m21.AutoSynchNCOrder21ToYCSap;
import nc.bs.pu.m21.util.SapConn;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;

import com.sap.mw.jco.JCO;

/**
* 创建采购订单
* @author lhz * @时间: 2016年5月13日 */ public class TestPurchaseOrder { private static SapConn sc = new SapConn(); private static Properties p = new Properties(); /** * */ public TestPurchaseOrder() { } /** * @desc:跟sap建立连接 * @时间:2016年5月5日 * @作者:lhz */ private static void createConn() { try { InputStream in = AutoSynchNCOrder21ToYCSap.class.getResourceAsStream("sapinfo.properties"); if(in==null)return; p.load(in); sc.setHost(p.getProperty("host")); sc.setClientId(p.getProperty("clientId")); sc.setUserName(p.getProperty("userName")); sc.setPassword(p.getProperty("password")); sc.setLang(p.getProperty("lang")); sc.setSysnr(p.getProperty("sysnr")); sc.connect(); }catch(IOException e){ e.printStackTrace(); ExceptionUtils.wrappBusinessException(e.getMessage()); } } /** * @desc:采购订单成功传入到sap后,回写日志表信息 * @时间:2016年5月5日 * @作者:lhz */ public void rewriteSapinfo(String sapno,String message){ String functionorderlogtext = p.getProperty("functionorderlogtext"); sc.regFunction(functionorderlogtext, functionorderlogtext); JCO.Table write_headtext = sc.getTable(p.getProperty("write_headtext")); write_headtext.setValue("CD01", "ID"); write_headtext.setValue("1", "LANG"); write_headtext.setValue(sapno, "NAME"); write_headtext.setValue("NC采购订单","OBJECT"); write_headtext.setValue(message,"LINE"); sc.execute(); } public static void main(String[] args) { createConn(); String functionorder21 = p.getProperty("functionorder21"); sc.regFunction(functionorder21, functionorder21); JCO.Structure s_order_h1 = sc.getStructure(p.getProperty("order_in1")); JCO.Structure s_order_h2 = sc.getStructure(p.getProperty("order_in2")); JCO.Table tDateRange = sc.getTable(p.getProperty("order_int_b")); UFDateTime ufdatetime = new UFDateTime(); String strdate = ufdatetime.toString().substring(0, 10).replaceAll("-", ""); String strtime = (ufdatetime.getTime()+"").replaceAll(":", ""); s_order_h1.setValue("G0A0", "BUKRS");//公司 s_order_h1.setValue("A01", "EKGRP");//采购组 s_order_h1.setValue("ANB", "BSART");//采购凭证类型 s_order_h1.setValue("A003", "EKORG");//采购组织 s_order_h1.setValue("1456", "LIFNR");//供应商编码 s_order_h1.setValue("jck_sd_wq", "NAME1");//记录人 s_order_h1.setValue(strdate, "AEDAT");//建立日期 s_order_h1.setValue("A003", "WERKS");//工厂 s_order_h2.setValue("CD2016050400009", "OANO");//NC订单号 s_order_h2.setValue(strdate, "ZDATE");//日期 s_order_h2.setValue(strtime, "ZTIME");//时间 s_order_h2.setValue("jck_sd_wq", "OANAME");//操作人 s_order_h2.setValue("NC系统-创建采购订单", "OAMODULE"); tDateRange.appendRow(); tDateRange.setValue(10, "EBELP");//项目编号 tDateRange.setValue("A300608", "MATNR");//物料号码 tDateRange.setValue(450, "MENGE");//订单数量 tDateRange.setValue("KG", "MEINS");//订单单位 tDateRange.setValue(strdate, "EINDT");//交货日期 tDateRange.setValue(180000, "NETPR");//净价格 tDateRange.setValue(117*251.21, "PEINH");//价格单位 // tDateRange.setValue("KG", "BPRME");//订单价格单位 tDateRange.setValue("A000", "LGORT");//存储位置 sc.execute(); String message = sc.getTable("ET_LOG").getString("MESSAGE"); String sapno = sc.getFunction().getExportParameterList().getString("EP_OUTPUT001").equals("")?"" :sc.getFunction().getExportParameterList().getString("EP_OUTPUT001"); Boolean issuccess = sc.getFunction().getExportParameterList().getString("EP_SUBRC").equals("0"); if(issuccess){ // rewriteSapinfo(sapno, message); } sc.disconnect(); } import java.io.IOException;import java.io.InputStream;
import java.util.Properties;

import nc.bs.pu.m21.AutoSynchTransfer5XToYCSap;
import nc.bs.pu.m21.util.SapConn;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;

import com.sap.mw.jco.JCO;

/**
*创建销售订单
* @author lhz * @时间: 2016年5月13日 */ public class TestSaleOrder { private static SapConn sc = new SapConn(); private final static Properties p = new Properties(); /** * */ public TestSaleOrder() { } /** * @desc:跟sap建立连接 * @时间:2016年5月5日 * @作者:lhz */ private static void createConn() { try { InputStream in = AutoSynchTransfer5XToYCSap.class .getResourceAsStream("sapinfo.properties"); if (in == null) return; p.load(in); sc.setHost(p.getProperty("host")); sc.setClientId(p.getProperty("clientId")); sc.setUserName(p.getProperty("userName")); sc.setPassword(p.getProperty("password")); sc.setLang(p.getProperty("lang")); sc.setSysnr(p.getProperty("sysnr")); sc.connect(); } catch (IOException e) { e.printStackTrace(); ExceptionUtils.wrappBusinessException(e.getMessage()); } } /** * @desc:采购订单成功传入到sap后,回写日志表信息 * @时间:2016年5月5日 * @作者:lhz */ public static void rewriteSapinfo(String sapno, String message) { String functionorderlogtext = p.getProperty("functionorderlogtext"); sc.regFunction(functionorderlogtext, functionorderlogtext); JCO.Structure write_headtext = sc.getStructure(p .getProperty("write_headtext")); write_headtext.setValue("CD01", "ID"); write_headtext.setValue("1", "LANG"); write_headtext.setValue(sapno, "NAME"); write_headtext.setValue("NC采购订单", "OBJECT"); write_headtext.setValue(message, "LINE"); sc.execute(); } public static void main(String[] args) { createConn(); String functionorderVA01 = p.getProperty("functionorderVA01"); sc.regFunction(functionorderVA01, functionorderVA01); JCO.Structure saleorder_in1 = sc.getStructure(p .getProperty("saleorder_in1")); JCO.Structure saleorder_in2 = sc.getStructure(p .getProperty("saleorder_in2")); JCO.Table tDateRange_1 = sc.getTable(p.getProperty("saleorder_in_b1")); JCO.Table tDateRange_2 = sc.getTable(p.getProperty("saleorder_in_b2")); JCO.Table tDateRange_3 = sc.getTable(p.getProperty("saleorder_in_b3")); UFDateTime ufdatetime = new UFDateTime(); String strdate = ufdatetime.toString().substring(0, 10) .replaceAll("-", ""); String strtime = (ufdatetime.getTime() + "").replaceAll(":", ""); // *************抬头输入信息************* saleorder_in1.setValue("02", "DISTR_CHAN");// 分销渠道 saleorder_in1.setValue("ZAOR", "DOC_TYPE");// 销售单据类型 saleorder_in1.setValue("A003", "SALES_ORG");// 销售组织 saleorder_in1.setValue("00", "DIVISION");// 部门 // *************历史记录输入信息************* saleorder_in2.setValue("SD2016051200001", "OANO");// NC订单号 saleorder_in2.setValue(strdate, "ZDATE");// 日期 saleorder_in2.setValue(strtime, "ZTIME");// 时间 saleorder_in2.setValue("jck_sd_wq", "OANAME");// 操作人 saleorder_in2.setValue("NC系统-创建销售订单", "OAMODULE"); // *************输入行输入信息************* tDateRange_1.appendRow(); tDateRange_1.setValue(10, "ITM_NUMBER");// 销售单据项目 tDateRange_1.setValue("A308439", "MATERIAL");// 物料号码 tDateRange_1.setValue(100, "REQ_QTY");// 以销售单位计的订单数量 tDateRange_1.setValue("Q粒", "SALES_UNIT");// 销售单位 tDateRange_1.setValue("A003", "PLANT");// 工厂 // *************条件输入信息************* tDateRange_2.appendRow(); tDateRange_2.setValue(10, "ITM_NUMBER");// 销售单据项目 tDateRange_2.setValue("PR01", "COND_TYPE");// 条件类型 tDateRange_2.setValue(15.30, "COND_VALUE");// 条件比率 tDateRange_2.setValue("RMB", "CURRENCY");// 货币名称代码 tDateRange_2.setValue("Q粒", "COND_UNIT");// 条件单位 // *************合作伙伴输入信息************* // SP售达方(传AG,SAP会转成SP) tDateRange_3.appendRow(); tDateRange_3.setValue("AG", "PARTN_ROLE");// 售达方 tDateRange_3.setValue("5632", "PARTN_NUMB");// 用户号 // SH送达方(传WE,SAP会转成SH) tDateRange_3.appendRow(); tDateRange_3.setValue("WE", "PARTN_ROLE");// 合作伙伴 tDateRange_3.setValue("5632", "PARTN_NUMB");// 用户号 sc.execute(); String message = sc.getTable("ET_LOG").getString("MESSAGE"); String sapno = sc.getFunction().getExportParameterList() .getString("EP_VBELN").equals("") ? "" : sc.getFunction() .getExportParameterList().getString("EP_VBELN"); Boolean issuccess = sc.getFunction().getExportParameterList() .getString("EP_SUBRC").equals("0"); if (issuccess) { rewriteSapinfo(sapno, message); } sc.disconnect(); } }