ParameterFieldCurrentValueException, когда данные не сохраняются с отчетом и не экспортируются в PDF - PullRequest
2 голосов
/ 26 января 2009

У меня есть отчет, который я создал с помощью Crystal Reports 2008. Этот отчет использует более 40 параметров для управления макетом отчета. Все параметры являются логическими и по умолчанию имеют значение False в сохраненном отчете. Отчет сохраняется с сохранением данных с параметром отчета , не отмеченным , поскольку я хочу читать результаты из базы данных, а не из отчета.

Однако при экспорте отчета в PDF я получаю исключение ParameterFieldCurrentValueException. Я не получаю эту ошибку при сохранении данных вместе с отчетом.

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

foreach (Table table in reportDoc.Database.Tables)
{
   bool isConnected = table.TestConnectivity();
   Console.WriteLine(table.Name + " connected? " + isConnected.ToString());
}

Что может вызывать ParameterFieldCurrentValueException, когда данные не сохраняются вместе с отчетом и экспортируются на диск?

Это самый простой код, который может воспроизвести эту проблему.

string report =  "list_report.rpt";
string pdf = "list_report.pdf";

ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(report);

// Setting parameters (or not) does not have an effect on the error
// All parameters have defaults
// reportDoc.SetParameterValue("hideRegion", false);

reportDoc.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, pdf);

Ответы [ 3 ]

4 голосов
/ 28 января 2009

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

Ошибка предполагает, что одно или несколько значений параметров, передаваемых вами во время выполнения, не соответствуют ожидаемому в отчете. В вашем коде вы экспортируете в PDF напрямую. Поскольку вы не просматриваете отчет, у движка нет возможности запросить пропущенные значения.

Вы можете создать простое приложение для Windows, которое загружает ваш отчет и передает его в элемент управления Crystal Report Viewer. Начните с того, что не будете передавать какой-либо параметр в отчет без сохраненных данных. Вам должны быть предложены все ваши параметры. Добавьте их вручную в форме подсказки параметров. Это работает? Должно. Теперь начните добавлять код параметра по одному. Форма запроса параметров должна просто запрашивать параметры, которые отсутствуют. В какой-то момент вы снова получите ошибку, и это должно помочь сузить проблему.

С уважением,

Дэн Келлехер

1 голос
/ 28 января 2009

Этот ответ не мой, это джентльмен на форумах Crystal Reports. Эту публикацию можно найти на SAP Forum Ответ был:

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

Ошибка предполагает, что один или несколько значения параметров, которые вы передаете не соответствует содержанию отчета ожидая. Так как вы не просматриваете отчет нет возможности для двигатель подсказать о пропаже значения.

Вы можете построить простые окна приложение, которое загружает ваш отчет. Начните с передачи какого-либо параметра отчет без сохраненных данных. Вы должно быть предложено для всех ваших параметры. Добавьте их вручную в Форма подсказки параметров. Это работает? Должно. Теперь начните добавлять параметр код по одному. Параметр форма подсказки должна просто запросить параметры, которые отсутствуют. Некоторые указать, что вы снова получите ошибку и это должно помочь сузить выпуск.

Затем я загрузил отчет в элемент управления Crystal Report Viewer. Когда это загрузило, это побудило меня для любых отсутствующих параметров, которые я имел. Я пропустил один параметр в списке из 40 с лишним параметров, который вызывал ошибку. Код для этого:

ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(")list_report.rpt";
Form1.SetParameterValues(reportDoc);

this.crystalReportViewer1.ReportSource = reportDoc;

Если указанное лицо ответит на переполнение стека этим ответом, я выберу его сообщение в качестве ответа, чтобы надлежащим образом указать источник.

0 голосов
/ 27 января 2009

Это не будет легко решить!

Как насчет предоставления значений по умолчанию для всех ваших параметров перед сохранением? Вы получаете ту же ошибку? Если нет, то вам придется попробовать каждый из них, чтобы найти тот, который вызывает проблемы. Я думаю, вы где-нибудь закончите значением параметра, используемым в формуле ...

PS: даже если это не имеет никакого отношения к вашей проблеме, меня смущает использование ключевого слова CR «формула» в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...