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

Как добавить мультиязычные шаблоны email сообщений в пользовательский раздел

Glossary Item Box

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

Creatio предоставляет возможность использовать собственную логику подбора шаблона email-сообщения по языку. На инструментальной панели действий (ActionsDashboard) записи раздела можно выбирать шаблоны email-сообщений на необходимом языке. Подбор выполняется на основании специализированных правил, которые могут быть определены в зависимости от раздела. Если специфические правила не определены, подбор ведется на основе контакта, связанного с редактируемой записью (колонка [Контакт]). Если колонки связи с контактом в объекте раздела нет, используется значение системной настройки DefaultMessageLanguage.

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

1. Создайте класс или классы, унаследованные от BaseLanguageRule и определите правила подбора языка (один класс определяет одно правило).

2. Создайте класс, унаследованный от BaseLanguageIterator. В конструкторе класса определите свойство LanguageRules как массив экземпляров классов, созданных на предыдущем шаге. Порядок следования соответствует приоритету правил.

3. Создайте класс-насследник от AppEventListenerBase, выполняющий привязку класса, определяющего правила подбора языка, к разделу.

4. В справочник [Шаблоны email сообщений] ([Email Templates]) добавьте нужные мультиязычные шаблоны.

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

В пользовательский раздел добавить логику выбора языка email-сообщения на основе колонки UsrContact основного объекта раздела. Для примера использовать английский и испанский языки.

Исходный код

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

Пакет можно установить для продуктов Creatio, содержащих пакет EmailTemplates. После установки пакета убедитесь, что выполнены все предварительные настройки, описанные ниже.

Предварительные настройки

Для корректной работы примера:

1. Убедитесь, что в справочнике [Языки общения] ([Customer languages]) используются английский и испанский языки (рис. 1).

Рис. 1. — Справочник [Языки общения]

2. В мастере разделов проверьте, что на странице редактирования записи пользовательского раздела существует колонка UsrContact, связанная со справочником [Контакт] ([Contact]) (рис. 2).

Рис. 2. — Колонка UsrContact

Алгоритм реализации примера

1. Добавить правило подбора языка

В пользовательском пакете создайте схему [Исходный код] (см. "Создание схемы [Исходный код]").

Для созданной схемы укажите (рис. 3):

  • [Название] ([Name]) — "UsrContactInUsrTestLanguageRule";
  • [Заголовок] ([Title]) — "Пользовательское правило шаблона email-сообщений" ("User defined email template rule").

Рис. 3. — Свойства схемы [Исходный код]

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

namespace Terrasoft.Configuration
{
    using System;
    using Terrasoft.Core;
    using Terrasoft.Core.Entities;
    public class ContactInUsrTestLanguageRule : BaseLanguageRule
    {
        public ContactInUsrTestLanguageRule (UserConnection userConnection) : base(userConnection) 
        {
        }
        // Определяет идентификатор предпочитаемого языка пользователя.
        // recId — идентификатор текущей записи.
        public override Guid GetLanguageId(Guid recId)
        {
            // Создание экземпляра EntitySchemaQuery для основного объекта пользовательского раздела.
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrMLangEmailTpl");
            // Определение названия колонки языка контакта.
            var languageColumnName = esq.AddColumn("UsrContact.Language.Id").Name;
            // Получение экземпляра текущей записи.
            Entity usrRecEntity = esq.GetEntity(UserConnection, recId);
            // Получение значения идентификатора предпочитаемого языка пользователя.
            Guid languageId = usrRecEntity.GetTypedColumnValue<Guid>(languageColumnName);
            return languageId;
        }
    }
}

Опубликуйте схему.

2. Определить порядок правил подбора языка

В пользовательском пакете создайте схему [Исходный код] (см. "Создание схемы [Исходный код]").

Для созданной схемы укажите (рис. 3):

  • [Название] ([Name]) — "UsrTestLanguageIterator";
  • [Заголовок] ([Title]) — "Пользовательский итератор правил выбора языка" ("User defined language iterator").

Добавьте в схему исходный код, приведенный ниже:

namespace Terrasoft.Configuration
{
    using Terrasoft.Core;
    public class UsrTestLanguageIterator: BaseLanguageIterator
    {
        public UsrTestLanguageIterator(UserConnection userConnection): base(userConnection)
        {
            // Массив правил выбора языка.
            LanguageRules = new ILanguageRule[] {
                // Пользовательское правило.
                new ContactInUsrTestLanguageRule (UserConnection),
                // Правило по умолчанию.
                new DefaultLanguageRule(UserConnection),
            };
        }
    }
}

Вторым элементом массива является DefaultLanguageRule. Это правило использует для получения языка системную настройку DefaultLanguage и используется по умолчанию, если язык не был найден другими, более приоритетными правилами.

Выполните публикацию схемы.

3. Привязать итератор правил выбора языка к разделу

В пользовательском пакете создайте схему [Исходный код] (см. "Создание схемы [Исходный код]").

Для созданной схемы укажите (рис. 3):

  • [Название] ([Name]) — "UsrTestMLangBinder";
  • [Заголовок] ([Title]) — "UsrTestMLangBinder".

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

namespace Terrasoft.Configuration
{
    using Terrasoft.Core.Factories;
    using Terrasoft.Web.Common;
    public class UsrTestMLangBinder: AppEventListenerBase
    {
        public override void OnAppStart(AppEventContext context)
        {
            // Вызов базовой логики.
            base.OnAppStart(context);
            // Привязка итератора к пользовательскому разделу.
            // UsrMLangEmailTpl — название основного объекта раздела.
            ClassFactory.Bind<ILanguageIterator, UsrTestLanguageIterator>("UsrMLangEmailTpl");
        }
    }
}

Опубликуйте схему.

4. Добавить необходимые мультиязычные шаблоны

В справочник [Шаблоны email сообщений] ([Email Templates]) добавьте новую запись (рис. 4), в которой определите шаблоны email-сообщений на требуемых языках (рис. 5).

Рис. 4. — Новая запись в справочнике [Шаблоны email сообщений]

Рис. 5. — Добавление шаблонов на требуемых языках

В результате выполнения примера на странице редактирования записи пользовательского раздела (рис. 6) в канале инструментальной панели действий (рис. 6, 1) шаблоны email сообщений (рис. 6, 2) будут выбираться автоматически на том языке контакта (рис. 6, 3), который установлен как предпочтительный (рис. 7).

Рис. 6. — Результат выполнения примера

Рис. 7. — Предпочтительный язык контакта

© Terrasoft 2002-2020.

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

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