Реализовать пользовательскую дополнительную функциональность

Средний

Начиная с версии 8.0.2 Atlas, в Creatio изменена логика работы с дополнительной функциональностью. Если вы используете более раннюю версию приложения, то воспользуйтесь статьей Механизм Feature Toggle.

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

В Creatio Feature toggle использует непрерывную интеграцию, которая позволяет сохранить работоспособность приложения и скрыть дополнительную функциональность на стадии разработки. Creatio позволяет как разработать пользовательскую функциональность, так и управлять существующей функциональностью. Для этого воспользуйтесь инструкцией, которая приведена в статье Управлять существующей дополнительной функциональностью. Управление состоянием дополнительных функциональностей выполняется на странице Переключение функциональности (Feature toggling) приложения.

Чтобы реализовать пользовательскую дополнительную функциональность:

  1. Добавьте пользовательскую функциональность.
  2. Зарегистрируйте пользовательскую функциональность.
  3. Реализуйте бизнес-логику пользовательской функциональности.
  4. Настройте состояние пользовательской функциональности для пользователей приложения.

1. Добавить функциональность 

  1. Перейдите на страницу Переключение функциональности (Feature toggling).
  2. На панели инструментов страницы нажмите на кнопку Добавить (Add) и заполните свойства добавляемой функциональности:
    • Код (Сode) — код пользовательской функциональности, которую планируется добавить (обязательное свойство).
    • Источник (Source) — источник пользовательской функциональности, которую планируется добавить. По умолчанию функциональность добавляется в таблицу [Feature] базы данных.
    • Описание (Description) — описание пользовательской функциональности, которую планируется добавить.
  3. Подключите дополнительную функциональность.

  4. Нажмите кнопку Сохранить (Save).

В результате пользовательская функциональность будет добавлена в реестр страницы Переключение функциональности (Feature toggling). В качестве источника функциональности устанавливается DbFeatureProvider. Подробнее об источниках читайте в статье Управлять существующей дополнительной функциональностью.

2. Зарегистрировать функциональность 

Функциональность регистрируется на back-end стороне с помощью схемы типа Исходный код (Source code).

Чтобы зарегистрировать функциональность:

  1. Создайте схему исходного кода. Для этого воспользуйтесь инструкцией, которая приведена в статье Исходный код (C#).
  2. В дизайнере исходного кода зарегистрируйте пользовательскую функциональность. Для этого реализуйте пользовательский класс, который является наследником класса FeatureMetadata. Используйте шаблон, который приведен ниже.

    Шаблон регистрации пользовательской функциональности
    #region Class: SomeNewFeature
    internal class SomeNewFeature : FeatureMetadata {
    
        #region Constructors: Public
        public SomeNewFeature() {
            IsEnabled = true;
            Description = "Some feature description";
        }
        #endregion
    
    }
    #endregion
    

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

    Шаблон регистрации набора пользовательских функциональностей
    class SomeModuleFeatures {
        class SomeNewFeature1 : FeatureMetadata {}
        class SomeNewFeature2 : FeatureMetadata {}
    }
    Features.GetIsEnabled<SomeModuleFeatures.SomeNewFeature1>()
    
  3. На панели инструментов дизайнера исходного кода нажмите Сохранить (Save) для временного сохранения изменений в метаданных схемы.
  4. На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.

3. Реализовать бизнес-логику функциональности 

Пользовательская функциональность определяется в блоке условного оператора, который проверяет состояние функциональности (т. е. значение в колонке [FeatureState] таблицы [AdminUnitFeatureState] базы данных).

Способы реализации бизнес-логики пользовательской функциональности:

Реализовать бизнес-логику функциональности (front-end) 

  1. Создайте схему модели представления. Для этого воспользуйтесь инструкцией, которая приведена в статье Клиентский модуль.
  2. В дизайнере модуля добавьте исходный код. В исходном коде приложения присутствует блок с дополнительной функциональностью и условный оператор, который определяет состояние подключения функциональности и логику работы приложения в каждом из состояний. Для этого используйте шаблон, который приведен ниже.

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

    Метод getIsEnabled() на front-end стороне проверяет, подключена ли пользовательская функциональность. В нашем примере это функциональность с названием SomeNewFeature.

    Метод getIsDisabled() на front-end стороне проверяет, отключена ли пользовательская функциональность. В нашем примере это функциональность с названием SomeNewFeature.

    В зависимости от полученного значения, выполняется разная бизнес-логика.

  3. На панели инструментов дизайнера модуля нажмите Сохранить (Save).

Чтобы пользовательская функциональность отобразилась в клиентском коде и загружалась браузером на front-end стороне, обновите страницу.

Реализовать бизнес-логику функциональности (back-end) 

  1. Создайте схему исходного кода. Для этого воспользуйтесь инструкцией, которая приведена в статье Исходный код (C#).
  2. В дизайнере исходного кода реализуйте пользовательскую функциональность. В исходном коде приложения присутствует блок с дополнительной функциональностью и условный оператор, который определяет состояние подключения функциональности и логику работы приложения в каждом из состояний.

    Класс Terrasoft.Configuration.FeatureUtilities предоставляет набор расширяющих методов класса UserConnection, которые позволяют использовать функциональность Feature toggle в схемах исходного кода на back-end стороне приложения. Для этого используйте шаблон, который приведен ниже.

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

    Метод GetIsEnabled() на back-end стороне проверяет, подключена ли пользовательская функциональность. В нашем примере это функциональность с названием SomeNewFeature.

    Метод GetIsDisabled() на back-end стороне проверяет, отключена ли пользовательская функциональность. В нашем примере это функциональность с названием SomeNewFeature.

    В зависимости от полученного значения, выполняется разная бизнес-логика.

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

    Шаблон реализации пользовательской функциональности
    /* Пространство имен, в котором определена возможность переключения функциональности. */
    using Terrasoft.Configuration;
    ...
    /* Метод, в котором будет определяться функциональность. */
    public void AnyMethod() {
    
        /* Проверяет состояние пользовательских функциональностей, которые зарегистрированы в классе. */
        if (Features.GetIsEnabled<SomeModuleFeatures>()) {
            /* Реализация бизнес-логики, если пользовательская функциональность подключена. */
            ...
        }
    
        /* Проверяет состояние пользовательских функциональностей, которые зарегистрированы в классе. */
        if (Features.GetIsDisabled<SomeModuleFeatures>()) {
            /* Реализация бизнес-логики, если пользовательская функциональность отключена. */
            ...
        }
    
        /* Реализация метода. */
        ...
    }
    

    Метод GetIsEnabled() на back-end стороне проверяет, подключены ли пользовательские функциональности, которые зарегистрированы в группирующем классе. В нашем примере это класс с названием SomeModuleFeatures.

    Метод GetIsDisabled() на back-end стороне проверяет, отключены ли пользовательские функциональности, которые зарегистрированы в группирующем классе. В нашем примере это класс с названием SomeModuleFeatures.

    В зависимости от полученного значения, выполняется разная бизнес-логика.

  3. На панели инструментов дизайнера исходного кода нажмите Сохранить (Save) для временного сохранения изменений в метаданных схемы.
  4. На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.

4. Настроить состояние функциональности для пользователей приложения 

Чтобы настроить состояние пользовательской функциональности для пользователей приложения, воспользуйтесь инструкцией, которая приведена в статье Управлять существующей дополнительной функциональностью.