2017-01-02 3 views
0

Я сделал проект обратной связи. Я сделал это на ASP.NET MVC 5, он также имеет хрустальные отчеты. отчеты работали нормально, но внезапно они перестали работать. Я не знаю, что с ними случилось. но с прошлой недели я очень старался найти решение, но, к сожалению, не смог найти правильного решения. Я загрузил разное время работы, но все шло напрасно. это нижняя строка ошибки.Метод Crsytal не найден

"Метод не найден: 'CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag CrystalDecisions.ReportAppServer.ReportDefModel.ISCRExportOptions.get_ExportOptionsEx()'" это код:

общественного CrystalReportFeedback UserFeedbackDateWise (FeedbackReport быть) {

 if (Session["CurrentUser"] != null && Convert.ToInt32(Session["User_Id"]) != 0) 
     { 
      string reportPath = Path.Combine(Server.MapPath("~/Reports"), "UserFeedbackReport.rpt"); 
      if (ModelState.IsValid) 
      { 
       be.FromDate = Convert.ToDateTime(TempData["UserFromDate"]); 
       be.ToDate = Convert.ToDateTime(TempData["UserToDate"]); 
       be.User_Id = Convert.ToInt32(Session["User_Id"]); 
      } 
      return new CrystalReportFeedback(reportPath, be); 
     } 
     else 
     { 
      return null; 
      //new CrystalReportFeedback(reportPath, be); 
     } 
    } 

Init отчета:

public CrystalReportFeedback(string reportPath, FeedbackReport be)//, object dataSet) 
     { 
      //int[] array; 
      string strConnect = Convert.ToString(System.Configuration.ConfigurationManager.ConnectionStrings["TSC"]); 
      SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConnect); 
      string _username = builder.UserID; 
      string _pass = builder.Password; 
      string _server = builder.DataSource; 
      string _database = builder.InitialCatalog; 
      ReportDocument reportDocument = new ReportDocument(); 
      // 
      reportDocument.Load(reportPath); 
      reportDocument.SetDatabaseLogon(_username, _pass, _server, _database); 
      if (be.Region_Id != 0) 
      { 
       reportDocument.SetParameterValue("@Region_Id", be.Region_Id); 
      } 
      if (be.User_Id != 0) 
      { 
       reportDocument.SetParameterValue("@User_Id", be.User_Id); 
      } 
      reportDocument.SetParameterValue("@FromDate", be.FromDate); 
      reportDocument.SetParameterValue("@ToDate", be.ToDate); 
      //reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "C:\report.pdf"); 
      _contentBytes = StreamToBytes(reportDocument.ExportToStream(ExportFormatType.PortableDocFormat)); 
     } 

Метод экспорт:

public override void ExecuteResult(ControllerContext context) 
    { 

     var response = context.HttpContext.ApplicationInstance.Response; 
     response.Clear(); 
     response.Buffer = false; 
     response.ClearContent(); 
     response.ClearHeaders(); 
     response.Cache.SetCacheability(HttpCacheability.Public); 
     response.ContentType = "application/pdf"; 

     using (var stream = new MemoryStream(_contentBytes)) 
     { 
      stream.WriteTo(response.OutputStream); 
      stream.Flush(); 
     } 
    } 

    private static byte[] StreamToBytes(Stream input) 
    { 
     byte[] buffer = new byte[16 * 1024]; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      int read; 
      while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       ms.Write(buffer, 0, read); 
      } 
      return ms.ToArray(); 
     } 
    } 

Надеется, что я получу решение в кратчайших сроках.

это модифицированный код:

[HttpGet]

