问题:报告模板是由管理员用户创建的,管理员用户只决定将哪些数据显示在业务用户指定的数据过滤器的位置。用更简单的 SQL 术语来说,查询由管理员用户指定,业务用户指定 WHERE 子句。
Jasper 允许用户在 SQL 查询中指定参数,例如 $P{city}。我尝试使用链接中指定的方法动态检索查询。
可能的解决方案是
- 在 JRXML 中使用 WHERE 子句参数并在创建报告时替换它们 - 这将节省我的 SQL 解析,但我不想用这种复杂性来指导管理员用户。解析不是一个大问题。
- 使用我的自定义 jdbc 查询执行器和工厂,仅在 jasper fire SQL 查询之前创建允许我扩展点。我将完全依赖 vanilla Jasper JDBC 数据源,但只会在执行前修改查询。JRAbstractQueryExecuter 简化了查询并在触发查询之前替换了与 jasper 相关的令牌 - 这将非常肮脏,并且将迫使我成为特定于实现的。
- 在我的应用程序代码库中执行与 JRAbstractQueryExecuter 中相同的替换,解析 SQL 查询,修改它并按照链接中的指定再次设置它
你能建议一个更好的方法吗?我有一种感觉,这绝对可以以更清洁的方式完成。
谢谢你的帮助