Table of Contents

Поиск по свойствам

Поиск по свойствам позволяет находить объекты, удовлетворяющие указанным критериям. Можно выделить четыре основных случая поиска:

  1. Поиск по значению свойства и по свойству понятия.
  2. Поиск по комплексному условию.
  3. Поиск совместимых с элементом объектов.
  4. Поиск совместимых объектов по параметру.

Алгоритм

  • Авторизация;
  • Сбор данных для составления запроса;
  • Запрос поиска объектов.

Авторизация

Необходимо пройти стандартную процедуру авторизации требуемого пользователя в выбранном хранилище.

Варианты авторизации:

Сбор данных для составления запроса

Для начала нужно определить область поиска — это параметр propertyOwner. По умолчанию используется раздел «Все справочники» с фиксированным идентификатором ObjectId = 1, TypeId = 203. В качестве области поиска можно указать любой справочник, каталог или группу.

Поиск по значению свойства и по свойству понятия

Если поиск выполняется по значению свойства, в простом поисковом условии заполняется параметр definition.

Запрос

curl -X 'POST' \
  'YOUR_HOST/api/v1/search/property-search-result' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "ownerScope": {
    "objectId": 1,
    "typeId": 203
  },
  "condition": {
    "enabled": true,
    "intersectionType": 1,
    "simpleConditions": [
      {
        "enabled": true,
        "definition": {
          "objectId": 1,
          "typeId": 9
        },
        "searchConditionTargetQualifier": null,
        "operation": 3,
        "options": 0,
        "value": {
          "objectId": 1134,
          "typeId": 25
        }
      }
    ],
    "complexConditions": null,
    "elementConditions": null,
    "propValueConditions": null
  },
  "values": {
    "stringProperties": [
      {
        "objectId": 1134,
        "typeId": 25,
        "value": "361 Суда"
      }
    ]
  }
}'

Ответ

В качестве ответа возвращается объект с информацией об общем количестве найденных элементов (totalCount), общем количестве страниц результатов поиска (totalPages), текущем номере и размере страницы (pageNumber и pageSize) и признаках существования предшествующей и последующей страниц (hasPreviousPage и hasNextPage). В блоке "items" размещен список найденных элементов.

{
  "items": [
    {
      "typeDiscriminator": "PropertySearchResultObject",
      "name": "361 Суда",
      "applicability": 2,
      "innerObjects": [],
      "multiClassificationPaths": [],
      "iconCode": 0,
      "path": [
        {
          "typeDiscriminator": "NamedObject",
          "name": "Классификатор ЕСКД",
          "objectId": 1,
          "typeId": 48
        },
        {
          "typeDiscriminator": "NamedObject",
          "name": "Классификатор ЕСКД",
          "objectId": 1,
          "typeId": 40
        },
        {
          "typeDiscriminator": "NamedObject",
          "name": "36 Суда, судовое оборудование",
          "objectId": 960,
          "typeId": 39
        },
        {
          "typeDiscriminator": "NamedObject",
          "name": "361 Суда",
          "objectId": 966,
          "typeId": 39
        }
      ],
      "objectId": 73592,
      "typeId": 4
    }
  ],
  "pageNumber": 0,
  "pageSize": 0,
  "totalPages": 0,
  "totalCount": 1,
  "hasPreviousPage": false,
  "hasNextPage": false
}

Если поиск выполняется по свойству понятия, заполняется атрибут searchConditionTargetQualifier, а definition задается как null.

Запрос

curl -X 'POST' \
  'YOUR_HOST/api/v1/search/property-search-result' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "ownerScope": {
    "objectId": 1,
    "typeId": 203
  },
  "condition": {
    "enabled": true,
    "intersectionType": 1,
    "simpleConditions": [
      {
        "enabled": true,
        "definition": null,
        "searchConditionTargetQualifier": {
          "objectId": 37,
          "typeId": 54
        },
        "operation": 3,
        "options": 0,
        "value": {
          "objectId": 1134,
          "typeId": 25
        }
      }
    ],
    "complexConditions": null,
    "elementConditions": null,
    "propValueConditions": null
  },
  "values": {
    "stringProperties": [
      {
        "objectId": 1134,
        "typeId": 25,
        "value": "361 Суда"
      }
    ]
  }
}'

