Пример 3: Поиск клиентов по фамилию или имени и по дате рождения
Правильный Запрос (Request):
{
"boCode": "CLIENT",
"headCodes": [
"SURNAME",
"NAME",
"BIRTH_DATE"
],
"orderingFieldCode": "NAME",
"orderState": "ASC",
"paging": {
"offset": 0,
"limit": 10
},
"state": "ALL",
"brackets": [
{
"id": "DTb445uz", // Это бракет для группировки и задачи приоритета выполнения
"parentId": null,
"parentTreeIds": [],
"connectionType": "AND", // Соединенеи с следующим бракетом в текущем списке
"brackets": [
{
"id": "DTb445uu",
"parentId": "DTb445uz", // Указываем id родителя
"parentTreeIds": ["DTb445uz"], // Указываем id родителей (Только один пока что)
"connectionType": "OR", // Соединенеи с следующим бракетом в текущем списке
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "xQK11@uul08penSM",
"type": "INPUT_TEXT",
"value": "Сидоров"
}
]
},
{
"id": "DTb445uu",
"parentId": "DTb445uz", // Указываем id родителя
"parentTreeIds": ["DTb445uz"], // Указываем id родителей (Только один пока что)
"connectionType": "AND",
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "oDZwyNuzRXrACu7w",
"type": "INPUT_TEXT",
"value": "Андрей"
}
]
}
]
},
{
"id": "DTb445uo", // Бракет с фильтром для Даты Рождения
"parentId": null,
"parentTreeIds": [],
"connectionType": "AND",
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "KpGLlc1U3yzNDLFu", // Вставляем id поля Дата рождения
"type": "DATE", // Тип поля "Дата"
"dateFrom": "1973-09-20T00:00:00.000Z", // Дата с
"dateTo": "2000-12-13T00:00:00.000Z" // Дата по
}
]
}
]
}
Неправильный Запрос (Request):
{
"boCode": "CLIENT",
"headCodes": [
"SURNAME",
"NAME",
"BIRTH_DATE"
],
"paging": {
"offset": 0,
"limit": 10
},
"state": "ALL",
"brackets": [
{
"id": "DTb445uu",
"parentId": null,
"parentTreeIds": [],
"connectionType": "OR",
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "xQK11@uul08penSM",
"type": "INPUT_TEXT",
"value": "Сидоров"
}
]
},
{
"id": "DTb445uu",
"parentId": null,
"parentTreeIds": [],
"connectionType": "AND",
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "oDZwyNuzRXrACu7w",
"type": "INPUT_TEXT",
"value": "Андрей"
}
]
},
{
"id": "DTb445uo", // Бракет с фильтром для Даты Рождения
"parentId": null,
"parentTreeIds": [],
"connectionType": "AND",
"brackets": [],
"dynamicFilters": [
{
"id": "nl4Fcy3Z",
"fieldId": "KpGLlc1U3yzNDLFu", // Вставляем id поля Дата рождения
"type": "DATE", // Тип поля "Дата"
"dateFrom": "1973-09-20T00:00:00.000Z", // Дата с
"dateTo": "2000-12-13T00:00:00.000Z" // Дата по
}
]
}
]
}
В чём разница?
Ответ: Из-за того что мы не сгруппировали и не дали порядок выполнения, неправильный запрос фильтрует данные следующим образом:
- Выдавать всех клиентов у которого фамилия Сидоров И выдавать всех клиентов у которого имя Андрей и дата рождения в диапазоне от 1970 по 2000.
Правильное поведение:
- Выдавать клиентов с именем Андрей или с фамилией Сидоров и у которых Дата рождения с 1970 по 2000.
Взгляните на разницу логики запросов с математической точки зрения:
- Правильный: (Фамилия: Сидоров ИЛИ Имя: Андрей) И Дата рождения: с 1970 по 2000
- Неправильный: Фамилия: Сидоров ИЛИ Имя: Андрей И Дата рождения: с 1970 по 2000
Предусловие:
Создание БО Клиент и полей Фамилия и Имя описано в предусловии запроса примера #1
Добавим новое поле "Дата рождения", и изменим его код поля на "BIRTH_DATE"
Добавим новых клиентов и назначим всем дату рождения
Для написание бракета нам нужно получить id и type поля "Дата рождения": id =
KpGLlc1U3yzNDLFu
, type =DATE
Правильный Ответ (Response):
Клиентов у которых либо имя Андрей, либо фамилия Сидоров - 5, соответственно добавив фильтр на дату рождения их должно стать 4, потому что Андрей Сидоров не входит, так как он 1901 года:
{
"boCode": "CLIENT",
"businessObjectId": "7x9hWxwZ@xa2D3gB",
"heads": [
{
"fieldId": "xQK11@uul08penSM",
"name": "Фамилия",
"code": "SURNAME"
},
{
"fieldId": "oDZwyNuzRXrACu7w",
"name": "Имя",
"code": "NAME"
},
{
"fieldId": "KpGLlc1U3yzNDLFu",
"name": "Дата Рождения",
"code": "BIRTH_DATE"
}
],
"records": [
{
"boId": null,
"instanceId": "7ptdU@OFh~4LEKoJ",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Сидоров",
"displayValue": "Сидоров",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Матвей",
"displayValue": "Матвей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1981-09-11T08:14:07.140Z\"",
"displayValue": "11.09.1981",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "0EkMG5drGnlS~wlE",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Сидоров",
"displayValue": "Сидоров",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Михаил",
"displayValue": "Михаил",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1974-09-20T09:11:34.870Z\"",
"displayValue": "20.09.1974",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "fPhK6xoFo4CmU~IU",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Малахов",
"displayValue": "Малахов",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Андрей",
"displayValue": "Андрей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1999-12-11T18:00:00.000Z\"",
"displayValue": "12.12.1999",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "fB6uONz16zm5B@xP",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Горбачев",
"displayValue": "Горбачев",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Андрей",
"displayValue": "Андрей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1984-12-31T18:00:00.000Z\"",
"displayValue": "01.01.1985",
"isReadOnly": false,
"readOnly": false
}
]
}
],
"hasNext": false,
"totalHits": 4,
"totalHitsMore": false,
"tookInMillis": 2
}
Неправильный Ответ:
Клиентов 5 и Андрей Сидоров входит, потому что его фамилия Сидоров:
{
"boCode": "CLIENT",
"businessObjectId": "7x9hWxwZ@xa2D3gB",
"heads": [
{
"fieldId": "xQK11@uul08penSM",
"name": "Фамилия",
"code": "SURNAME"
},
{
"fieldId": "oDZwyNuzRXrACu7w",
"name": "Имя",
"code": "NAME"
},
{
"fieldId": "KpGLlc1U3yzNDLFu",
"name": "Дата Рождения",
"code": "BIRTH_DATE"
}
],
"records": [
{
"boId": null,
"instanceId": "fPhK6xoFo4CmU~IU",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Малахов",
"displayValue": "Малахов",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Андрей",
"displayValue": "Андрей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1999-12-11T18:00:00.000Z\"",
"displayValue": "12.12.1999",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "fB6uONz16zm5B@xP",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Горбачев",
"displayValue": "Горбачев",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Андрей",
"displayValue": "Андрей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1984-12-31T18:00:00.000Z\"",
"displayValue": "01.01.1985",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "3fdhTt7wmbEtEKda",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Сидоров",
"displayValue": "Сидоров",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Андрей",
"displayValue": "Андрей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1901-09-06T10:04:08.636Z\"",
"displayValue": "06.09.1901",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "7ptdU@OFh~4LEKoJ",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Сидоров",
"displayValue": "Сидоров",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Матвей",
"displayValue": "Матвей",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1981-09-11T08:14:07.140Z\"",
"displayValue": "11.09.1981",
"isReadOnly": false,
"readOnly": false
}
]
},
{
"boId": null,
"instanceId": "0EkMG5drGnlS~wlE",
"values": [
{
"coFieldId": null,
"fieldId": "xQK11@uul08penSM",
"value": "Сидоров",
"displayValue": "Сидоров",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "oDZwyNuzRXrACu7w",
"value": "Михаил",
"displayValue": "Михаил",
"isReadOnly": false,
"readOnly": false
},
{
"coFieldId": null,
"fieldId": "KpGLlc1U3yzNDLFu",
"value": "\"1974-09-20T09:11:34.870Z\"",
"displayValue": "20.09.1974",
"isReadOnly": false,
"readOnly": false
}
]
}
],
"hasNext": false,
"totalHits": 5,
"totalHitsMore": false,
"tookInMillis": 2
}