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