Creatio development guide
PDF
Документация по разработке
Описание платформы
Это документация Creatio версии 7.13.0. Мы рекомендуем использовать новую версию документации.

Локализация представлений

Glossary Item Box

Общие сведения

Часто для выборки данных используются представления (View). Представления, в свою очередь, могут выбирать данные из локализуемых колонок. Соответственно, для выборки локализуемых данных через представления необходимо дополнительно настраивать локализуемые представления.

Для локализации представления необходимо выполнить следующие действия:

  1. Создать схему объекта для представления. Установить признак мультиязычия для локализуемых колонок.
  2. Добавить новое представление локализации в базе данных.

Описание примера

В bpm'online уже реализована схема объекта [Адрес контакта] (ContactAddress), одна из колонок которой ссылается на справочник (схему) [Тип адреса] (AddressType). Колонка [Название] (Name) схемы [Тип адреса] — локализуема.

Поскольку практически каждой схеме объекта в bpm'online соответствует своя таблица, то структура связей таблиц будет такой (рис. 1):

  • ContactAddress — таблица адресов контакта. Связана с таблицей AddressType по колонке AddressTypeId.
  • AddressType — таблица типов адресов. Колонка Name содержит значения, соответствующие культуре пользователя, установленной по умолчанию. Значения, соответствующие другим культурам, содержатся в таблице SysAddressTypeLcz.
  • SysAddressTypeLcz — автоматически генерируемая системная таблица локализованных значений типов адресов. Связана с таблицей AddressType по колонке RecordId, а с таблицей SysCulture — по колонке SysCultureId. В колонке Name содержатся локализованные значения типов адресов для культуры, указанной в колонке SysCultureId.
  • SysCulture — системная таблица с перечнем культур.

Рис. 1. — Структура и связи таблиц для схем [Адрес контакта], [Тип адреса] и таблиц локализации

Необходимо создать представление, которое выбирает следующие поля:

  • ContactAddress.Address — адрес контакта;
  • AddressType.Name — локализуемое название типа адреса.

Исходный код

Пакет с реализацией примера можно скачать по ссылке.

Реализация примера

1. Создание схемы объекта для представления

Создайте схему объекта со следующими значениями свойств:

  • [Название] ([Name]) — "UsrVwContactAdress". Префикс Usr устанавливается системной настройкой [Префикс названия объекта]. Префикс Vw (сокращение от View) показывает, что схема является представлением в базе данных.
  • [Заголовок] ([Titlie]) — "Представление адреса контакта" ("Contact address view").
  • [Родительский объект] ([Parent object]) — "Базовый объект" ("Base object").
  • [Представление в базе данных] ([Represent Structure of Database View]) — признак должен быть обязательно отмечен (рис. 2).

Как создать схему объекта и добавить в нее колонки подробно описано в статье "Создание схемы объекта".

Рис. 2. — Признак представления в базе данных

В созданную схему добавьте две строковые колонки.

Первая колонка будет содержать нелокализованные значения адреса в культуре по умолчанию. Для нее следует установить следующие значения свойств:

  • [Название] ([Name]) — "UsrAddress".
  • [Заголовок] ([Title]) — "Адрес" ("Address").
  • [Тип данных] ([Data type]) — "Строка (50 символов)" ("Text (50 characters)").

Вторая колонка будет содержать локализованные значения типа адреса. Для нее следует установить следующие значения свойств:

  • [Название] ([Name]) — "UsrAddressType".
  • [Заголовок] ([Title]) — "Тип адреса" ("").
  • [Тип данных] ([Data type]) — "Строка (50 символов)" ("Text (50 characters)").
  • [Локализуемый текст] ([Localizable text]) — признак должен быть обязательно отмечен (рис. 3) Подробнее о признаке мультиязычия можно узнать из статьи "Добавление признака мультиязычия в схему объекта".

Рис. 3. — Признак мультиязычия в колонке

К СВЕДЕНИЮ

Свойства [Тип данных] и [Локализуемый текст] отображаются в расширенном режиме отображения свойств колонки (см. "Дизайнер объектов").

Сохраните и опубликуйте схему объекта.

2. Создание представления в базе данных

