Java使用JCO實現調用SAP接口(建立采購單)


運行效果 

一、配置連接

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

}


免責聲明!

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



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