Проблема формата DateTime для параметра отчета в веб-службе отчетов SSRS, а не в элементе управления отчетом - PullRequest
0 голосов
/ 19 августа 2011

Я хочу использовать C # для чтения всех параметров из отчета через веб-службу отчетов SSRS. Но у меня проблема при чтении параметра DateTime. Параметр в файле rdl представлен в британском формате, но он становится американским форматом в C #.

Edit:

Я попытался установить культуру с помощью приведенного ниже кода, но он по-прежнему НЕ работает:

 //set it before instantiating ReportingService2010 instance. 
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
  Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB"); 

 //set it when reading a date type value
  Console.WriteLine("{0} {1} {2}", dateTime.Year, dateTime.Month, dateTime.Day);
  Console.WriteLine(dateTime.ToString("yyyy-MM-dd"));
 Console.WriteLine(dateTime.ToString("yyyy-MM-dd", new CultureInfo("en-GB", false)));

Формат даты правильный, когда используется элемент управления просмотра отчетов . Когда параметр считывается через элемент управления средства просмотра отчетов, значение даты уже является правильным (дд / мм / гггг). Однако, когда тот же параметр считывается через веб-службу отчетов, это же значение имеет другой формат (MM / dd / YYYY). Я думаю, что это причина того, что настройка культуры не работает.

Ниже мой код:

ReportingService2010 rs = new ReportingService2010();
      rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

      string report = "/SampleReports/Employee Sales Summary";
      bool forRendering = false;
      string historyID = null;
      ParameterValue[] values = null;
      DataSourceCredentials[] credentials = null;
      ItemParameter[] parameters = null;

      try
      {
         parameters = rs.GetItemParameters(report, historyID, forRendering, values, credentials);

         if (parameters != null)
         {
            foreach (ItemParameter rp in parameters)
            {
string value = parameter.DefaultValues.FirstOrDefault(); //it becomes US format here
               Console.WriteLine("Name: {0}",value);
            }
         }
      }

      catch (SoapException e)
      {
         Console.WriteLine(e.Detail.InnerXml.ToString()); 
      }

ReportingService2010.GetItemParameters Метод

Доступ к SOAP API

Есть идеи?

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Мне нужно создать частичный класс вместе с сгенерированным классом ReportingService и переопределить метод GetWebRequest, а затем добавить заголовок Accept-Language в веб-запрос. Вот пример класса:

public partial class ReportingService

{

 protected override System.Net.WebRequest GetWebRequest(Uri uri)
    {
        WebRequest request = base.GetWebRequest(uri);

        request.Headers.Add(HttpRequestHeader.AcceptLanguage, CultureInfo.CurrentCulture.Name);

        return request;
    }

}
1 голос
/ 19 августа 2011

Сначала проверьте, какое свойство языка содержится в самом отчете.Если это правильно, попробуйте установить культуру кода C #:

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