从C#运行Crystal Reports 2011报表时处理可选参数
本文关键字:处理 参数 报表 2011 运行 Crystal Reports | 更新日期: 2023-09-27 18:24:31
我正在使用VS 2010在C#中编写一个自定义调度工具,以执行和导出许多Crystal Reports 2011 rpt文件。目前,这些报告是从CR Developer中手动执行的,有些报告具有可选参数,在运行时可以保留为空,这些参数由报告中记录选择公式中的CR"HasValue()"函数处理。
我已经开发了一个原型应用程序来执行和导出其中一个报告,并且可以毫无问题地传递参数值:
// Set up the Parameter/s
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crUserProfileValue = new ParameterDiscreteValue();
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["UserProfile"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crUserProfileValue.Value = "SIPRECLK";
crParameterValues.Add(crUserProfileValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
这将在报告PDF和XLS导出中提供所需的结果。
然而,这个UserProfile参数在报告中被标记为可选,我无法确定如何将其设置为空值,以模拟用户在使用CR Developer手动执行报告时将该参数字段留空。
我已经尝试设置crUserProfileValue.Value="和String.Empty,但这两个值都被视为实际的参数值,当在记录选择公式中使用时,无法匹配数据源中的任何记录,导致空报告。
如果我设置crUserProfileValue.Value=null,则在以下位置引发异常:
crParametersFieldDefinition.ApplyCurrentValues(crParameterValues);
说明"参数字段类型和参数字段当前值不兼容。"
我还尝试过不将crUserProfileValue添加到crParameterValues集合,但在执行报告时遇到"缺少参数值"异常。
如何以编程方式将报表中定义为"可选"的参数值设置为会导致CR HasValue()函数在记录选择公式中返回FALSE的值?
好的,所以我最终通过SAP社区网络找到了如何通过编程将可选参数设置为"非值"的确切方法。
我只需要写:
cryRpt.ParameterFields["UserProfile"].CurrentValues.IsNoValue = true;
完美工作,触发记录选择公式中所需的代码路径。