問題:レポートテンプレートは、データのフィルターがビジネスユーザーによって指定されているため、表示するデータのみを決定する管理ユーザーによって作成されます。より簡単なSQL用語では、クエリは管理者ユーザーによって指定され、ビジネスユーザーはWHERE句を指定します。
Jasperを使用すると、ユーザーは$P{city}などのSQLクエリでパラメータを指定できます。リンクで指定されたメソッドを使用して、クエリを動的に取得しようとしました。
考えられる解決策は
- JRXMLでWHERE句のパラメーターを使用し、レポートの作成中にそれらを置き換えます-これによりSQLの解析が節約されますが、管理者ユーザーにこの複雑さを教えたくありません。構文解析は大きな問題ではありません。
- カスタムjdbcクエリエグゼキュータとファクトリを使用します。これは、jasperがSQLクエリを実行する前に拡張ポイントを許可するためにのみ作成されています。私はバニラジャスパーJDBCデータソースに完全に依存しますが、実行前にクエリを変更するだけです。JRAbstractQueryExecuterは、クエリを単純化し、クエリを実行する前にjasper関連のトークンを置き換えます-これは非常に汚く、実装固有である必要があります。
- アプリケーションコードベースのJRAbstractQueryExecuterで行われるのと同じ置換を行い、SQLクエリを解析し、変更して、リンクで指定されているように再設定します。
これを行うためのより良い方法を提案できますか?これは間違いなくよりクリーンな方法で行うことができると私は感じています。
ご協力いただきありがとうございます