Простой способ создания многоязычного отчета ssrs - это жесткий код или использование sharedataset. однако мы столкнемся с проблемой производительности рендеринга, если будем использовать набор данных общего доступа.
Вот эффективный подход к переводу меток в отчете с лучшей производительностью (особенно по производительности рендеринга)
Шаг 1: Реализация библиотеки для поддержки получения словаря для отчетов, приведенный ниже пример для справки, его следует изменить, чтобы он возвращал правильный словарь
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Data.SqlClient;
namespace CmsReportLibrary
{
public class DictionaryLabel
{
DictionaryLabel()
{
}
public static string[] GetDictionary(int languageid)
{
System.Data.SqlClient.SqlClientPermission oPerm = new System.Data.SqlClient.SqlClientPermission(PermissionState.Unrestricted);
oPerm.Assert();
SqlConnection oConn = new SqlConnection();
oConn.ConnectionString = ConfigurationManager.ConnectionStrings["appconnectionstring"].ConnectionString;
//oConn.ConnectionString = "Data Source=(local);Initial Catalog=Northwind;User Id=<>;Password=<>";
//oConn.Open();
//SqlCommand oCmd = new SqlCommand();
//oCmd.Connection = oConn;
//oCmd.CommandText = "..................";
// ....................
//oConn.Close();
return new string[] {...............};
//ex return new string[] { "Client||Klient", "Week||Woche", "Year||Jahr"};
}
}
}
Шаг 2. Скомпилируйте библиотеку и скопируйте ее в папку Bin на ReportServer службы отчетов
Например: скопировать библиотеку в C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.R2 \ Службы отчетов \ ReportServer \ bin
Шаг 3: Изменить файл rssrvpolicy.config в папке ReportServer (например: C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.R2 \ Службы отчетов \ rssrvpolicy.config ) найдите "$ CodeGen $" и добавьте следующий код, чтобы позволить SSRS узнать местонахождение новой библиотеки
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="CoDeMagSample"
Description="CoDe Magazine Sample. ">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.R2\Reporting Services\ReportServer\bin\CmsReportLibrary.dll"
/>
</CodeGroup>
Шаг 4. Остановите и запустите службу отчетов в диспетчере конфигурации службы отчетов
Шаг 5. Применение библиотеки в отчете SSRS.
Создать новый отчет или изменить новый отчет, этот отчет должен иметь параметр languageid
Установить ссылки на библиотеку для этого отчета
Щелкните правой кнопкой мыши отчет, выберите Свойства отчета.
Нажмите на вкладку Ссылки
Вставьте ссылки библиотеки в область «Добавить или удалить сборки»:
CmsReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Шаг 6: добавление пользовательского кода для поддержки перевода метки
public Shared Dim ListLabel as String()
функция GetListLabel (languageid как Integer)
ListLabel = CmsReportLibrary.DictionaryLabel.GetDictionary (Параметры! LanguageId.Value)
конечная функция
Функция Перевести (введите как Строка) как Строка
dim i as Integer
For i=0 to UBound(ListLabel,1)
if Instr(ListLabel(i), input) > 0 then
Translate = Replace(ListLabel(i), input + "||","")
exit function
end if
Next
'Not found, return any string you want
Translate = "not found"
end function
Шаг 7: Добавить новую переменную отчета
Выражение для переменной ListLabel
=Code.GetListLabel(Parameters!LanguageId.Value)
Шаг 8: Перевести метки в отчете
Измените выражение метки, используйте метод Translate в пользовательском коде для перевода
Например:
=Code.Translate("Client")
=Code.Translate("Week")