Java调用Crystal Reports已设必填参数仍提示缺失参数
问题:Crystal Report旧SDK生成PDF时日期参数导致"Missing parameter values"报错
背景
因限制需使用旧SDK通过BO生成Crystal Report PDF,某报表包含2个必填日期参数、4个可选参数,但持续报错:
Can not create temp file: Missing parameter values.
已完成的排查操作
- 验证参数属性
已通过以下代码遍历并输出所有参数的属性(日志确认必填参数标识正确):
PropertyBag propertyBag = new PropertyBag(); propertyBag.put("IncludeDynamicOnly", "false"); Fields<?> fields = paramController.getPromptParameterFields(propertyBag);
遍历输出参数属性的日志代码:
log.info("name: '{}'", f.getName()); log.info("type: '{}'", f.getType().toString()); log.info("multi-value: {}", f.getAllowMultiValue()); log.info("hasValue: {}", hasValue); log.info("allow null: {}", f.getAllowNullValue()); log.info("required: {}", isRequired); log.info("kind: '{}'", f.getKind().toString());
- 设置必填参数值
已为两个必填日期参数设置值:
ParameterFieldController parameterFieldController = reportDocument.getDataDefController().getParameterFieldController(); parameterFieldController.setCurrentValue("", "From Posted Date", Date.valueOf("1950-01-01")); parameterFieldController.setCurrentValue("", "To Posted Date", Date.valueOf("2099-12-31"));
- 其他确认项
- 确认报表无嵌套子报表
- 无日期参数的报表可正常生成,报错与"From Posted Date"和"To Posted Date"两个日期参数强相关
已尝试的日期参数设置方式
- 使用字符串格式:
paramCtrl.setCurrentValue(... "yyyy-MM-dd") - 使用字符串格式:
paramCtrl.setCurrentValue(... "mm/dd/yyyy") - 使用
java.util.Date对象传递 - 使用
java.sql.Date对象传递 - 使用
java.sql.Timestamp对象传递 - 使用
ParamFieldDiscreteValue包装上述日期类型传递
求排查解决线索
内容的提问来源于stack exchange,提问作者kailoon
相关产品推荐
相关产品推荐

