Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с добавлением полей для сортировки в запрос #98

Closed
leshchenko1979 opened this issue Dec 8, 2020 · 4 comments · Fixed by #253
Assignees
Labels
bug Something isn't working

Comments

@leshchenko1979
Copy link
Owner

leshchenko1979 commented Dec 8, 2020

  1. Запрос:
task_elapseditem = b.get_all('task.elapseditem.getlist', params={
    'select': ['ID']
})

Ответ:

aiohttp.client_exceptions.ClientResponseError: 400, message='Bad Request'

  1. Запрос:
task_elapseditem = b.call('task.elapseditem.getlist', {'select': ['ID']})

Ответ:

RuntimeError: The server reply contained an error: {'order0': {'error': 'ERROR_CORE', 'error_description': 'TASKS_ERROR_EXCEPTION_#256; 5fcf22346c6765.97054212: Param #0 (taskId) for method ctaskelapseditem::getlist() expected to be of type "integer", but given something else.; 256/TE/WRONG_ARGUMENTS
'}}

@leshchenko1979 leshchenko1979 added the bug Something isn't working label Dec 8, 2020
@leshchenko1979 leshchenko1979 changed the title Возможная проблема с order в get_all Проблема с task.elapseditem.getlist Dec 8, 2020
@leshchenko1979
Copy link
Owner Author

Полагаю, что вставка order0 в список параметров вызывает проблему у сервера. Нужно дать пользователю способ не вставлять этот параметр в запрос.

@leshchenko1979 leshchenko1979 changed the title Проблема с task.elapseditem.getlist Проблема с добавлением полей для сортировки в запрос Dec 29, 2020
@yamplum
Copy link

yamplum commented Jan 23, 2025

Добрый день. Недавно наткнулись на ошибку, вероятно связанную с этим.

Jan 23 04:59:29 iglbenwffj gunicorn[3843410]: {'FILTER': {'>=CALL_START_DATE': '2025-01-07 00:00:00', '<=CALL_START_DATE': '2025-01-08 23:59:59', 'PORTAL_USER_ID': '2605'}}
Jan 23 04:59:29 iglbenwffj gunicorn[3843410]: Starting get_all((<fast_bitrix24.bitrix.Bitrix object at 0x7f15c7198bb0>, 'voximplant.statistic.get', {'FILTER': {'>=CALL_START_DATE': '2025-01-07 00:00:00', '<=CALL_START_DATE': '2025-01-08 23:59:59', 'PORTAL_USER_ID': '2605'}}), {})
Jan 23 04:59:29 iglbenwffj gunicorn[3843410]: Requesting {'method': voximplant.statistic.get, 'params': {'FILTER': {'>=CALL_START_DATE': '2025-01-07 00:00:00', '<=CALL_START_DATE': '2025-01-08 23:59:59', 'PORTAL_USER_ID': '2605'}, 'order': {'ID': 'ASC'}}}
...
Jan 23 04:59:29 iglbenwffj gunicorn[3843410]: aiohttp.client_exceptions.ClientResponseError: 400, message='Bad Request', url=URL('https://gribnoykray.bitrix24.ru/rest/2641/81maknnlfokorllw/voximplant.statistic.get')

Метод voximplant.statistic.get получает параметр сортировки в качестве строки ASC/DESC, не словаря (https://apidocs.bitrix24.ru/api-reference/telephony/voximplant-statistic-get.html). При попытке вызова вручную через Postman с параметрами из логов (включая order) получаем:

{
  "error": "ERROR_ARGUMENT",
  "error_description": "The value of an argument 'ORDER' must be of type string",
  "argument": "ORDER"
}

При попытке подставления параметра ORDER в набор параметров get_all получаем:

TypeError: Clause "ORDER" should be of type <class 'dict'>, but its type is <class 'str'>

Раньше этот вызов каким-то образом работал - возможно, Битрикс игнорировал некорректный параметр - но сейчас он стал выдавать ошибку. Есть ли возможность исправить этот момент?

@leshchenko1979
Copy link
Owner Author

  1. Есть ощущение, что ради одного кривого метода было бы неправильно менять общий алгоритм.

Ещё в каких-либо методах используется формат order в виде строки, а не dict?

  1. Можно попробовать сделать параметр, отменяющий сортировку в get_all() вовсе.

@yamplum
Copy link

yamplum commented Jan 23, 2025

В Битриксе в целом беда с консистентным определением параметров. В процессе разработки другого проекта часто врезались в эти различия. Сейчас не вспомню, но например https://apidocs.bitrix24.ru/api-reference/crm/deals/user-defined-fields/crm-deal-userfield-list.html тоже использует другой формат (хотя и не строку).

Пока что локально исправил проблему путём добавления voximplant.statistic.get в EXCLUDED_METHODS в методе add_order_parameter(). Судя по всему, элементы в ответе по умолчанию и так отсортированы по id: asc.

Не уверен насчёт корректного подхода к решению, но пункт 2 было бы неплохо иметь хотя бы в качестве крайней меры, чтобы можно было передать параметры сортировки вручную. Либо как вариант определить опциональный параметр order_params, который будет иметь приоритет над дефолтным значением.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
2 participants