# Приложение

# Язык запросов

Запросы используются в следующих местах:

  1. При экспорте, в компонентах PIMInput и PIMRowInput

  2. При создании дашбордов

  3. При расширенном поиске в системе

Запрос это текст формата JSON (opens new window)

# Базовый синтаксис

{"identifier": "product1"}

Это означает что необходимо найти объекты у которых идентификатор равен "product1". Вам доступны следующие поля:

  • identifier - Идентификатор объекта.
  • id - внутренний идентификатор объекта
  • typeIdentifier - Идентификатор типа объекта.
  • typeId - Внутненний идентификатор типа объекта.
  • parentIdentifier - Идентификатор родительского объекта.
  • name - Это название объекта. Для каждого языка - свое название: name.ru - для русского языка, name.en - для английского и т.д.
  • createdAt - время создания объекта
  • createdBy - кто создал объект
  • updatedAt - время последней модификации объекта
  • updatedBy - кто последний модифицировал объект
  • values - текущие значения атрибутов объекта. Значение каждого атрибута хранится в свойстве с наименованием как идентификатор атрибута. То есть, если у нас есть атрибут color то его значение будет в values.color. Если же этот атрибут еще и зависит от языка, то для каждого языка будет свое значение values.color.ru, values.color.en и т.д.

запрос к составным полям, таким как name.ru, values.color и т.д. выглядит так:

{"name": { "ru" : "наименование"} }

пример для значения атрибута который зависит от языка (идентификатор атрибута - description)

{"values": { "description" : { "ru" : "описание"} } }

Важно в языке запросов есть понятие оператора. в приведенных выше примерах он не присутствует, поэтому считается что используется оператор "равно" (OP_eq). Поэтому, эти же запросы можно выразить так:

{"identifier": {"OP_eq": "product1"} } // identifier = "product1"
{"name": { "ru" : {"OP_eq": "наименование"} } } // name.ru = "наименование"
{"values": { "description" : { "ru" : {"OP_eq": "описание"} } } } // values.description.ru = "описание"

Можно задать несколько условий:

{
    "identifier": "product1",
    "typeIdentifier": "item"
}

В этом случае тоже автоматически используется логический оператор "И" (OP_and). Этот запрос можно переписать как"

{
    "OP_and": [
        { "identifier": "product1" },
        { "typeIdentifier": "item" }
    ]
}

Подобным же образом можно использовать и логический оператор "ИЛИ" (OP_or)

{
    "OP_or": [
        { "identifier": "product1" },
        { "typeIdentifier": "item" }
    ]
}

Будут выбраны все объекты у которых идентификатор равен "product1" ИЛИ идентификатор типа равен "item"

# Операторы

Вам доступны следующие операторы:

  • OP_eq: 3 = 3
  • OP_ne: 20 != 20
  • OP_is: null IS NULL
  • OP_not: true IS NOT TRUE
  • OP_or: [5, 6] (someAttribute = 5) OR (someAttribute = 6)

Операторы сравнения

  • OP_gt: 6 > 6
  • OP_gte: 6 >= 6
  • OP_lt: 10 < 10
  • OP_lte: 10 <= 10
  • OP_between: [6, 10] BETWEEN 6 AND 10
  • OP_notBetween: [11, 15] NOT BETWEEN 11 AND 15

Другие операторы

  • OP_in: [1, 2] IN [1, 2]
  • OP_notIn: [1, 2] NOT IN [1, 2]
  • OP_like: '%hat' LIKE '%hat'
  • OP_notLike: '%hat' NOT LIKE '%hat'
  • OP_startsWith: 'hat' LIKE 'hat%'
  • OP_endsWith: 'hat' LIKE '%hat'
  • OP_substring: 'hat' LIKE '%hat%'
  • OP_iLike: '%hat' ILIKE '%hat' (не зависит от регистра)
  • OP_notILike: '%hat' NOT ILIKE '%hat'
  • OP_regexp: '^[h|a|t]' REGEXP/~ '^[h|a|t]'
  • OP_notRegexp: '^[h|a|t]' NOT REGEXP/!~ '^[h|a|t]'
  • OP_iRegexp: '^[h|a|t]' ~* '^[h|a|t]'
  • OP_notIRegexp: '^[h|a|t]' !~* '^[h|a|t]'

# Логические комбинации

Операторы OP_and, OP_or и OP_not могут использоваться чтобы задать сложные вложенные запросы