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

Механизм отключения функциональности Feature Toggle

Glossary Item Box

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

Feature toggle — техника разработки программных продуктов, которая обеспечивает поддержку подключения дополнительной функциональности в работающем приложении. Это позволяет использовать непрерывную интеграцию, сохраняя работоспособность приложения и скрывая функциональность, которая находится в стадии разработки.

Основная идея заключается в том, что в исходном коде имеется блок с дополнительной функциональностью (зачастую не полностью реализованной) и условный оператор, в котором определяется подключена ли данная функциональность, или нет.

Добавление, включение и выключение функциональности

Для добавления, включения или выключения функциональности предназначена специальная страница FeaturesPage, расположенная по адресу:

[Адрес приложения]/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

Например:

http://mybpmonline.com/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

Для добавления новой отключаемой функциональности укажите ее код, название и краткое описание, а затем нажмите кнопку [Добавить функциональность] ([Create feature]) (рис. 1).

Рис. 1. — Интерфейс добавления новой функциональности

Чтобы включить или выключить функциональность, используйте соответствующий признак (рис. 2, 1). Для применения изменений нажмите кнопку [Сохранить изменения] ([Save changes]) (рис 2, 2).

Рис. 2. — Включение-выключение функциональности

Хранение сведений о функциональности в базе данных

Перечень доступной для включения/отключения функциональности хранится в таблице Feature базы данных приложения. По умолчанию таблица пуста. Основные поля таблицы Feature приведены в таблице 1.

Табл. 1. — Основные поля таблицы Feature

Название Тип Описание
Id uniqueidentifier Уникальный идентификатор записи.
Name varchar( 250 ) Название функциональности.
Code varchar( 50 ) Код функциональности.

Информация о состоянии функциональности (включена/отключена) содержится в поле FeatureState таблицы AdminUnitFeatureState (рис.3). Таблица AdminUnitFeatureState связывает таблицы Feature и SysAdminUnit, в которой определены пользователи и группы пользователей системы. Основные поля таблицы AdminUnitFeatureState приведены в таблице 2.

Табл. 2. — Основные поля таблицы AdminUnitFeatureState

Название Тип Описание
Id uniqueidentifier Уникальный идентификатор записи.
FeatureId uniqueidentifier Уникальный идентификатор записи функциональности.
SysAdminUnitId uniqueidentifier Уникальный идентификатор записи пользователя.
FeatureState int Состояние функциональности. 1 — включена, 0 — выключена.

Рис. 3. — Диаграмма взаимосвязи таблиц

Определение новой функциональности в программном коде

Для внедрения дополнительной функциональности в исходный код ее необходимо определять в блоке условного оператора, который проверяет состояние подключения функциональности FeatureState.

JavaScript на стороне клиента

Условный шаблон определения дополнительной функциональности в программном коде:

// Метод, в котором определяется дополнительная функциональность.
someMethod: function() {
    // Проверка подключения функциональности.
    if (Terrasoft.Features.getIsEnabled("код функциональности")) {
        // Реализация дополнительной функциональности.
        ...
    }
    // Реализация метода.
    ...
}

Для повышения удобства использования в состав базовой схемы модели представления BaseSchemaViewModel введен метод getIsFeatureEnabled. Поэтому метод Terrasoft.Features.getIsEnabled можно заменить на this.getIsFeatureEnabled("код функциональности").

После подключения новой функциональности, для того чтобы она появилась в клиентском коде и была загружена браузером на стороне клиента, необходимо обновить страницу.

C# на стороне сервера

Для использования Feature toggle в схемах исходного кода на серверной стороне в классе Terrasoft.Configuration.FeatureUtilities был реализован набор расширяющих методов класса UserConnection. Перечень расширяющих методов приведен в таблице 3. В этом же классе объявлено перечисление состояний функциональностей FeatureState.

Табл. 2. — Основные методы класса DataManager

Метод Параметры Описание
int GetFeatureState( this UserConnection source, string code )

code — код функциональности.

Возвращает состояние функциональности.
Dictionary <string, int> GetFeatureStates( this UserConnection source ) Нет. Возвращает состояния всех функциональностей.
void SetFeatureState( this UserConnection userConnection, string code, int state, bool forAllUsers = false )

code — код функциональности;

state — состояние функциональности (0/1);

forAllUsers — признак установки функциональности для всех пользователей.

Устанавливает состояние функциональности.
void CreateFeature( this UserConnection source, string code, string name, string description )

code — код функциональности;

name — название функциональности;

description — описание функциональности.

Создает новую функуциональность.
bool GetIsFeatureEnabled( this UserConnection source, string code )

code — код функциональности.

Проверяет подключена ли функциональность.

Условный шаблон определения дополнительной функциональности в программном коде:

// Пространство имен, в котором определена возможность переключения 
// дополнительной функциональности.
using Terrasoft.Configuration;
…
// Метод, в котором будет определяться дополнительная функциональность.
public void AnyMethod() {
    // Проверка, включена ли функциональность.
    if (UserConnection.GetIsFeatureEnabled("код функциональности")) {
        // Реализация дополнительной функциональности.
    }
    // Реализация метода.
    ...
}

Установка значения состояния функциональности выполняется вызовом метода SetFeatureState:

UserConnection.SetFeatureState("код функциональности", FeatureState);

© Terrasoft 2002-2019.

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

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