Table of Contents

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

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

  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
      }
    ]
  }
}'