public FileResult UserFeedbackDateWise(FeedbackReport be) 
    { 

     if (Session["CurrentUser"] != null && Convert.ToInt32(Session["User_Id"]) != 0) 
     { 
      string reportPath = Path.Combine(Server.MapPath("~/Reports"), "UserFeedbackReport.rpt"); 
      if (ModelState.IsValid) 
      { 

       be.FromDate = Convert.ToDateTime(TempData["UserFromDate"]); 
       be.ToDate = Convert.ToDateTime(TempData["UserToDate"]); 
       be.User_Id = Convert.ToInt32(Session["User_Id"]); 
      } 
      string strConnect = Convert.ToString(System.Configuration.ConfigurationManager.ConnectionStrings["TSC"]); 
      SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConnect); 
      string _username = builder.UserID; 
      string _pass = builder.Password; 
      string _server = builder.DataSource; 
      string _database = builder.InitialCatalog; 
      ReportDocument reportDocument = new ReportDocument(); 
      // 
      reportDocument.Load(reportPath); 
      reportDocument.SetDatabaseLogon(_username, _pass, _server, _database); 
      if (be.Region_Id != 0) 
      { 
       reportDocument.SetParameterValue("@Region_Id", be.Region_Id); 
      } 
      if (be.User_Id != 0) 
      { 
       reportDocument.SetParameterValue("@User_Id", be.User_Id); 
      } 
      reportDocument.SetParameterValue("@FromDate", be.FromDate); 
      reportDocument.SetParameterValue("@ToDate", be.ToDate); 

      Stream stream = reportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 

      //Here i have my stream with my pdf report, i just create a new FileStreamResult and return it to my client like that : 
      FileStreamResult myfile = new FileStreamResult(stream, "application/pdf"); 
      return myfile; 
       //new CrystalReportFeedback(reportPath, be); 
     } 
     else 
     { 
      return null; 
      //new CrystalReportFeedback(reportPath, be); 
     } 
    } 
+0

Просьба указать код, в котором вы загружаете свой отчет, и при его экспорте, спасибо – Furtiro

+0

Mr. @Furtiro см. Код –

+0

Последняя функция экспортирует отчет –

ответ

0

Это не проблема кодирования, это вопрос времени выполнения. Версия хрустального времени выполнения или биттичность вашего приложения.

Прежде всего, попробуйте обновить как свою версию разработки, так и убедиться, что вы используете ту же версию на производстве. См https://apps.support.sap.com/sap/support/knowledge/public/en/2148492 для более подробной информации

Он говорит:

Компиляция приложения либо «режим X86» или «режим X64» Установить конкретные версии среды выполнения на компьютере развертывания.

Т.е., если приложение скомпилировано как 32 бит, установите 32-битные промежутки времени выполнения.

+0

вы знаете, как я могу проверить версию visual studio 2013? потому что это мой официальный ноутбук, и все было уже установлено на этом ноутбуке. Можете ли вы плз руководство мне –

+0

Это версия кристалла, которую нужно обновить. Проверьте файл web.config, чтобы определить, какая версия приложения работает. Вы хотите быть в диапазоне 13.x и смотреть версию пакета поддержки. Вы можете скачать их с: https://blogs.sap.com/2016/12/06/sap-crystal-reports-developer-version-for-microsoft-visual-studio-updates-runtime-downloads/ – reckface

+0

да разрешено. была проблема с отвращением. –

0

Я буду стараться изо всех сил, чтобы помочь вам экспортировать отчет, но ваш пост не очень понятно. Для вашего следующего поста попробуйте быть очень конкретным и предоставить как можно больше информации.

В настоящее время я создал проект MVC и экспортирую отчет о Crystalreport от своего контроллера к моему клиенту.

Я думаю, что ваш метод ExecuteResult может работать, но работа с httpcontext бесполезна, Crystalreport и .NET предоставляют некоторые полезные методы для этого. Итак, я покажу вам, как я создаю и экспортирую свой отчет, чтобы вы могли копировать/вставлять и изменять свой код.

Вот мой метод управления, вызывается из кнопки:

[HttpGet] 
    public FileResult InitReport() 
    { 
    //I create my report here 
    FileImportReport rptH = new FileImportReport(); 

    // Some configuration on the report, datasource, databaselogon .. etc 
    ... 
    // 

    //Then I export my report to a pdf stream like that : 
    Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 

    //Here i have my stream with my pdf report, i just create a new FileStreamResult and return it to my client like that : 
    FileStreamResult myfile = new FileStreamResult(stream, "application/pdf"); 

    return myfile; 

    } 

Мой метод вызывается с помощью кнопки, но он может работать, как вы хотите, или файл может быть сохранен в любом известном пути.

Вы можете протестировать, чтобы воспроизвести мой код, в вашем методе CrystalReportFeedback используйте мой код с вашим объектом reportDocument, вам не нужно использовать ваш метод StreamToBytes.

С уважением,

EDIT: Полезные ссылки с вашей ошибки:

Crystal Reports exception in Visual Studio 2013

https://www.arcanadev.com/support/kb/K00000499.aspx

+0

Произошла такая же ошибка :( –

+0

Mr. @ Furtiro: '( –

+0

Какая строка вызывает эту ошибку? Я отредактировал свой ответ с помощью полезных ссылки, если рабочий код не работает, что может быть установкой Crystalreport или ошибкой времени выполнения (или, может быть, конфигурационной ошибкой) – Furtiro

Смежные вопросы