Существует ли известный предел смещения для вызовов API REST NetSuite?

#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, он дает нам такое поведение. Я спишу это на сбой и открою запрос в службу поддержки, спасибо за информацию, это полезно!