Общие сведения
Надёжность и безопасность
Покупка лицензии
Начало работы
Роли в системе
Проекты
Концепции
Компоненты
Инструкции
Задачи
Финансы
Ресурсы
Таймшиты
Клиенты
Вики
Затраты
Отчёты и аналитика
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 Когда вызывается обработчик Пример Пример с выборкой связанных данных Рекомендации Что важно учитывать
Ничего не найдено

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