日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP JCO connector 例子

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP JCO connector 例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SAP JCO connector3與SAP 通過RFC的方式建立連接以及數據交互的例子。

步驟:

  • 初始化連接用戶名,密碼,連接池等信息

sap-conig.properties文件:

#notes:更多配置項@see com.sap.conn.jco.ext.DestinationDataProvider #客戶端編號 jco.client.client=830 #用戶名 jco.client.user= #密碼 jco.client.passwd= #語言 jco.client.lang=ZH #IP jco.client.ashost= #系統編號 jco.client.sysnr=10 #最大空閑連接數 jco.destination.pool_capacity=1000 #超時 jco.destination.max_get_client_time=100 #最大活動連接數 jco.destination.peak_limit=1000

SapJcoStore.java 初始化

/*** 初始化SAP連接* @param fdPoolName* @return* @throws Exception*/private static synchronized JCoDestination doInitialize(String fdPoolName)throws Exception {Properties sapConfig=new Properties();// Properties的配置項@see com.sap.conn.jco.ext.DestinationDataProviderInputStream is=SapJcoStore.class.getResourceAsStream("/com/test/share/sap/sap-config.properties");sapConfig.load(is); // 擴展參數,需要擴展參數的時候使用sapConfig.setProperty((String)DestinationDataProvider.class.getField("JCO_SAPROUTER").get(DestinationDataProvider.class),"/H/219.141.250.71/H/");createDataFile(fdPoolName, "jcoDestination", sapConfig);JCoDestination destination=getDestination(fdPoolName);return destination;}/*** 創建連接文件(必須)* @param name* @param suffix* @param properties*/private static void createDataFile(String name, String suffix, Properties properties) {File cfg = new File(name + "." + suffix);try {FileOutputStream fos = new FileOutputStream(cfg, false);properties.store(fos, "for connection");fos.close();} catch (Exception e) {throw new RuntimeException("Unable to create the destination file "+ cfg.getName(), e);}}
  • 建立連接池
public static Hashtable<String, JCoDestination> destinations = new Hashtable<String, JCoDestination>();/*** 獲取連接池,利用JCoDestinationManager創建連接池放到表中** @param fdPoolName* @return* @throws Exception*/public static JCoDestination getDestination(String fdPoolName) throws Exception {JCoDestination destination = null;if (destinations.containsKey(fdPoolName)) {destination = destinations.get(fdPoolName);} else {destination = JCoDestinationManager.getDestination(fdPoolName);destinations.put(fdPoolName, destination);}return destination;}
  • 通過連接池獲取BAPI傳輸對象JCOFunction
/*** 根據連接池,rfc 名稱獲取rfc函數模板** @param rfcName* @param poolName* @return* @throws Exception*/public static JCoFunctionTemplate getRfcTemplate(String rfcName,String fdPoolName) throws Exception {JCoDestination destination = SapJcoStore.getDestination(fdPoolName);JCoRepository repository = null;try {repository = destination.getRepository();} catch (Exception e) {destination = JCoDestinationManager.getDestination(fdPoolName);SapJcoStore.destinations.remove(fdPoolName);SapJcoStore.destinations.put(fdPoolName, destination);repository = destination.getRepository();}JCoFunctionTemplate template = repository.getFunctionTemplate(rfcName);return template;}/*** 根據RFC 函數名稱,連接池獲取函數* @param rfcName* @param fdPoolName* @param store* @return* @throws Exception*/public static JCoFunction getRfcFunction(String rfcName, String fdPoolName) throws Exception {JCoFunctionTemplate template = getRfcTemplate(rfcName, fdPoolName);return template.getFunction();}
  • 填充數據-->execute

填充數據有import 跟table 2種

/*** 填充數據,根據上面表格* 在SAP中間件其實也就是解析在填充數據這里加工很多配置,實現同理**/public static JCoFunction fillData(JCoFunction jcoFunc){JCoRecord record =jcoFunc.getImportParameterList();// 構造業務數據Map<String, Object> importData=new HashMap<String, Object>();importData.put("COMPANYCODE", "8880");importData.put("CUSTOMER", "0099000032");importData.put("KEYDATE", "20070830"); // 填充傳入值for(String key:importData.keySet()){Object value=importData.get(key);record.setValue(key, value);}// 上面構造數據只有傳入的參數數據,下面是傳入table的數據/*設置值JCoTable jcoTable= jcoFunc.getTableParameterList().getTable("");for(){// 增加一行數據,同時游標也只想了當前行jcoTable.appendRow(); // 設置當前行的某個列的值jcoTable.setValue("", "");jcoTable.setValue("", "");....}*/return jcoFunc;}

execute

/**** @param poolName 連接池名稱* @param function 傳輸的帶數據JCoFunction對象* @return* @throws Exception*/public Object processSap(String poolName, JCoFunction function)throws Exception {doBefore();try {parsePostData(function);JCoFunction func = execFunc(function, poolName);Object rtn = parseRtnData(func);return rtn;} catch (Exception e) {doError(e);} finally {doAfter();}return null;}
  • 處理返回值 主要是遍歷,游標的處理
/**** @param jcoFunction* @param tableName*/public static void resultPrint(JCoFunction jcoFunction,String tableName){// 需要打印的列名稱List<String> printKey=new ArrayList<String>();printKey.add("COMP_CODE");printKey.add("CUSTOMER");printKey.add("SP_GL_IND");printKey.add("ITEM_TEXT");// 得到tableJCoTable table =jcoFunction.getTableParameterList().getTable(tableName); // 取得行int rows=table.getNumRows();for(int i=0,len=rows;i<len;i++){ // 游標移動到rowtable.setRow(i);JCoFieldIterator iterator = table.getFieldIterator();while (iterator.hasNextField()) {// System.out.println(parameterField.getName()+"JCoFieldIterator");JCoField recordField = iterator.nextField();String fieldName=recordField.getName(); // 過濾不需要的字段if(!printKey.contains(fieldName)){continue;}// 取值打印 // Object value=recordField.getValue();String val_str=recordField.getString();System.out.print(val_str+" ");}System.out.print("\n====================================\n");}

demo例子

https://github.com/tian-github/sapjco3_demo

總結

以上是生活随笔為你收集整理的SAP JCO connector 例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。