任何人都可以提供有關如何執行此操作的說明?我有幾個不同的JDBC數據源設置,並希望能夠配置用戶使用不同的數據源運行相同的報告。例如。當用戶A登錄並運行報告A時,使用數據源1;當用戶B登錄並運行報告A時,使用數據源2。我正在使用4.0版本。JasperReports服務器:根據用戶切換JDBC數據源
回答
JasperReports服務器中沒有內置功能可以這樣做。您需要實現一個可用作JDBC數據源包裝的Java擴展。該包裝將利用爲每個用戶選擇的現有連接或用戶對象本身將所需信息傳遞給數據源。 This article可能適用於較早的版本,但可以引導您朝着正確的方向前進。自定義數據源
更多細節一般你也可以找到在JasperReports的服務器安裝樣品/ customDataSource文件夾(的JasperServer安裝目錄/樣品)
像這樣的東西可以通過使用多租戶實現JasperReports服務器版本。你將有2個(或更多)租戶/公司,用戶被分配到不同的公司。登錄用戶時只能看到屬於該公司的報告/資源。這樣,每個公司可以擁有不同的數據源,每個公司都有相同的報告設置,但每個報告單位都會指向相應的數據源。 如果您擔心重複報告,但將常見報告JRXML資源文件放入可由兩家公司(例如根級)看到的公用文件夾中,並讓報告單元將這些文件稱爲子報告。
現在看起來有可能,儘管可能不是每個用戶,但每個角色更多。所以你可以設置一堆數據源,例如對於角色admin,manager,user,guest,然後爲用戶使用適當的數據源。
Switching A DataSource Based On A User - JasperSoft Community Wiki
該實施例顯示瞭如何使用在JasperReports的服務器一個 自定義數據源來切換每個用戶JDBC數據源。該示例適用於 JasperReports的服務器版本3.5.1
\ WEB-INF \的applicationContext-customds.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="SwitcherDS" class="com.jaspersoft.ps.examples.SwitchingDataSourceFactory" > <property name="repositoryService"> <ref bean="repositoryService"/> </property> <property name="dataSourceServiceFactories"> <ref bean="dataSourceServiceFactories"/> </property> </bean> </beans>
自定義數據源需要 ReportDataSourceService接口的實現
public void setReportParameterValues(Map parameterValues) { MetadataUserDetails userDetails = (MetadataUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String userName = userDetails.getUsername(); // obtain a connection based on the username. String dataSourceURI = "/datasources/test2"; if (userName.equalsIgnoreCase("jasperadmin")) { dataSourceURI = "/datasources/ds_1"; } connection = getRepositoryDatasource(dataSourceURI); try { parameterValues.put(JRParameter.REPORT_CONNECTION, connection.getDataSource().getConnection()); } catch (SQLException sqle){ sqle.printStackTrace(); } }
我正在使用JasperReports服務器版本6.2,這是完美的因爲用戶具有屬性,並且可以在數據源連接設置中引用這些屬性。
例如,您不會爲您的數據庫主機設置特定的IP地址。相反,你會引用用戶屬性(屬性可以爲用戶定義或繼承自組織或服務器本身):
host = {attribute('dbHost')}
或
host = {attribute('dbHost', 'User')}
前者試圖找到整個屬性層次結構(用戶>組織>父組織>服務器)。後者希望找到在用戶級定義的屬性。
你可以找到JasperReports的服務器的部分4.1管理指南這裏一個完整的解釋:
- 1. 如何在JasperReports服務器中創建多個數據源?
- 2. 由應用服務器實現的JDBC數據源
- 3. 根據服務器生成的數據驗證用戶輸入
- 4. JDBC連接到服務器數據庫
- 5. 由服務器管理的JDBC數據源?
- 6. JasperReports服務器
- 7. Odp.Net - 根據客戶和服務器
- 8. JasperReports的 - XML數據源
- 9. 如何根據輸入控件切換CSV數據源?
- 10. XPage使用JDBC數據的REST服務
- 11. 如何在服務器設置期間切換出根帳戶?
- 12. 切換服務器
- 13. 同時使用AbstractRoutingDataSource切換數據源
- 14. 「反向」WCF服務(根據客戶定義構建服務器)
- 15. 根據登錄用戶的憑據動態切換到不同的數據庫?
- 16. 報告是否有可能基於JasperReports服務器中的用戶建立動態數據源連接?
- 17. 如何通過API訪問JasperReports服務器的數據庫?
- 18. 根據條件切換自動佈線服務?
- 19. WSO2數據業務服務器 - 添加自定義數據源
- 20. ASP.NET服務器控件 - 數據源
- 21. 切換到服務器端分頁後顯示網格數據
- 22. 我如何允許用戶切換SSRS報告的數據源?
- 23. 根據值切換類
- 24. 更改數據源WCF數據服務
- 25. 根據來自服務器的數據對錶應用顏色?
- 26. 數據庫鏈接與JDBC數據源
- 27. JasperReports:根據組計數頁面
- 28. 使用MySQL的服務器 - 客戶端數據交換(VB.Net)
- 29. 用WCF數據服務在服務器端用戶篩選
- 30. SQL服務器異常:使用jdbc連接檢索數據時