Документация

Документация по разработке bpm’online
PDF
Документация по разработке
Описание платформы
Механизм отключения функциональности 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-2018.

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

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