(二)通過JAVA呼叫SAP介面 (增加一二級引數)
(二)通過JAVA呼叫SAP介面 (增加一二級引數)
一、建立sap連線
請參考我的上一篇部落格
ofollow,noindex">JAVA連線SAP二、測試專案環境準備
- 在上一篇操作下已經建好的環境後,在上面的基礎上新增類即可
三、原始碼編寫及測試
首先建立用來傳遞資料的實體類SapData,方便直接取出資料進行下一步處理
SapData
/** * Created by [email protected] on 2018/12/5 */ public class SapData { // 列數 private int fieldCount; // 列的具體名稱 private String[] fieldNames; // 全部資料 private List<Map<String, String>> data; public SapData(int fieldCount, String[] fieldNames, List<Map<String, String>> data) { this.fieldCount = fieldCount; this.fieldNames = fieldNames; this.data = data; } public SapData() { } public int getFieldCount() { return fieldCount; } public void setFieldCount(int fieldCount) { this.fieldCount = fieldCount; } public String[] getFieldNames() { return fieldNames; } public void setFieldNames(String[] fieldNames) { this.fieldNames = fieldNames; } public List<Map<String, String>> getData() { return data; } public void setData(List<Map<String, String>> data) { this.data = data; } @Override public String toString() { return "SapData{" + "fieldCount=" + fieldCount + ", fieldNames=" + Arrays.toString(fieldNames) + ", data=" + data + '}'; } }
然後編寫用來從sap連線中獲取資料的工具類 MultiFromSAP
編寫連線類 MultiFromSAP 下面是原始碼
/** * Created by [email protected] on 2018/12/4 */ public class MultiFromSAP { /** * description: 從sap獲取資料的工具類 * * @date 2018/12/6 10:17 AM * @author [email protected] * @param sapConn sap連線 * @param interfaceName 介面名稱 * @param firstParamKey 一級引數key 用逗號分隔 * @param firstParamValue 一級引數value 用逗號分隔 * @param secondParamKey 二級引數key 用逗號分隔 * @param secondParamValue 二級引數value 用逗號分隔 * * @return List */ public static List<SapData> getSapData(SapConn sapConn, String interfaceName, String firstParamKey, String firstParamValue, String secondParamKey, String secondParamValue) { List<SapData> returnList = new ArrayList<SapData>(); JCoFunction function; JCoDestination destination = SAPConnUtils.connect(sapConn); System.out.println("正在從SAP獲取資料"); try { // 呼叫interface函式 function = destination.getRepository().getFunction(interfaceName); // 遍歷全部得到的table並處理 for (JCoField field : function.getTableParameterList()) { // 按照需求可以整理出一條一條的資料以便插入資料庫 JCoTable responseTable = field.getTable(); // 一級引數 if("".equals(firstParamKey) || "".equals(firstParamValue)) { // 不需要引數 }else { String[] paramKeys = firstParamKey.split(","); String[] paramValues = firstParamValue.split(","); for (int i = 0; i < paramKeys.length; i++) { function.getImportParameterList().setValue(paramKeys[i], "null".equals(paramValues[i]) ? "" : paramValues[i]); } } // 二級引數 if("".equals(secondParamKey) || "".equals(secondParamValue)) { // 不需要引數 }else { responseTable.appendRow(); String[] paramKeys = secondParamKey.split(","); String[] paramValues = secondParamValue.split(","); for (int i = 0; i < paramKeys.length; i++) { responseTable.setValue(paramKeys[i], "null".equals(paramValues[i]) ? "" : paramValues[i]); } } // 呼叫函式得到返回結果(呼叫介面把值放到function中) function.execute(destination); // 獲取metaData(包含表的關鍵資訊) JCoRecordMetaData metaData = responseTable.getRecordMetaData(); SapData sapData = new SapData(); sapData.setFieldCount(metaData.getFieldCount()); String[] name = new String[sapData.getFieldCount()]; List<Map<String, String>> sapList = new ArrayList<Map<String, String>>(); // 獲取全部名稱 for (int j = 0; j < sapData.getFieldCount(); j++) { name[j] = metaData.getName(j); } sapData.setFieldNames(name); // 獲取全部資料 for (int i = 0; i < responseTable.getNumRows(); i++) { responseTable.setRow(i); Map<String, String> sapMap = new HashMap<String, String>(); for (String fieldName : sapData.getFieldNames()) { sapMap.put(fieldName, responseTable.getString (fieldName)); } sapList.add(sapMap); } sapData.setData(sapList); returnList.add(sapData); } }catch (Exception e) { e.printStackTrace(); return null; } System.out.println("獲取成功"); return returnList; } }
接下來編寫一個簡單的測試類testData
/** * Created by [email protected] on 2018/12/9 */ public class testData { public static void main(String[] args) { final String interfaceName = "xxx"; // 一級引數 final String firstParamKey = "xx"; final String firstParamValue = "xx"; // 二級引數 final String secondParamKey = "xx"; final String secondParamValue = "xx"; SapConn con = new SapConn( "xx", "xx", "xx", "xxx", "xxx", "xx", "xx", "xx", "xxx" ); // 測試資料 MultiFromSAP.getSapData(con, interfaceName, firstParamKey, firstParamValue, secondParamKey, secondParamValue); } }
如果出現空指標或者取到了結果但是是空值,那麼表明取數為空或者不成功,請檢查一級引數或者二級引數是否正確。
此時如果呼叫結果如下則表明取數成功,此時全部資料封裝在實體中,直接操作實體便可以操作。