Общая структура формулы
Формула — это выражение, которое возвращает значение (строку, число, дату, список, логическое значение и т.д.).
Базовый вид:
Функция(параметр1, параметр2, ...)
Пример:
if(IsNull(This("Дата начала (План)")), Date(), This("Дата начала (План)"))
Скобки
Круглые скобки ( )
Используются:
1) Для вызова функции, например
- Date()
- User()
- IsNull(...)
- GetList(...)
Без скобок функция не выполняется.
2) Для группировки выражений
if((This("Инициатор.Название")=="Примерсофт"), ...)
Используются при:
- сложных условиях
- нескольких логических операторах
- вложенных выражениях
Фигурные скобки { }
Используются при создании массивов, например:
new Guid[] { Guid("..."), Guid("...") }
Квадратные скобки [ ]
Используются внутри строк (например, при формировании параметров API или JSON), например:
param=[{2}]
Запятая ,
Разделяет параметры функции, например:
if(условие, значение1, значение2)
GetList('GUID', 'фильтр', false)
ВНИМАНИЕ! Лишняя запятая приводит к ошибке.
Кавычки
Двойные кавычки " "
Используются для:
- строковых значений
- названий полей
Например:
This("Название")
Одинарные кавычки ' '
Чаще используются:
- в Field()
- в Parent()
- в строковых фильтрах
Например:
Field('Название')
Parent('Быстрые ссылки', true)
Экранирование кавычек
5.1 Когда требуется экранирование
Экранирование используется, если внутри строки необходимо поставить такие же кавычки, которыми эта строка ограничена.
Если строка заключена в " " — внутренние " нужно записывать как:
\"
5.2 Примеры, когда экранирование ОБЯЗАТЕЛЬНО
1) В строковых фильтрах GetList
Неправильно:
"i => i.Id == Guid("123")"
Правильно:
"i => i.Id == Guid(\"123\")"
2) При формировании JSON внутри строки
Например:
"{\"id\":\"123\"}"
3) В iFormat и строковых шаблонах
Например:
iFormat("param=\"{0}\"", Id())
Если строка находится внутри другой строки — экранирование обязательно.
5.3 Когда экранирование НЕ требуется
- В обычных вызовах функций, например:
Guid("...")
This("Название")
- Если строка ограничена одинарными кавычками, например:
'i => i.Id == Guid("123")'
5.4 Правило проверки
Если кавычка находится внутри уже открытой строки — требуется экранирование.
Точка . — переход к связанному объекту
Используется для доступа к атрибуту связанного объекта, например:
This("Инициатор.Название")
This('source.contenttype.name')
Структура: объект → связанный объект → его свойство
Операторы
Операторы сравнения
Оператор | Значение |
== | равно |
!= | не равно |
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
⚠ В условиях используется ==, а не =.
Логические операторы
Оператор | Значение |
! | НЕ |
&& | И |
Пример:
!IsUserAdmin()
Оператор +
Используется для объединения строк, например:
Shrink(Field('Название'), 5, 3, '-') + '_' + Hash(Field('Название'), 2)
Если один из элементов строка — выполняется конкатенация.
Лямбда-выражение =>
Используется в фильтрах GetLis, напримерt:
'i => i.ContentTypeId == Guid("...")'
Структура:
переменная => условие
Обязательная проверка перед сохранением
Перед сохранением формулы необходимо проверить:
- Закрыты ли все круглые скобки ( )
- Закрыты ли все кавычки " " и ' '
- Нет ли лишней запятой
- Используется ли == вместо =
- Корректна ли вложенность if
- Требуется ли экранирование кавычек внутри строк