Обновление версий действий¶
В данном разделе представлена информация об обновлении версий действий бизнес-процессов.
Версионность действий¶
С развитием платформы неизбежно внедряются новые возможности и вносятся изменения в уже реализованную и активно использующуюся функциональность. В том числе изменения могут затронуть и действия бизнес-процессов. Для того, чтобы иметь возможность корректно обеспечивать переход с устаревших версий действий бизнес-процессов на более новые, был реализован механизм версионности действий бизнес-процессов. В дескрипторе любого действия имеется значение версии. По умолчанию оно равно 1
, но может быть изменено. При серьёзных изменениях действий, требующих обновления, версия действия увеличивается.
Экземпляр действия в шаблоне бизнес-процесса и экземпляр действия в запущенном процессе хранят версию, которая была у дескриптора в момент их создания. Система не позволит выполнить действие, если оно имеет неактуальную версию.
Обновление из редактора шаблона бизнес-процесса¶
В редакторе шаблона бизнес-процессов можно обновить версии действий для текущего открытого шаблона бизнес-процесса. Для этого необходимо:
-
Заблокировать процесс для редактирования.
-
Перейти в раздел “Настройки процесса”.
-
Нажать кнопку “Обновить действия процесса”.
Произойдёт обновление версий всех действий текущего шаблона бизнес-процесса, которые нуждались в обновлении. После успешного обновления шаблон бизнес-процесса будет сохранён и открыт заново.
Обновление из редактора экземпляра бизнес-процесса¶
В редакторе экземпляра бизнес-процессов можно обновить версии действий для текущего открытого экземпляра бизнес-процесса. Для этого необходимо:
-
Перейти в раздел “Настройки процесса”.
-
Нажать кнопку “Обновить действия процесса”.
Произойдёт обновление версий всех активных действий текущего экземпляра бизнес-процесса, которые нуждались в обновлении. После успешного обновления экземпляр бизнес-процесса будет сохранён и открыт заново.
Warning
Обновлять версии действий в экземпляре бизнес-процесса можно только после обновления версий действий шаблона, по которому был создан экземпляр процесса. Если при запуске обновления экземпляра бизнес-процесса версия действий в его шаблоне будет неактуальной, система выдаст сообщение об ошибке с указанием на необходимость обновить сперва версии действий в шаблоне бизнес-процесса.
Обновление через консольную утилиту tadmin¶
Существует возможность обновить версии действий в шаблонах бизнес-процессов и их экземплярах, используя команду UpgradeWorkflowProcesses консольной административной утилиты tadmin.
Обработчики обновления версий действий бизнес-процессов¶
Для возможности обновления версий действий бизнес-процессов существует интерфейс IWorkflowEngineActionUpgradeHandler
, который реализует следующие методы:
/// <summary>
/// Обновление действия в шаблоне бизнес-процесса на новую версию.
/// </summary>
/// <param name="actionStorage">Действие в WorkflowEngine в шаблоне процесса.</param>
/// <param name="validationResult">Объект, выполняющий построение результата валидации.</param>
/// <param name="cancellationToken">Объект, посредством которого можно отменить асинхронную задачу.</param>
/// <returns>Асинхронная задача.</returns>
Task UpgradeActionTemplateAsync(
WorkflowActionStorage actionStorage,
IValidationResultBuilder validationResult,
CancellationToken cancellationToken = default);
/// <summary>
/// Обновление действия в экземпляре бизнес-процесса на новую версию.
/// </summary>
/// <param name="actionTemplateStorage">Действие в WorkflowEngine в шаблоне процесса.<</param>
/// <param name="actionStateStorage">Экземпляр действия в WorkflowEngine.</param>
/// <param name="validationResult">Объект, выполняющий построение результата валидации.</param>
/// <param name="cancellationToken">Объект, посредством которого можно отменить асинхронную задачу.</param>
/// <returns>Асинхронная задача.</returns>
Task UpgradeActionInstanceAsync(
WorkflowActionStorage actionTemplateStorage,
WorkflowActionStateStorage actionStateStorage,
IValidationResultBuilder validationResult,
CancellationToken cancellationToken = default);
Так же имеется реестр экземпляров обработчиков обновления версии действия IWorkflowEngineActionUpgradeHandlersRegistry
, который хранит зарегистрированные экземпляры IWorkflowEngineActionUpgradeHandler
.
В случае необходимости реализовать механизм обновления версии действия бизнес-процесса, необходимо написать для этого процесса обновления свой обработчик IWorkflowEngineActionUpgradeHandler
и зарегистрировать его в IWorkflowEngineActionUpgradeHandlersRegistry
:
var upgradeHandlersRegistry = NotNullOrThrow(container).TryResolve<IWorkflowEngineActionUpgradeHandlersRegistry>();
if (upgradeHandlersRegistry is not null)
{
upgradeHandlersRegistry.Register<MyNewActionUpgradeHandler>(SomeTaskActionTypeID, versionNumber);
}
Где:
-
MyNewActionUpgradeHandler
- класс, реализующий интерфейсIWorkflowEngineActionUpgradeHandler
и описывающий логику обновления действия. -
SomeTaskActionTypeID
- идентификатор типа действия. -
versionNumber
- номер версии, при обновлении на которую должен срабатывать зарегистрированный обработчик.