#rest #netsuite #erp
Вопрос:
мир! Мы пытаемся использовать NetSuite SuiteQL REST API для извлечения данных. Это прекрасно работает для большинства записей, которые мы ищем, но мы столкнулись с интересной проблемой, когда столкнулись с большими столами.
Поскольку известный предел одной страницы данных составляет 1000 строк, мы просто вызываем ее с ограничением в 1000 и устанавливаем смещения с шагом в 1000 строк. Что-то интересное происходит, когда мы получаем смещение в 100 000 строк для записи, размер которой превышает 100 000 строк.
Если мы позвоним https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=98000, мы получаем все ссылки, которые мы ожидаем.
{
"links": [
{
"rel": "previous",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=97000"
},
{
"rel": "first",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=0"
},
{
"rel": "next",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=99000"
},
{
"rel": "last",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=753000"
},
{
"rel": "self",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=98000"
}
],
"count": 1000,
"hasMore": true,
"items": [
{
[heres my data]...
Установив его на 99 000, большая часть этой информации исчезнет. Это почти так же, как если бы он думал, что это последняя страница.
{
"links": [
{
"rel": "previous",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=98000"
},
{
"rel": "first",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=0"
},
{
"rel": "self",
"href": "https://myinstance.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000amp;offset=99000"
}
],
"count": 1000,
"hasMore": false,
"items": [
{
[heres my data]...
Если установить его на 100 000, это приведет к ошибке.
{
"type": "https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5",
"title": "Not Found",
"status": 404,
"o:errorDetails": [
{
"detail": "The specified query parameter 'offset' is out of bounds. Provide value between 0 and 753000.",
"o:errorQueryParam": "offset",
"o:errorCode": "INVALID_PARAMETER"
}
]
Кто — нибудь видел подобное поведение раньше? Я просмотрел документацию и не смог найти никаких упоминаний об ограничении смещений страниц, поэтому я думаю, что это может быть какая-то ошибка (тот факт, что она даже указывает вам максимальные границы и явно превышает указанное смещение, заставляет меня думать, что это ошибка), но надеюсь, что кто-то, возможно, видел это раньше и даже лучше, имеет идеи о том, как это обойти!
Ответ №1:
в официальной документации для веб-сервисов NetSuite REST упоминается это ограничение [1]:
Используя запросы SuiteQL, вы можете вернуть максимум 100 000 результатов. Дополнительные сведения см. в разделе query.runSuiteQLPaged(параметры).
Комментарии:
1. О, я, должно быть, пропустил это немного. Это приятно знать, но немного разочаровывает. Знаете ли вы о каких-либо действенных методах обхода этого, которые вы, возможно, видели раньше?
2. @брайан Официальная документация по модулю N/query SuiteScript [1 ]: > Если функция SuiteAnalytics Connect включена в вашей учетной записи NetSuite, количество результатов, которые может возвращать этот метод, не ограничено. Если функция SuiteAnalytics Connect не включена, этот метод может возвращать максимум 100 000 результатов на всех страницах в наборе результатов.
3. О, попался. У нас это включено, и, как ни странно, когда мы просто передаем инструкцию SuiteQL в оболочке в рестлет, она возвращает все. Просто когда мы используем настоящий API SuiteQL, он дает нам такое поведение. Я спишу это на сбой и открою запрос в службу поддержки, спасибо за информацию, это полезно!