Примечание

Обратите внимание: при заполнении simpleConditions нужно указать либо definition, либо searchConditionTargetQualifier. Одновременно указывать оба нельзя — это противоречит логике API.

Поиск по комплексному условию

Составное условие используется в одном случае — когда критерий поиска задает период времени. Такое условие состоит из двух простых условий типа «Дата/Время»: в первом операция сравнения «больше или равно», во втором — «меньше или равно» (см. параметр operation).

Комплексное условие поиска по свойствам

Запрос

curl -X 'POST' \
  'YOUR_HOST/api/v1/search/property-search-result' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "ownerScope": {
    "objectId": 1,
    "typeId": 203
  },
  "condition": {
    "enabled": true,
    "intersectionType": 1,
    "simpleConditions": null,
    "complexConditions": [
      {
        "intersectionType": 1,
        "simpleConditions": [
          {
            "definition": {
              "objectId": 1,
              "typeId": 16
            },
            "operation": 6,
            "options": 0,
            "value": {
              "objectId": 171583,
              "typeId": 34
            },
            "enabled": true
          },
          {
            "definition": {
              "objectId": 1,
              "typeId": 16
            },
            "operation": 4,
            "options": 0,
            "value": {
              "objectId": 171584,
              "typeId": 34
            },
            "enabled": true
          }
        ],
        "enabled": true
      }
    ],
    "elementConditions": null,
    "propValueConditions": null
  },
  "values": {
    "dateTimeProperties": [
      {
        "value": "2024-12-11T00:00:00",
        "useTime": false,
        "objectId": 171583,
        "typeId": 34
      },
      {
        "value": "2025-02-11T00:00:00",
        "useTime": false,
        "objectId": 171584,
        "typeId": 34
      }
    ]
  }
}'

Поиск совместимых с элементом объектов

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

Примечание

Обратите внимание: некоторые критерии обязательны — их нужно указывать всегда, иначе запрос вернёт ошибку.

Запрос

curl -X 'POST' \
  'YOUR_HOST/api/v1/search/property-search-result' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "ownerScope": {
    "objectId": 1,
    "typeId": 203
  },
  "condition": {
    "enabled": true,
    "intersectionType": 0,
    "simpleConditions": null,
    "complexConditions": null,
    "elementConditions": [
      {
        "enabled": true,
        "element": {
          "objectId": 383315,
          "typeId": 4
        },
        "linkDefinitionEnd": {
          "objectId": 5055,
          "typeId": 36
        },
        "enabledComparingConditionDefinitions": [
          {
            "objectId": 18,
            "typeId": 209
          }
        ]
      }
    ],
    "propValueConditions": null
  }
}'

Поиск совместимых объектов по параметру

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

Запрос

curl -X 'POST' \
  'YOUR_HOST/api/v1/search/property-search-result' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "ownerScope": {
    "objectId": 1,
    "typeId": 203
  },
  "condition": {
    "intersectionType": 1,
    "simpleConditions": [],
    "complexConditions": [],
    "elementConditions": [],
    "propValueConditions": [
      {
        "comparingConditions": [
          {
            "propertyValue": {
              "objectId": 83271,
              "typeId": 24
            },
            "isEnabled": true,
            "comparingConditionDefinition": {
              "objectId": 18,
              "typeId": 209
            }
          }
        ],
        "linkDefinitionEnd": {
          "objectId": 5054,
          "typeId": 36
        },
        "enabled": true
      }
    ],
    "enabled": true
  },
  "values": {
    "doubleProperties": [
      {
        "mode": 0,
        "value": 123,
        "minValue": 0,
        "maxValue": 0,
        "lowerTolerance": 0,
        "upperTolerance": 0,
        "objectId": 83271,
        "typeId": 24
      }
    ]
  }
}'