<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Оптимизация длительных процессов Версионирование функций инициализации
|
![]() ![]() |
Если система содержит большой объем данных и количество пользователей, то процесс инициализации может быть длительным. Например, при обновлении системы повторно задаются первоначальные настройки: заполняются справочники значениями по умолчанию, выдаются необходимые права и т.п. На эти действия требуется время.
Чтобы ускорить инициализацию, в базовом решении для модулей используется версионирование функций инициализации. Для этого добавлены функции:
•FirstInitializing() – задаются первоначальные настройки системы, например справочники Организации и Валюты заполняются значениями по умолчанию;
•Initializing<номер_версии>() – задается инициализация для конкретной версии системы, в которой была переопределена или добавлена новая логика инициализации базового модуля.
Таким образом, если система обновляется на новую версию, то первичная настройка пропускается и запускается только та логика инициализации, которая ранее не выполнялась.
Также вы можете добавить версионирование для своих функций инициализации, чтобы они не выполнялись повторно. Предположим, в версии 4.9 была добавлена своя функция инициализации. Чтобы адаптировать инициализацию версии 4.10 под версионирование:
1.Перенесите в функцию FirstInitializing() логику инициализации, которая была в системе до версии 4.10.
2.Создайте функцию Initializing410() и добавьте в нее код инициализации для версии 4.10:
public virtual void Initializing410()
{
// Код инициализации для версии 4.10.0.
}
3.Добавьте константы для инициализации модуля.
Пример для модуля «Документооборот» (Docflow):
public static class Init
{
public static class Docflow
{
// Название параметра для хранения инициализированной версии модуля.
public const string Name = "InitDocflowUpdate";
// Номер версии первоначальной инициализации модуля.
public const string FirstInitVersion = "4.9.0.0";
/// Номер версии инициализации модуля на версию 4.10.
public const string Version410 = "4.10.0.0";
}
}
Таким образом, при добавлении функций инициализации необходимо предварительно создать константы:
•Name – название параметра в таблице Sungero_Docflow_Params, в который последовательно записываются инициализированные версии модуля;
•FirstInitVersion – номер версии для инициализации модуля при установке системы;
•Version<номер_версии> – номер версии для инициализации модуля при обновлении системы на новую версию.
4.Вызовите в событии Initializing() функцию ModuleVersionInit(). С ее помощью выполняется инициализация на определенную версию модуля.
Функция содержит параметры:
•initAction – функция, которая выполняет инициализацию указанной версии модуля;
•moduleInitMark – название параметра, в котором хранится версия последней выполненной инициализации;
•initCodeVersion – версия модуля, для которой предназначена указанная инициализация.
Пример вызова функции:
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
Sungero.Commons.PublicInitializationFunctions.Module.ModuleVersionInit(this.FirstInitializing, Constants.Module.Init.Commons.Name, Version.Parse(Constants.Module.Init.Commons.FirstInitVersion));
Sungero.Commons.PublicInitializationFunctions.Module.ModuleVersionInit(this.Initializing410, Constants.Module.Init.Commons.Name, Version.Parse(Constants.Module.Init.Commons.Version410));
}
5.Опубликуйте решения, для модулей которых были добавлены функции инициализации, и запустите инициализацию по кнопке Запустить инициализацию на панели инструментов.
6.Проверьте результат выполнения функций инициализации в локальной системе Directum RX.
© Компания Directum, 2025 |