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

Обзор и применение динамического кода

Обновлено: 13.03.2026

Примечание

Функция доступна по запросу в поддержку: support@timetta.com.

Важно

Компонента позволяет кастомизировать логику работы с данными:

  • предполагает понимание языка C# и структуры данных Timetta;
  • предназначена для прикладных разработчиков;
  • находится в стадии активного развития.

Если вам нужно переопределение логики, рекомендуем обратиться в поддержку support@timetta.com для платной консультации.

Назначение

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

  • Обработчики сущностей (Entity hooks) — переопределение логики операций CRUD и событий жизненного цикла;
  • Задания по расписанию (Scheduled jobs) — выполнение пользовательского кода по расписанию;
  • Роли жизненного цикла (Lifecycle roles) — вычисление ролей, участвующих в переходах жизненного цикла и логике workflow.

Все эти сценарии используют единый базовый контекст — DynamicCodeContext.

Ограничения динамического кода

Динамический код компилируется и выполняется не как обычный проект C#, а в ограниченном окружении.

Это означает, что в обработчиках, резолверах ролей и заданиях по расписанию доступно только разрешённое подмножество API платформы и .NET.

Что разрешено

В динамическом коде можно:

  • объявлять классы и реализовывать требуемые интерфейсы платформы;

  • использовать базовые типы .NET:

    • System;
    • System.Collections.Generic;
    • System.Linq;
    • System.Linq.Expressions;
    • System.Threading.Tasks;
    • System.Text.Json;
  • выполнять асинхронный код через async/await;

  • использовать API контекста:

    • GetEntityService;
    • GetLifecycleService;
    • GetNotificationService;
    • GetHttpClient;
    • Log;
    • другие методы DynamicCodeContext.

Что запрещено

  • нельзя объявлять using;
  • нельзя объявлять namespace;
  • нельзя использовать произвольные API .NET. Динамический код должен использовать только доступные платформенные API и разрешённые сборки. Не следует рассчитывать, что любой тип из .NET будет доступен при компиляции.

Дополнительные ограничения безопасности

В платформе предусмотрен механизм проверки запрещённых API. Даже если часть проверок сейчас не применяется на этапе компиляции, на динамический код распространяются ограничения по архитектуре и безопасности.

При публикации код проходит проверку ИИ-агентом для предотвращения системных ошибок.

Ограничения на сложность кода

Динамический код должен оставаться компактным и предсказуемым. Следующие конструкции не рекомендуются и могут не скомпилироваться:

  • слишком большие методы;
  • сложная вложенная логика;
  • большое количество циклов;
  • глубокая вложенность циклов;
  • рекурсия;
  • искусственные задержки (Task.Delay).

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

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

Хороший динамический код:

  • решает одну прикладную задачу;
  • использует API платформы, а не низкоуровневые .NET API;
  • не использует собственную инфраструктурную многопоточность;
  • остаётся коротким и читаемым.

Итого

Динамический код — это не полноценная замена обычной серверной разработки, а механизм для безопасного расширения бизнес-логики платформы.

Подходящие сценарии:

  • проверить данные;
  • изменить поля сущности;
  • выбрать связанные записи;
  • отправить уведомление;
  • вызвать внешний HTTP API через GetHttpClient().

Неподходящие сценарии:

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

Содержание

Назначение Ограничения динамического кода Что разрешено Что запрещено Дополнительные ограничения безопасности Ограничения на сложность кода Рекомендации Итого
Ничего не найдено

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