从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的值?

从C#运行Crystal Reports 2011报表时处理可选参数

好的,所以我最终通过SAP社区网络找到了如何通过编程将可选参数设置为"非值"的确切方法。

我只需要写:

    cryRpt.ParameterFields["UserProfile"].CurrentValues.IsNoValue = true;

完美工作,触发记录选择公式中所需的代码路径。