Мельница данных  (13.12.2024)
Использование возвращаемого ответа

При корректном выполнении запроса ответ будет представлять собой набор данных следующей структуры:

  • При использовании формата xml будет возвращен xml-документ с корневым элементом data, который будет иметь атрибуты handle (GUID) и eof ("1" или "0"). Элемент data будет иметь подчиненные элементы row, каждый из которых будет соответствовать одной записи, полученной при выполнении запроса. Каждый элемент row будет иметь подчиненные элементы, соответствующие what-элементам запроса.
  • При использовании формата JSON будет возвращен JSON-объект, содержащий пары ключ-значение handle (значение типа GUID), eof (значения "0" или "1") и data. Значением data будет массив пар ключ-значение, каждая из которых будет соответствовать одной записи, полученной при выполнении запроса.

Обработчик сервера приложений, обеспечивающий работу функций RESTfull-сервисов, в том числе функции cursor, имеет параметры, ограничивающие размер пакета возвращаемых данных, выраженные в количестве объектов в ответе и в объеме ответа в байтах. В случае, если размер ответа укладывается в оба этих ограничения, все полученные данные будут возвращены полностью, и в ответе будет передан атрибут (значение) eof="1". В случае, если размер ответа превысит одно из ограничений, и при этом в запросе атрибут fetchall не задан или равен "0", то в ответ войдет только такой набор записей, который позволит соблюсти ограничения, и при этом в ответе будет передан атрибут (значение) eof="0". Если в запросе был передан атрибут fetchall="1", то будет выполнена попытка вернуть весь ответ полностью, несмотря на установленные ограничения. При успешной передаче атрибут (значение) eof будет равен "1".

Пример
Пример запроса:
1  <query class="TWorker" fetchall="1">
2    <item part="0" name="LastName"/>
3    <item part="0" name="FirstName"/>
4    <item part="0" name="BirthDate"/>
5    <item part="0" name="AcademicStatus"/>
6    <item part="1" name="BirthDate" value=">12.05.2000"/>
7  </query>
  
Пример ответа в формате xml:
01  <data handle="{FDF9EE70-9948-4A99-8233-349C3ADD3CE8}" eof="1">
02    <row>
03      <LastName>Абишин</LastName>
04      <FirstName>Вячеслав</FirstName>
05      <BirthDate type="date">10.06.2014</BirthDate>
06      <AcademicStatus>к.э.н.</AcademicStatus>
07    </row>
08    <row>
09      <LastName>Агринская</LastName>
10      <FirstName>Ольга</FirstName>
11      <BirthDate type="date">24.08.2016</BirthDate>
12      <AcademicStatus>PhD</AcademicStatus>
13    </row>
14    <row>
15      <LastName>Абрамов</LastName>
16      <FirstName>Александр</FirstName>
17      <BirthDate type="date">05.09.2016</BirthDate>
18     <AcademicStatus/>
19    </row>
20  </data>
  
Пример ответа в формате JSON:
01  {
02      "handle": "{C57F629E-583C-4477-ACBF-E436F6D01628}",
03      "eof": true,
04      "data": [
05          {
06              "LastName": "Абишин",
07              "FirstName": "Вячеслав",
08              "BirthDate": {
09                  "year": 2014,
10                  "month": 5,
11                  "day": 10
12              },
13              "AcademicStatus": "к.э.н."
14          },
15          {
16              "LastName": "Агринская",
17              "FirstName": "Ольга",
18              "BirthDate": {
19                  "year": 2016,
20                  "month": 7,
21                  "day": 24
22              },
23              "AcademicStatus": "PhD"
24          },
25          {
26              "LastName": "Абрамов",
27              "FirstName": "Александр",
28              "BirthDate": {
29                  "year": 2016,
30                  "month": 8,
31                  "day": 5
32              },
33              "AcademicStatus": null
34          }
35      ]
36  }
  

Значение eof = "1" означает, что данные получены полностью. Если в ответе такого значения (атрибута) нет, или eof = "0", это означает, что получены не все данные. Дополучить эти данные можно, повторно выполнив вызов функции cursor, передав в качестве значения параметра query полученное при первом вызове значение handle.
Пример
https://techmill.ru/demo/cursor.xml?query={FDF9EE70-9948-4A99-8233-349C3ADD3CE8}
    
В ответе на запрос с использованием handle вернется то же самое значение handle. Таким образом, запрос можно повторять с одним и тем же значением handle до тех пор, пока в ответе не будет получено eof = "1", что позволит убедиться в том, что данные получены полностью.