首页 > 解决方案 > Crystal Reports XI 命令行

问题描述

我是 Crystal Reports 的新手,我希望加载 Crystal Reports 并刷新数据

步骤1

第2步

第 3 步

使用命令行。

基本上,我正在尝试编写一个 C# Windows 窗体应用程序来调用调用 Crystal Reports 的 .bat 文件,方法是传递参数来填充我为截图附加的窗口。

我的上级告诉我这是很有可能的,但是我从数小时的谷歌搜索中学到的东西是不太可能的,除非我使用第三方工具(主要是)或编写我自己的应用程序来完成我的任务。

我也对其他解决方案持开放态度,因为我需要一个解决方案列表来向我的上级提出建议,他坚持认为 Crystal Reports 本身具有命令行支持,无需外部工具或第三方库支持。

另外,我知道可以为 Visual Studio 2008 安装 Crystal Reports 运行时支持(我正在使用这个版本),但是,我被告知这是不可能的,因为整个过程是在 Windows Server 2003 PC 上完成的,并且不可能在那里安装任何东西。

无论如何,我为什么要开发一个 C# Windows 窗体应用程序来调用将参数传递给 Crystal Reports 的 .bat 文件?这是因为有人告诉我,Crystal Reports 对非程序员生成报告并不友好,我的意思是生成报告是刷新数据,如上图所示,然后打印出来。

基本上,开发 C# windows 窗体应用程序的一些附加功能是有一个包含所有商店代码的下拉框,因此非技术员工知道如何选择它而不会弄乱任何东西(听起来 50/50 合理和不合理我知道)或任何其他附加功能。

标签: c#visual-studio-2008crystal-reports.net-3.5sql-server-2000

解决方案


我创建了一个将 Crystal Report 文件呈现为 PDF 的解决方案,同时还填充(默认)参数并从此命令行应用程序设置登录信息:

https://github.com/gojimmypi/crMailer

将 PDF 保存到文件,如下所示:

crReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, OutputFileWithPath);

像这样分配的参数:

static void crAssignDefaultParameters()
{
    if (HasError)
    {
        VerboseWriteline("Skipping crAssignDefaultParameters after error was encountered.");
        return;
    }

    foreach (ParameterField item in crReportDocument.ParameterFields)
    {
        // Console.WriteLine("{0} In use? {1}", item.Name, crParameterInUse(item.Name));

        if (crParameterInUse(item.Name))
        {
            if (item.DefaultValues.Count == 0)
            {
                VerboseWriteline("Warning: no default value for " + item.Name + " assigned a value of empty string.");

                crReportDocument.SetParameterValue(item.Name, "");
            }
            else
            {
                VerboseWriteline("Assigned default value of " + item.DefaultValues[0] + " for " + item.Name + "." );
                crReportDocument.SetParameterValue(item.Name, ((CrystalDecisions.Shared.ParameterDiscreteValue)item.DefaultValues[0]).Value);
            }
        }
        else
        {
            VerboseWriteline("Skipping " + item.Name + ", assuming this is a linked subreport parameter for " + item.ReportName + ".");

        }
    }
}

推荐阅读