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