ASP.NET MVC Запуск Crystal Report прямо в PDF в обход Crystal Viewer - PullRequest
0 голосов
/ 03 ноября 2011

Что я пытаюсь сделать: - Запустите Crystal Report прямо в PDF (в обход программы просмотра) - Требуется вход в базу данных. - Требуется один параметр. Это отображается как @rpt_args в приложении CR 11. - Этот отчет Crystal вызывает процедуру Store для набора результатов.

Частичное решение

Мой код:

        ReportClass rptH = new ReportClass();         
        //rptH.FileName = Server.MapPath("whkinvc.rpt");      
        rptH.FileName = "D:\\whkinvc.rpt";      
        rptH.Load();        
        rptH.SetDatabaseLogon("FAKEUSER", "FAKEPASSWORD", "FAKESERVER", "FAKEDB");
        rptH.SetParameterValue("@rpt_args", atm.WorkingModel.Header.TicketNumber);         
        Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);         
        return File(stream, "application/pdf");

Я получаю ошибку при входе в базу данных. Правильно ли настроен мой код для выполнения искомого действия? Любая возможная причина сбоя входа в базу данных?

Спасибо

** Обновление **

Я работал через VS со следующим кодом (ошибка входа в базу данных была результатом опечатки):

        ReportClass rptH = new ReportClass();
        rptH.FileName = Server.MapPath(Url.Content("~/app_data/whkinvc.rpt"));
        rptH.Load();

        rptH.SetDatabaseLogon(...);

        ParameterValues xyz = new ParameterValues();
        ParameterDiscreteValue pdv = new ParameterDiscreteValue();
        pdv.Value = atm.WorkingModel.Header.TicketNumber;

        xyz.Add(pdv);
        rptH.DataDefinition.ParameterFields["@rpt_args"].ApplyCurrentValues(xyz);
        Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);         
        return File(stream, "application/pdf"); 

Я бы хотел, чтобы вывод перешел на новую вкладку или окно. В настоящее время он просто заменяет текущее окно.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Я получил его через VS с помощью следующего кода (ошибка входа в базу данных была результатом опечатки):

ReportClass rptH = new ReportClass();         
rptH.FileName = Server.MapPath(Url.Content("~/app_data/whkinvc.rpt"));         
rptH.Load();          
rptH.SetDatabaseLogon(...);          
ParameterValues xyz = new ParameterValues();         
ParameterDiscreteValue pdv = new ParameterDiscreteValue();         
pdv.Value = atm.WorkingModel.Header.TicketNumber;          
xyz.Add(pdv);         
rptH.DataDefinition.ParameterFields["@rpt_args"].ApplyCurrentValues(xyz);         
Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);                  
return File(stream, "application/pdf");  
0 голосов
/ 03 ноября 2011

В прошлом мне приходилось устанавливать строку подключения для каждой таблицы (или сохраненного процесса или чего-либо еще) в отчете, а также в каждой таблице в каждом подотчете.

Например:

(Предположим, что rd является экземпляром ReportDocument, а cn является подготовленным экземпляром ConnectionInfo)

void SetupConnection(ReportDocument rd, ConnectionInfo cn)
{

    foreach (Table t in rd.database.Tables)
    {
        TableLoginInfo li = t.LogOnInfo;
        li.ConnectionInfo = cn;
        t.ApplyLogOnInfo(li);
        t.Location = t.Location;
    }
    if (!rd.IsSubReport) 
    {
         foreach (ReportDocument sr in rd.SubReports)
             SetupConnection(sr,cn);
    }
}

Я понимаю, что некоторые из них не имеют большого смысла (например, t.Location = t.Location).Прошло много времени с тех пор, как я использовал его, но я считаю, что это было необходимо для его правильной работы.

...