...
Синтаксис формул — это набор правил, определяющих, как правильно записывать выражения, чтобы система могла их однозначно понять и вычислить.
Скобки
Формула - это выражение, которое состоит из функций, операндов (==, !=, <> и т д) и констант.
Функция - состоит из имени функции, круглой открывающей и закрывающей скобок и параметров (аргументов), которые перечисляются через запятую внутри скобок. Некоторые функции не имеют параметров, также есть функции, которые могут содержать неограниченное число параметров (например, Join, Merge). Функции могут быть вложены одна в другую, т.е. результат одной функции может быть входным параметром (аргументом) другой функции. Все имена функций начинаются с заглавной буквы (не путать с оператором if, он пишется с маленькой буквы).
...
Круглые скобки
( )
Используются:
1) Для вызова функции, напримерКак обязательная составляющая любой функции
Например: Date()
...
; User()
...
; IsNull(...)
...
; GetList(...)
Без скобок функция не выполняется.
2) Для группировки выражений
| Code Block |
|---|
if((This("Инициатор.Название") == "Примерсофт"), ...) |
Используются при :
- сложных условиях
- нескольких логических операторах
- вложенных выражениях
Используются для явного указания приоритета выполнения операций. Выражения внутри скобок вычисляются в первую очередь.
Фигурные скобки { }
Используются:
- при создании массивов, например:
...
- new Guid[] { Guid("..."), Guid("...") }
- как маркеры подстановки (placeholders) в функции Format, которые функция заменяет значениями соответствующих аргументов.
В этом случае фигурные скобки — часть синтаксиса строки форматирования. - как часть формируемого JSON-подобного объекта - могут окружать итоговую конструкцию
Квадратные скобки [ ]
Используются внутри строк (например, при формировании параметров API или JSON) , например:
param=[{2}]для обрамления значения параметра.
Запятая ,
Разделяет параметры функции/оператора, например:
if(условие, значение1, значение2)GetList('GUID', 'фильтр', false
Например
| Code Block |
|---|
if(IsNull(This('Дата начала (План)')), Date(), This('Дата начала (План)')) |
ВНИМАНИЕ! Лишняя запятая приводит к ошибке.
Кавычки
Двойные кавычки " "
Используются для :
...
обозначение строк.
Например:This("Название")
Одинарные кавычки ' '
Чаще используются:
- в Field()
- в Parent()
- в строковых фильтрах
...
| Code Block |
|---|
Field(' |
...
name') |
...
Parent('Быстрые ссылки', true) |
ВНИМАНИЕ! Рекомендуем для кавычек первого уровня (внешних) использовать одинарные кавычки ' '
Экранирование кавычек
...
1.
...
Когда требуется экранирование
Экранирование используетсякавычек знаком "слэш" \ применяется, если внутри строки необходимо поставить такие же кавычки, которыми эта строка ограничена.
Если строка заключена в " " — внутренние " нужно записывать как:
\"
...
, которая заключается в кавычки, тоже надо указать кавычки.
Примеры экранирования кавычек
1) В строковых фильтрах GetList
| Code Block |
|---|
Неправильно: |
...
'i => i.Id == Guid(" |
...
84124eed-7049-46a8-bac9-a179ff00efe3") |
...
' |
| Code Block |
|---|
Правильно: |
...
'i => i.Id == Guid(\" |
...
84124eed-7049-46a8-bac9-a179ff00efe3\") |
...
' |
2) При формировании JSON внутри строки
Например:
| Code Block |
|---|
...
'{\"id\":\" |
...
84124eed-7049-46a8-bac9-a179ff00efe3\"} |
...
' |
3) В iFormat Format и строковых шаблонах
Например:iFormat
| Code Block |
|---|
Format( |
...
'param=\"{0}\" |
...
', Id()) |
Если строка находится внутри другой строки — экранирование обязательно.
5.3 Когда экранирование НЕ требуется
- В обычных вызовах функций, например:
Guid("...")
This("Название")
- Если строка ограничена одинарными кавычками, например:
'i => i.Id == Guid("123")'
5.4 Правило проверки
Если кавычка находится внутри уже открытой строки — требуется экранирование.
Точка .Точка . — переход к связанному объекту
Используется для доступа к атрибуту связанного объекта, например:
| Code Block |
|---|
This( |
...
'Инициатор.Название |
...
') |
...
This('source.contenttype.name') |
Структура: объект → связанный объект → его свойство
Оператор +
Используется для объединения строк, например:
| Code Block |
|---|
Shrink(Field('Название'), 5, 3, '-') + '_' + Hash(Field('Название'), 2) |
Если один из элементов строка — , то выполняется конкатенация.
Лямбда-выражение =>
Используется в фильтрах GetLisGetList, напримерtнапример:
| Code Block |
|---|
GetList('9618f977-0447-4010-88f7-76d8edca255c', 'i => i.ContentTypeId == Guid( |
...
\"84124eed-7049-46a8-bac9-a179ff00efe3\")') |
Структура:
переменная => условие
...
Перед сохранением формулы необходимо проверить:
- Закрыты ли все круглые Для каждой открывающей скобки ( ){ [ должна идти аналогичная закрывающая
- Закрыты ли все кавычки " " и ' '
- Нет ли лишней запятой
- Используется ли == вместо =
- Корректна ли вложенность if
- Требуется ли экранирование кавычек внутри строк
...