運行效果
一、配置連接
1、在自己電腦配置Java的開發環境( jdk、tcomcat、sapjco3),
在項目中引入sapjco3.jar包,工具包下載地址:https://mvnrepository.com/artifact/com.sap.conn.jco/sapjco3
http://maven.mit.edu/nexus/content/repositories/public/com/sap/conn/jco/sapjco3/3.0.14/
2、創建Java類,配置連接
import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;
public class SAPConn { private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; static { Properties connectProperties = new Properties(); connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.XXX.XX"); //服務器 connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00"); //系統編號 connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "202"); //SAP環境 connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXX"); // SAP用戶名 connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXX"); // 密碼 connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZF"); // 登錄語言:ZH ZF EN connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大連接數 connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大連接線程 //connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, ""); //外網訪問SAP需設置此參數
createDataFile(ABAP_AS_POOLED,"jcoDestination",connectProperties); } /** * 創建SAP接口屬性文件 * @param name * ABAP管道名稱 * @param suffix * 屬性文件后綴 * @param properties * 屬性文件內容 */ private static void createDataFile(String name, String suffix, Properties properties) { // TODO Auto-generated method stub File cfg = new File(name + "." + suffix); if (cfg.exists()) { cfg.deleteOnExit(); } try { FileOutputStream fos = new FileOutputStream(cfg,false); properties.store(fos, "for test only!"); } catch (Exception e) { // TODO: handle exception // System.out.println("Create Data file fault,error msg:" + e.toString()); throw new RuntimeException("無法創建目標文件" + cfg.getName()); } } public static JCoDestination connect() { JCoDestination destination = null; try { destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED); // System.out.println(destination.getAttributes()); } catch (JCoException e) { // TODO: handle exception // System.out.println("連接SAP失敗,錯誤: " + e.toString()); } return destination; } }
二、接口調用
import com.sap.conn.jco.JCoContext;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoRepository;
import com.sap.conn.jco.JCoStructure;
import com.sap.conn.jco.JCoTable;
import com.util.SAPConn;
public class Test2 { public static void main(String[] args) throws JCoException { //獲取連接 JCoDestination destination = SAPConn.connect(); //獲取接口 JCoFunction function = destination.getRepository().getFunction("BAPI_PO_CREATE1"); //Import //參數 //function.getImportParameterList().setValue("NO_MESSAGING", ""); //結構 JCoStructure poHeaderStructure = function.getImportParameterList().getStructure("POHEADER"); poHeaderStructure.setValue("DOC_DATE", "20200312"); //采購文件日期 poHeaderStructure.setValue("DOC_TYPE", "ZROH"); //采購文件類型 poHeaderStructure.setValue("COMP_CODE", "2000"); //公司代碼 poHeaderStructure.setValue("PURCH_ORG", "2000"); //采購組織 poHeaderStructure.setValue("PUR_GROUP", "203"); //采購群組 poHeaderStructure.setValue("VENDOR", "0000001000"); //供應商號碼 poHeaderStructure.setValue("LANGU", "M"); //語言代碼 poHeaderStructure.setValue("CURRENCY", "USD"); //幣別 JCoStructure poHeaderxStructure = function.getImportParameterList().getStructure("POHEADERX"); poHeaderxStructure.setValue("DOC_DATE", "X"); //采購文件日期 poHeaderxStructure.setValue("DOC_TYPE", "X"); //采購文件類型 poHeaderxStructure.setValue("COMP_CODE", "X"); //公司代碼 poHeaderxStructure.setValue("PURCH_ORG", "X"); //采購組織 poHeaderxStructure.setValue("PUR_GROUP", "X"); //采購群組 poHeaderxStructure.setValue("VENDOR", "X"); //供應商號碼 poHeaderxStructure.setValue("LANGU", "X"); //語言代碼 poHeaderxStructure.setValue("CURRENCY", "X"); //幣別 //表格 JCoTable poItemTabe = function.getTableParameterList().getTable("POITEM"); poItemTabe.appendRow(); poItemTabe.setValue("PO_ITEM", "10"); //采購單項次 poItemTabe.setValue("MATERIAL", "CTWP0296-XB"); //物料 poItemTabe.setValue("MATERIAL_EXTERNAL", "CTWP0296-XB"); //長物料 poItemTabe.setValue("INFO_REC", "5300000832"); //采購資訊記錄 poItemTabe.setValue("STGE_LOC", "2172"); //收貨儲存地點 poItemTabe.setValue("PLANT", "2000"); //工廠 poItemTabe.setValue("QUANTITY", "1000"); //采購數量 poItemTabe.setValue("NET_PRICE", "24.07"); //凈價 poItemTabe.setValue("PRICE_UNIT", "100"); //每 JCoTable poItemxTabe = function.getTableParameterList().getTable("POITEMX"); poItemxTabe.appendRow(); poItemxTabe.setValue("PO_ITEM", "10"); //采購單項次 poItemxTabe.setValue("MATERIAL", "X"); //物料 poItemxTabe.setValue("MATERIAL_EXTERNAL", "X"); //長物料 poItemxTabe.setValue("INFO_REC", "X"); //采購資訊記錄 poItemxTabe.setValue("STGE_LOC", "X"); //收貨儲存地點 poItemxTabe.setValue("PLANT", "X"); //工廠 poItemxTabe.setValue("QUANTITY", "X"); //采購數量 poItemxTabe.setValue("NET_PRICE", "X"); //凈價 poItemxTabe.setValue("PRICE_UNIT", "X"); //每 //執行函數 JCoContext.begin(destination); function.execute(destination); //Export //結構 //JCoStructure returnStructure = function.getExportParameterList().getStructure("RETURN"); //if (returnStructure.getString("TYPE").equals("E")){ //System.out.print(returnStructure.getString("MESSAGE")); //} //表 JCoTable returnTable = function.getTableParameterList().getTable("RETURN"); for(int i=0;i<returnTable.getNumRows();i++) { returnTable.setRow(i); if (returnTable.getString("TYPE").equals("S")) { JCoFunction commitFunction = destination.getRepository().getFunction("BAPI_TRANSACTION_COMMIT"); commitFunction.execute(destination); //參數 System.out.print("采購單:"+function.getExportParameterList().getValue("EXPPURCHASEORDER")); break; }else { System.out.print(returnTable.getString("TYPE")+" "); System.out.print(returnTable.getString("ID")+" "); System.out.print(returnTable.getString("NUMBER")+" "); System.out.print(returnTable.getString("MESSAGE")+" "); System.out.println(); JCoFunction rollbackFunction = destination.getRepository().getFunction("BAPI_TRANSACTION_ROLLBACK"); rollbackFunction.execute(destination); } } JCoContext.end(destination); } }