2014-09-04 56 views
1

進出口目前使用SAP JCO SAP表連接到SAP和取從SAP表中的數據。我使用內部BAPI函數從SAP表中獲取數據。我想知道的是如何來從SAP表中的數據,僅通過指定表名,並從該數據應被檢索的列的方法。訪問經由JCO

下面是即時通訊使用抓取經由BAPI功能的數據的代碼。

JCoFunction function = destination.getRepository().getFunction("BAPI_COMPANYCODE_GETLIST"); 
    if(function == null) 
     throw new RuntimeException("BAPI_COMPANYCODE_GETLIST not found in SAP."); 

    try 
    { 
     function.execute(destination); 
    } 
    catch(AbapException e) 
    { 
     System.out.println(e.toString()); 
     return; 
    } 

    JCoStructure returnStructure = function.getExportParameterList().getStructure("RETURN"); 
    if (! (returnStructure.getString("TYPE").equals("")||returnStructure.getString("TYPE").equals("S")) ) 
    { 
     throw new RuntimeException(returnStructure.getString("MESSAGE")); 
    } 

    JCoTable codes = function.getTableParameterList().getTable("COMPANYCODE_LIST"); 
    final FileWriter outFile = new FileWriter("D:\\out.csv"); 

    for (int i = 0; i < codes.getNumRows(); i++) 
    { 
     codes.setRow(i); 

    } 


    codes.firstRow(); 
    for (int i = 0; i < codes.getNumRows(); i++, codes.nextRow()) 
    { 
     function = destination.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL"); 
     if (function == null) 
      throw new RuntimeException("BAPI_COMPANYCODE_GETDETAIL not found in SAP."); 

     function.getImportParameterList().setValue("COMPANYCODEID", codes.getString("COMP_CODE")); 
     function.getExportParameterList().setActive("COMPANYCODE_ADDRESS",false); 

     try 
     { 
      function.execute(destination); 
     } 
     catch (AbapException e) 
     { 
      System.out.println(e.toString()); 
      return; 
     } 

     returnStructure = function.getExportParameterList().getStructure("RETURN"); 
     if (! (returnStructure.getString("TYPE").equals("") || 
       returnStructure.getString("TYPE").equals("S") || 
       returnStructure.getString("TYPE").equals("W"))) 
     { 
      throw new RuntimeException(returnStructure.getString("MESSAGE")); 
     } 

     JCoStructure detail = function.getExportParameterList().getStructure("COMPANYCODE_DETAIL"); 

有關如何通過指定表名和列來訪問SAP表的任何幫助,我們都非常感謝。由於提前

回答

0

爲了只通過指定只是表名和列訪問SAP表中,使用RFC RFC_READ_TABLE

  • 參數QUERY_TABLE(經由RFC R/3表外部訪問) - 指定表這裏命名爲
  • (可選)參數ROWSKIPS - 跳過第一個記錄
  • (可選)參數ROWCOUNT - 最大行數被加載,對於PERF ormance考慮