Для создания представления UsrVwContactAddress в базе данных выполните следущий SQL-скрипт:

-- Название представления должно совпадать с названием таблицы схемы.
CREATE VIEW dbo.UsrVwContactAddress
AS
SELECT
    ContactAddress.Id,
    -- Колонки представления должны соответствовать колонкам схемы.
    ContactAddress.Address AS UsrAddress,
    AddressType.Name AS UsrAddressType
FROM ContactAddress
INNER JOIN AddressType ON ContactAddress.AddressTypeId = AddressType.Id;

Для создания локализуемого представления UsrVwContactAddress в базе данных выполните следущий SQL-скрипт:

-- Название представления должно совпадать с названием таблицы локализации схемы.
CREATE VIEW dbo.SysUsrVwContactAddressLcz
AS
SELECT
    SysAddressTypeLcz.Id,
    ContactAddress.id AS RecordId,
    SysAddressTypeLcz.SysCultureId,
     -- Колонки представления должны соответствовать колонкам схемы.
    SysAddressTypeLcz.Name AS UsrAddressType    
FROM ContactAddress
INNER JOIN AddressType ON ContactAddress.AddressTypeId = AddressType.Id
INNER JOIN SysAddressTypeLcz ON AddressType.Id = SysAddressTypeLcz.RecordId;

Колонки у локализуемого представления UsrVwContactAddress должны соответствовать колонкам таблиц локализации. Детальная информация о таблицах локализации доступна в статье "Таблицы локализации".

В результате выполнения кейса при чтении данных с помощью EntitySchemaQuery из колонки UsrAddressType представления UsrVwContactAddress будут отображены корректные значения для разных языков.

Проверка результатов выполнения кейса

Для проверки результатов можно воспользоваться одним из примеров, приведенных в статье "Чтение мультиязычных данных с помощью EntitySchemaQuery". Для проверки результатов запросов можно, например, создать пользовательский конфигурационный сервис (см. "Как создать свой конфигурационный сервис").

В созданном классе сервиса необходимо реализовать метод, который с помощью запроса EntitySchemaQuery вернет перечень адресов и их типов из созданного нелокализованного представления UsrVwContactAddress.

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "Ex01")]
public string Ex01()
{
    // Пользовательское подключение.
    var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
    // Формирование запроса.
    var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "UsrVwContactAddress");
    // Добавление колонок в запрос.
    esqResult.AddColumn("UsrAddress");
    esqResult.AddColumn("UsrAddressType");
    // Выполнение запроса к базе данных и получение всей результирующей коллекции объектов.
    var entities = esqResult.GetEntityCollection(userConnection);
    // Вывод результатов.
    var s = "";
    foreach (var item in entities)
    {
        s += item.GetTypedColumnValue<string>("UsrAddress") + Environment.NewLine;
        s += item.GetTypedColumnValue<string>("UsrAddressType") + Environment.NewLine;
    }
    return s;
}

Результат работы этого метода представлен на рисунке 4.

Рис. 4. — Результат проверки в локализации по умолчанию

Для проверки работы локализованного представления в созданном классе сервиса необходимо реализовать второй метод:

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "Ex01")]
public string Ex01()
{
    var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
    // Получение Id нужной культуры, например, английской.
    var sysCulture = new SysCulture(userConnection);
    if (!sysCulture.FetchPrimaryInfoFromDB("Name", "en-US"))
    {
        return "Культура не найдена";
    }
    Guid CultureId = sysCulture.Id;
    var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "UsrVwContactAddress");
    esqResult.AddColumn("UsrAddress");
    esqResult.AddColumn("UsrAddressType");
    // Установка необходимой локализации.
    esqResult.SetLocalizationCultureId(CultureId);
    var entities = esqResult.GetEntityCollection(userConnection);
    var s = "";
    foreach (var item in entities)
    {
        s += item.GetTypedColumnValue<string>("UsrAddress") + Environment.NewLine;
        s += item.GetTypedColumnValue<string>("UsrAddressType") + Environment.NewLine;
    }
    return s;
}

Результат работы этого метода представлен на рисунке 5.

Рис. 5. — Результат проверки в выбранной локализации

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?