我正在从 java 调用Crystal Reports API来运行报告。
在此报告中,我有一个看起来像这样的查询过滤器
{Employee.Type} <> "P" and
{Employee.HireDate} IN {?FromDate} TO {?ToDate} and
{@HAS_TAKEN_TIME_OFF}
其中@HAS_TAKEN_TIME_OFF
是布尔返回的Crystal Report 公式字段。此公式字段对其他几个表执行计算,以计算出此布尔结果。
生成的sql看起来像这样
("Employee"."Type"<>'P' AND
("Employee"."HireDate">=convert(datetime,'20110101 00:00:00.000') AND
"Employee"."HireDate"<convert(datetime,'20120101 00:00:00.000'))
AND ())
显然,尾随AND ()
是无效的sql并且不代表应该在其位置的计算,并且因为这是从java执行的,所以sql是从API创建的,并发送到db没有Crystal Reports界面。
在我的java代码中,我当然可以通过使用函数中的代码递归替换任何函数来对此过滤器文本执行我自己的替换。我相信这实际上是水晶报告API的工作,我可能只是错误地使用这个api。
水晶报告java api需要从java生成正确的sql,以便正确包含函数吗?我是否真的需要为水晶报告做这项工作?