Поиск по свойствам
Поиск по свойствам позволяет находить объекты, удовлетворяющие указанным критериям. Можно выделить четыре основных случая поиска:
- Поиск по значению свойства и по свойству понятия.
- Поиск по комплексному условию.
- Поиск совместимых с элементом объектов.
- Поиск совместимых объектов по параметру.
Алгоритм
- Авторизация;
- Сбор данных для составления запроса;
- Запрос поиска объектов.
Авторизация
Необходимо пройти стандартную процедуру авторизации требуемого пользователя в выбранном хранилище.
Варианты авторизации:
- Авторизация с использованием командной строки;
- Авторизация с использованием Swagger;
- Авторизация в C# .NET.
Сбор данных для составления запроса
Для начала нужно определить область поиска — это параметр 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
}
]
}
}'