java jco方式調用sap函數創建采購訂單、銷售訂單


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM