誰かがこれを行う方法についての指示を提供できますか?いくつかの異なるJDBCデータソースを設定していて、異なるデータソースを使用して同じレポートを実行するようにユーザーを構成できるようにしたいと考えています。たとえば、ユーザーAがログインしてレポートAを実行すると、データソース1が使用されます。ユーザーBがログインしてレポートAを実行すると、データソース2が使用されます。バージョン4.0を使用しています。
4 に答える
私は JasperReports Server のリリース 6.2 を使用していますが、ユーザーには属性があり、データソース接続設定でこれらの属性を参照できるため、これは完全に可能です。
たとえば、DB ホストに特定の IP を設定しません。代わりに、ユーザー属性を参照します (属性は、ユーザーに対して定義するか、組織またはサーバー自体から継承することができます)。
host = {attribute('dbHost')}
また
host = {attribute('dbHost', 'User')}
前者は、階層全体 (ユーザー > 組織 > 親組織 > サーバー) で属性を見つけようとします。後者は、ユーザーレベルで定義された属性を見つけることを期待しています。
JasperReports Server Admin Guideのセクション 4.1とここで完全な説明を見つけることができます。
このようなことは、JasperReportsServerのマルチテナントバージョンを使用することで実現できます。2つ(またはそれ以上)のテナント/会社があり、ユーザーは別の会社に割り当てられます。ログオンすると、ユーザーにはその会社に属するレポート/リソースのみが表示されます。そうすれば、会社ごとに異なるデータソースを使用でき、各会社で同じレポートを設定できますが、各レポートユニットはそれぞれのデータソースを指します。レポートの重複が心配な場合でも、共通のレポートJRXMLリソースファイルは、両方の会社(ルートレベルなど)で表示できる共通のフォルダーにあり、レポートユニットはこれらをサブレポートと呼びます。
JasperReports Server には、そうするための組み込み機能はありません。JDBC データソースのラッパーとして機能する Java 拡張機能を実装する必要があります。このラッパーは、ユーザーごとに選択された既存の接続またはユーザー オブジェクト自体を利用して、必要な情報をデータソースに渡します。この記事は以前のバージョンを対象としている可能性がありますが、正しい方向に導くことができます。
一般的なカスタム データソースの詳細は、JasperReports Server インストールの samples/customDataSource フォルダ (jasperserver-install-dir/samples) にもあります。