SSRS CreateSubscription - 设置区域设置

时间:2013-03-13 11:45:22

标签: ssrs-2008 reporting-services

我们有一个基于silverlight的自定义构建应用程序,它管理我们的报告订阅。问题是,无论何时添加新订阅,它都会将“订阅”表中的“区域设置”值设置为“en-US”。

在报表管理器中直接创建订阅时,“区域设置”字段中的值由浏览器语言设置决定(这正是我们想要实现的)。

我们在调用CreateSubscription方法之前找不到设置Locale字段的方法,因为它似乎不接受Locale参数,它默认为en-US(我认为是服务器设置)。 / p>

您知道在SSRS中创建订阅时设置Locale的任何方法吗?

2 个答案:

答案 0 :(得分:0)

我还没有通过SOAP API尝试过,但是不应该设置Accept-Language标头吗? 我在使用不同语言呈现报表时这样做。每个报告的语言设置为=User!Language。 使用WCF访问报告服务时,您可以(例如VB.NET)

Using oReportingService As New ReportingService2010SoapClient
    oReportingService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation

    Using oScope As OperationContextScope = New OperationContextScope(oReportingService.InnerChannel)
      If i_oSubscription.Language IsNot Nothing Then
        ' Accept-Language
        Dim oHttpRequestProperty As New HttpRequestMessageProperty
        oHttpRequestProperty.Headers.Add(HttpRequestHeader.AcceptLanguage, i_oSubscription.Language)
        OperationContext.Current.OutgoingMessageProperties(HttpRequestMessageProperty.Name) = oHttpRequestProperty
      End If

      oReportingService.CreateSubscription(New ReportingService2010.TrustedUserHeader(), i_oSubscription.Path, oExtensionSettings, i_oSubscription.Description, "TimedSubscription", sMatchData, lstParameters.ToArray(), sSubscriptionId)

      Return sSubscriptionId
    End Using
  End Using

编辑:这是我自己做的方式,似乎有效:)

i_oSubscription只是一个包含Description

等属性的简单容器

注意:这似乎在很大程度上起作用。但是,MonthlyRecurrence中的“Days”字段将根据区域设置进行格式化(请参阅:https://stackoverflow.com/questions/16011008/ssrs-monthlyrecurrence-formatting-for-different-languages

答案 1 :(得分:0)

据我所知,没有办法做到这一点;我一直在通过C#使用该服务。

我决定了一种解决方案,该解决方案是通过服务获取报告的语言/语言环境,然后直接在ReportServer数据库中进行更改,作为对SubscriptionID的UPDATE语句。

要获取报告的语言/语言环境,请使用类似以下内容的

private static void Main()
{
    ReportingService2010 service = new ReportingService2010();

    service.Url = "URL of service";
    service.Credentials = System.Net.CredentialCache.DefaultCredentials;

    string reportItemPath = "Path of report";

    string language = GetReportPropertyValue(service, reportItemPath, "Language", "en-GB");

    // Create the subscription, then update the database using the returned SubscriptionID.
}

private static string GetReportPropertyValue(ReportingService2010 service, string itemPath, string propertyName, string defaultValue)
{
    Property[] properties = service.GetProperties(itemPath, null);

    if (properties.Any(p => p.Name == propertyName))
        return properties.First(p => p.Name == propertyName).Value;
    else
        return defaultValue;
}