Назначение
Вычисления — универсальный механизм системы, который получает значение по заданной формуле в контексте определённого элемента Vitro-CAD. Для выполнения вычисления нужны два компонента:
- Текущий элемент (контекст) — объект, для которого вычисляется формула: документ, папка, процесс, задача и т.д. В формуле к нему обращаются функцией
This(). - Формула — текстовое выражение из функций, операторов и констант. Результатом может быть строка, число, дата, логическое значение, элемент или список элементов.
Формулы вычисляет модуль Calc на основе движка выражений NCalc, дополненного функциями системы (This, Field, Parent, GetList, Format и др.).
Вычисления, автоматизация и валидаторы
Вычисления — основа автоматизации и валидаторов. Формулами задаются условия правил автоматизации и параметры действий (значения атрибутов, исполнители, получатели оповещений, исходные элементы, адреса внешних сервисов), а в валидаторах — условия срабатывания и условия блокировки. Поэтому ошибка в формуле может остановить процесс согласования или заблокировать сохранение элементов — проверяйте формулы до внедрения (см. Отладка формул).
Структура раздела
| Статья | Содержание |
|---|---|
| Область применения вычислений | Где в системе применяются вычисления: вычисляемые поля, счётчики, синхронизация атрибутов, утилита пересчёта CalcField, автоматизация, валидаторы и др. |
| Синтаксис формул | Общие требования к формулам: из чего состоит формула, операторы, кавычки и экранирование, типы значений, обработка ошибок, проверка перед сохранением. |
| Функции и операторы для формул вычисления | Справочник всех функций и операторов на одной странице: указатель по группам, описание параметров, примеры. |
| Примеры формул | Готовые формулы для типовых задач — каждый пример на отдельной странице, с указателем по группам. |
| Отладка формул | Проверка формул через REST API: расширение Talend API Tester (с токеном из cookie открытой сессии) или консоль браузера; разбор результатов и ошибок. |
Как выполняется вычисление
- Модуль, использующий вычисления (вычисляемое поле, правило автоматизации, валидатор и т.д.), передаёт в Calc элемент-контекст и текст формулы.
- Формула разбирается движком; функции вычисляются в контексте элемента, вложенные функции — изнутри наружу.
- Результат возвращается вызывающему модулю: записывается в атрибут, используется как условие, как список получателей и т.п.
Особенности, которые важно учитывать:
- Синтаксическая ошибка (незакрытая скобка, кавычка) приводит к ошибке всей формулы.
- Ошибка внутри функции (неверный параметр, не найден атрибут или элемент) не прерывает формулу: функция возвращает пустую строку, а вычисление продолжается. Поэтому неверная формула может «молча» вернуть пустое значение или Ложь.
- Формулы с побочным эффектом —
Copy(копирование элемента) иInc(увеличение счётчика) — выполняют действие при каждом вычислении. - Формулы вычисляются с правами системы; доступность элементов для текущего пользователя на результат не влияет (кроме функций, явно работающих с текущим пользователем:
User(),IsUserAdmin()и др.).