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

Примеры кода обработчика

Обновлено: 09.07.2025

Присвоение кода проекту

public class CustomHooks : EntityTypeCustomHooks<Project>
{
    public override async Task AfterUpsert(
        CustomHooksContext context,
        Project contextEntity,
        Project detachedEntity
    )
    {
        var billingTypeService = context.GetEntityService<ProjectBillingType>();
        var billingType = await billingTypeService
            .Get(bt => bt.Id == contextEntity.BillingTypeId)
            .FirstOrDefaultAsync();

        var projectService = context.GetEntityService<Project>();
        var maxRowNumber = await projectService.Get().MaxAsync(p => p.IntegerValue1);
        
         // Создайте дополнительное поле типа "Целое число". В данном случае IntegerValue1. Это индекс номера.
         if (context.OperationType == EntityServiceOperation.Insert)
            contextEntity.IntegerValue1 = (maxRowNumber ?? 0) + 1;

        var billingTypeCode = billingType?.Code?.ToUpper() ?? "NONE";
        var rowNumber = contextEntity.IntegerValue1?.ToString("D5") ?? "NONE";

        // Шаблон: PR-[BillingType]-[Index]
        contextEntity.Code = $"PR-{billingTypeCode}-{rowNumber}";
    }
}

Содержание

Присвоение кода проекту
Ничего не найдено

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