Как устранить ошибку: для этого отчета требуется значение по умолчанию или пользовательское значение для параметра отчета '*' - PullRequest
0 голосов
/ 15 июня 2009

Я получаю сообщение об ошибке:

This report requires a default or user-defined value for the report parameter '*'. To run or subscribe to this report, you must provide a parameter value.

очень редко с моего сервера отчетов, даже когда заполняется значение '*'. Любые идеи или предложения, которые могут позволить мне отследить это? Некоторые баллы.

  • Я запускаю отчеты в четырех направлениях асинхронно (имеется в виду 4 потока, генерирующих отчеты одновременно).
  • В отчетах есть 2 предоставленных параметра (всегда предоставляются) и один производный параметр.
  • Я запускаю 1000 отчетов за сеанс с ~ 250 отчетами на поток.
  • Иногда ошибка появляется через несколько секунд, иногда через много часов.

    using System;
    using System.Globalization;
    using System.IO;
    using Cns.ReportExecution2005;
    
    public class PdfGenerator
    {
        private readonly ReportExecutionService reportExecutionService;
        public PdfGenerator(string executionServiceAddress)
        {
            // Create a new proxy to the web service
            this.reportExecutionService = new ReportExecutionService
                                              {
                                                  Credentials = System.Net.CredentialCache.DefaultNetworkCredentials,
                                                  Url = executionServiceAddress
                                              };
        }
        public Stream GenerateReport(string reportName, string format, ReportGeneratorParameter[] parameters)
        {
            if (reportName == null)
            {
                throw new ArgumentNullException("reportName");
            }
            if (format == null)
            {
                throw new ArgumentNullException("format");
            }
            this.reportExecutionService.LoadReport(reportName, null);
            if (parameters != null)
            {
                var executionParameters = new ParameterValue[parameters.Length];
                for (int i = 0; i < parameters.Length; ++i)
                {
                    executionParameters[i] = new ParameterValue
                    {
                        Label = parameters[i].Name,
                        Name = parameters[i].Name,
                        Value = Convert.ToString(parameters[i].Value, CultureInfo.InvariantCulture)
                    };
                }
                this.reportExecutionService.SetExecutionParameters(executionParameters, "en-us");
            }
            string extension;
            string encoding;
            string mimeType;
            Warning[] warnings;
            string[] streamIDs;
            byte[] results = this.reportExecutionService.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs);
            return new MemoryStream(results);
        }
    }
    

Ответы [ 4 ]

7 голосов
/ 03 января 2011

Для тех, кто ищет ответы на эту тему (поиск Google привел меня сюда), это также может быть вызвано тем, что параметр определен как «Из запроса», а не как «Не запрашивается». Затем, если вы передадите параметр, который недопустим в соответствии с запросом, вы можете получить эту ошибку. Например, у вас есть параметр с именем CustomerId, который представляется через веб-интерфейс как Select CustomerId, CustomerName from Customer Допустим, действительные идентификаторы клиентов в базе данных от 1 до 10. Если вы передаете параметр в c # со значением 24 (то есть вне этого диапазона), RS действует так, как если бы параметр никогда не передавался, поскольку обнаруживает, что он не находится в допустимом диапазоне. надеюсь, это поможет

4 голосов
/ 16 июня 2009

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

Тема A: Параметры настройки
Поток B: Параметры настройки
Поток A: Выполнить (используя параметры потока B)
Поток B: Выполнить (параметры не указаны, сгенерировано исключение)

Каждый поток будет нуждаться в своем собственном экземпляре класса PdfGenerator, так как каждый поток должен иметь свой собственный экземпляр ReportExecutionService

1 голос
/ 24 декабря 2013

В моем случае проблема заключалась в том, что доступные значения имели дополнительные пробелы в конце значения, поэтому «ABC001» не равнялся значению из запроса «ABC001», поэтому это было недопустимое значение, и он действовал так, как будто я никогда не отправлял параметр совсем. Я пошел в запросе, который строит доступные значения и урезал .. так мораль истории ... всегда урезал! лол.

1 голос
/ 28 февраля 2011

Наткнулся на этот вопрос: моя ситуация проще (без многопоточности, один отчет), но я получаю то же сообщение.

У меня есть две версии таблицы поиска, которые плохо синхронизированы (тема для другого поста). Один из параметров этого отчета ищет значения из этой таблицы. Поскольку синхронизация еще не произошла, в основном я передавал параметр без соответствующего значения. Сообщение об ошибке, которое я получал, было то, что я не предоставил параметр, когда, действительно, я указал «плохой» параметр. Разочарование.

...