tomsky
tomsky

Reputation: 545

SSRS CreateSubscription - setting Locale

We have a custom built application, based on silverlight, which manages our report subscriptions. The problem is that whenever you add a new subscription, it sets the Locale value in the Subscriptions table to 'en-US'.

When you create subscriptions directly in Report Manager, the value in the Locale field is determined by your browser language settings (this is exactly what we want to achieve).

We can't find a way to set the Locale field before we call the CreateSubscription method as it doesn't seem to accept the Locale parameter and it defaults to en-US (which I believe is a server setting).

Do you know of any way to set Locale when creating subscriptions in SSRS?

Upvotes: 2

Views: 1399

Answers (2)

Chris Mack
Chris Mack

Reputation: 5208

As far as I can see there is no way to do this; I've been using the service via C#.

I decided upon a solution of obtaining the language/locale of the report via the service, and then making the changes directly in the ReportServer database, as an UPDATE statement on the SubscriptionID.

To get the language/locale of the report I use something like:

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;
}

Upvotes: 1

urbanhusky
urbanhusky

Reputation: 1385

I haven't tried it via the SOAP API yet, but shouldn't it be possible to set the Accept-Language header? I'm doing this when rendering reports in different languages. The language of each report is set to =User!Language. When using WCF to access the reporting service, you can do (example as 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

Edit: This is the way I'm doing it myself and it seems to work :)

i_oSubscription is just a simple container with properties like Description

Note: this seems to work for the most part. However, the "Days" field in a MonthlyRecurrence is to be formatted locale-dependent (see: https://stackoverflow.com/questions/16011008/ssrs-monthlyrecurrence-formatting-for-different-languages)

Upvotes: 0

Related Questions