Общие сведения
Надёжность и безопасность
Покупка лицензии
Начало работы
Роли в системе
Проекты
Концепции
Компоненты
Инструкции
Задачи
Финансы
Ресурсы
Таймшиты
Клиенты
Вики
Затраты
Отчёты и аналитика
FAQ
Типы отчётов
Использование отчётов
Группировка данных источника
Группировка данных в отчёте
Типы виджетов
Общие отчёты и шаблоны
Настройка отчёта
Экспорт отчётов
Пользовательские настройки отчёта
Вычисляемые поля
Выражения вычисляемых полей
Особые колонки отчётов с временными рядами
Использование панелей мониторинга
Публикация панелей
Фильтры источников данных
Настройка и администрирование
Типовой порядок настройки системы
On-premises
API
История изменений
Термины и определения

ILifecycleRoleResolver<TStatedEntity>

Обновлено: 13.03.2026

ILifecycleRoleResolver<TStatedEntity> — интерфейс обработчика, который позволяет динамически вычислять состав роли жизненного цикла для сущности.

Результат работы обработчика используется в следующих сценариях:

  • при настройке переходов жизненного цикла;
  • в логике workflow;
  • в правилах согласования и маршрутизации.

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

Интерфейс

public interface ILifecycleRoleResolver<in TStatedEntity>
    where TStatedEntity : class, IStatedEntity
{
    Task<List<Guid>> ResolveRole(LifecycleRoleContext context, TStatedEntity entity);
}

Назначение

Обработчик позволяет определить состав роли программно, а не статически. Состав роли вычисляется на основе:

  • данных самой сущности;
  • связанных объектов;
  • организационной структуры;
  • иной бизнес-логики.

Типичные сценарии использования:

  • определение руководителя проекта как согласующего;
  • возврат автора документа;
  • вычисление участников по связанной команде;
  • определение набора пользователей по данным подразделения, договора или проекта.

Метод ResolveRole

Task<List<Guid>> ResolveRole(LifecycleRoleContext context, TStatedEntity entity);

Вычисляет и возвращает список идентификаторов пользователей, входящих в роль.

Параметры

context — контекст выполнения обработчика (LifecycleRoleContext). Наследует DynamicCodeContext и предоставляет доступ к:

  • API системы;
  • логированию;
  • инфраструктурным сервисам.

entity — сущность, для которой вычисляется роль.

Результат

Метод должен вернуть список Guid, где каждый элемент — идентификатор пользователя, входящего в вычисленную роль.

Требования к результату

Метод ResolveRole должен возвращать:

  • идентификаторы пользователей системы;
  • список без null-значений;
  • только актуальных участников роли с точки зрения бизнес-логики.

Если роль не может быть определена, обработчик может вернуть пустой список.

LifecycleRoleContext

В метод ResolveRole передаётся LifecycleRoleContext. Контекст:

  • наследует DynamicCodeContext;
  • предоставляет доступ к сервисам сущностей;
  • позволяет выполнять логирование;
  • поддерживает безопасные HTTP-вызовы;
  • позволяет использовать сервисы уведомлений, расписаний и лицензий.

Для логирования используется метод:

Task Log(string message, DynamicCodeLogLevel level = DynamicCodeLogLevel.Info);

Записи попадают в журнал вычисления ролей жизненного цикла.

Когда вызывается обработчик

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

  • проверка возможности перехода по жизненному циклу;
  • вычисление участников workflow;
  • разрешение динамической роли в пользовательской логике платформы.

Пример

Ниже приведён пример обработчика, который возвращает автора сущности как единственного участника роли.

public class LifecycleRoleResolver : ILifecycleRoleResolver<Project>
{
    public async Task<List<Guid>> ResolveRole(
        LifecycleRoleContext context,
        Project entity)
    {
        await context.Log($"Вычисление роли для сущности {entity.Id}");

        return new List<Guid> { entity.AuthorId };
    }
}

Пример с выборкой связанных данных

Пример, в котором состав роли определяется по связанным участникам проекта.

public class LifecycleRoleResolver : ILifecycleRoleResolver<Project>
{
    public async Task<List<Guid>> ResolveRole(
        LifecycleRoleContext context,
        Project entity)
    {
        var memberService = context.GetEntityService<ProjectMember>();

        var userIds = memberService
            .Get(x => x.ProjectId == entity.Id)
            .Select(x => x.UserId)
            .Distinct()
            .ToList();

        await context.Log($"Для проекта {entity.Id} найдено участников: {userIds.Count}");

        return userIds;
    }
}

Рекомендации

  • Возвращайте только идентификаторы пользователей, которые должны входить в роль.
  • Если состав роли зависит от данных сущности, вычисляйте его на основе entity и связанных данных.
  • При сложной логике добавляйте логирование через context.Log(...).
  • Если отсутствие участников допустимо, возвращайте пустой список, а не null.

Что важно учитывать

  • Обработчик отвечает только за вычисление состава роли.
  • Метод не должен изменять бизнес-данные.
  • Если в процессе вычисления возникает исключение, разрешение роли завершится ошибкой.
Предыдущая
 IScheduledJobHandler
Следующая
DynamicCodeContext 

Содержание

Интерфейс Назначение Метод ResolveRole Параметры Результат Требования к результату LifecycleRoleContext Когда вызывается обработчик Пример Пример с выборкой связанных данных Рекомендации Что важно учитывать
Ничего не найдено

Перейти на русскую версию?