Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Синтаксис формул — это набор правил, определяющих, как правильно записывать выражения, чтобы система могла их однозначно понять и вычислить.

Скобки

Формула - это выражение, которое состоит из функций, операндов (==, !=, <> и т д) и констант.

Функция - состоит из имени функции, круглой открывающей и закрывающей скобок и параметров (аргументов), которые перечисляются через запятую внутри скобок. Некоторые функции не имеют параметров, также есть функции, которые могут содержать неограниченное число параметров (например, 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
  • Требуется ли экранирование кавычек внутри строк

...