Функции WebAPI и OData - PullRequest
       6

Функции WebAPI и OData

0 голосов
/ 19 октября 2018

Я использую вебапи для получения данных.API ограничивает результаты до 100. В этом случае их 2481, но из-за этого ограничения я не могу получить все необходимые записи без использования функций OData.Мне сказали использовать функцию пропуска, но документация по этому вопросу не очень полезна для тех, кто не использовал ее раньше.

Мой звонок выглядит следующим образом:

    https://accounting.sageone.co.za/api/2.0.0/TaxInvoice/get?apikey={xxxxxxxxxx}&companyid=12345&includeDetail=true&$orderby=Created%20desc

Ниже приведен фрагмент первого возвращенного результата:

> {
>     "TotalResults": 2481,
>     "ReturnedResults": 100,
>     "Results": [
>         {
>             "DueDate": "2018-10-31T00:00:00Z",
>             "FromDocument": "",
>             "AllowOnlinePayment": true,
>             "Paid": false,
>             "Status": "Unpaid",
>             "Locked": false,
>             "CustomerId": 3148838,
>             "CustomerName": "Cell C Limited",
>             "SalesRepresentativeId": 37307,
>             "SalesRepresentative": {
>                 "ID": 37307,
>                 "FirstName": "David",
>                 "LastName": "Markman",
>                 "Name": "David Markman",
>                 "Active": true,
>                 "Email": "davidm@infoslipsconnect.com",
>                 "Mobile": "",
>                 "Telephone": "",
>                 "Created": "2018-10-18T12:42:31.233",
>                 "Modified": "2018-10-18T12:46:49.01"
>             },
>             "Modified": "2018-10-18T12:46:49.01",
>             "Created": "2018-10-18T12:42:31.233",
>             "ID": 483959431,
>             "Date": "2018-10-18T00:00:00Z",
>             "Inclusive": false,
>             "DiscountPercentage": 0,
>             "TaxReference": "4870194356",
>             "DocumentNumber": "INV03357",
>             "Reference": "14480 - October Print & Post",
>             "Message": "",
>             "Discount": 0,
>             "Exclusive": 98243.04,
>             "Tax": 14736.46,
>             "Rounding": 0,
>             "Total": 112979.5,
>             "AmountDue": 112979.5,
>             "PostalAddress01": "Cell C ",
>             "PostalAddress02": "Waterfall Campus",
>             "PostalAddress03": "C/O Maxwell Drive and Pretoria Road",
>             "PostalAddress04": "Buccleuch",
>             "PostalAddress05": "",
>             "DeliveryAddress01": "September 2018 Print & Post Distribution",
>             "DeliveryAddress02": "",
>             "DeliveryAddress03": "",
>             "DeliveryAddress04": "",
>             "DeliveryAddress05": "PO: TBC",
>             "Printed": true,
>             "Editable": true,
>             "HasAttachments": false,
>             "HasNotes": false,
>             "HasAnticipatedDate": false,
>             "Lines": [
>                 {
>                     "SelectionId": 4804411,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907379,
>                     "Description": "CELL C PRINT & POST ",
>                     "LineType": 0,
>                     "Quantity": 1,
>                     "UnitPriceExclusive": 0,
>                     "Unit": "",
>                     "UnitPriceInclusive": 0,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": 0,
>                     "Discount": 0,
>                     "Tax": 0,
>                     "Total": 0,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926677,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907380,
>                     "Description": "CellC: PDF Compiled",
>                     "LineType": 0,
>                     "Quantity": 52926,
>                     "UnitPriceExclusive": 0.34,
>                     "Unit": "",
>                     "UnitPriceInclusive": 0.39,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": 17994.84,
>                     "Discount": 0,
>                     "Tax": 2699.23,
>                     "Total": 20694.07,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926854,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907382,
>                     "Description": "CellC: Rounding Difference",
>                     "LineType": 0,
>                     "Quantity": 1,
>                     "UnitPriceExclusive": -238.16,
>                     "Unit": "",
>                     "UnitPriceInclusive": -273.88,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": -238.16,
>                     "Discount": 0,
>                     "Tax": -35.72,
>                     "Total": -273.88,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926687,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907383,
>                     "Description": "CellC: PDF Print",
>                     "LineType": 0,
>                     "Quantity": 109782.5,
>                     "UnitPriceExclusive": 0.73,
>                     "Unit": "",
>                     "UnitPriceInclusive": 0.83,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": 80141.23,
>                     "Discount": 0,
>                     "Tax": 12021.18,
>                     "Total": 92162.41,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926854,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907384,
>                     "Description": "CellC: Rounding Difference",
>                     "LineType": 0,
>                     "Quantity": 1,
>                     "UnitPriceExclusive": -87.82,
>                     "Unit": "",
>                     "UnitPriceInclusive": -100.99,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": -87.82,
>                     "Discount": 0,
>                     "Tax": -13.17,
>                     "Total": -100.99,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926687,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907385,
>                     "Description": "CellC: Hand Delivery",
>                     "LineType": 0,
>                     "Quantity": 2,
>                     "UnitPriceExclusive": 0.34,
>                     "Unit": "",
>                     "UnitPriceInclusive": 0.39,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": 0.68,
>                     "Discount": 0,
>                     "Tax": 0.1,
>                     "Total": 0.78,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926854,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907386,
>                     "Description": "CellC: Rounding Difference",
>                     "LineType": 0,
>                     "Quantity": 1,
>                     "UnitPriceExclusive": -0.01,
>                     "Unit": "",
>                     "UnitPriceInclusive": -0.01,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>                     "Exclusive": -0.01,
>                     "Discount": 0,
>                     "Tax": 0,
>                     "Total": -0.01,
>                     "Comments": "",
>                     "AnalysisCategoryId1": 16041,
>                     "UnitCost": 0
>                 },
>                 {
>                     "SelectionId": 12926761,
>                     "TaxTypeId": 2691481,
>                     "ID": 328907387,
>                     "Description": "CellC: Nixie",
>                     "LineType": 0,
>                     "Quantity": 1,
>                     "UnitPriceExclusive": 432.28,
>                     "Unit": "",
>                     "UnitPriceInclusive": 497.12,
>                     "TaxPercentage": 0.15,
>                     "DiscountPercentage": 0,
>            "Exclusive": 432.28,
>             "Discount": 0,
>              "Tax": 64.84,
>               "Total": 497.12,
>                "Comments": "",
>                 "AnalysisCategoryId1": 16041,
>                  "UnitCost": 0
>               }
>            ]
>         },

Мне нужно сделать следующее: Вернуть все записи, в которых конкретное поле («Создано») содержит текущий год, даже если их больше100 результатов.Я предполагаю, что необходимо использовать функции $ search и skip, но я не уверен в синтаксисе.

Спасибо, Стивен

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Чтобы вернуть все записи, в которых определенное поле («Создано») содержит текущий год, необходимо добавить к URL-адресу приведенные ниже критерии фильтрации.Вы можете увидеть другую поддерживаемую функцию OData Date здесь .

&$filter=year(Created) eq 2018

OData обрабатывает нумерацию страниц для служб, которые могут возвращать огромные данные.Поскольку ограничение API равно 100, что указывает на размер страницы данных, поэтому вы получите максимум 100 записей на один сервисный вызов.Чтобы получить записи от 101 до 200, вам нужно пропустить первые 100, добавив $skip=100 к URL.Также, если вам нужно получить записи с 201 по 300, добавьте $ skip = 200 к URL и так далее, пока не получите 2481 запись.Это означает, что вам нужно вызвать службу в 25 раз, увеличив значение $skip.

Таким образом, с дополнительным фильтром и пропуском запроса, вам нужно добавить строку запроса ниже к существующему URL

 &$filter=year(Created) eq 2018&$skip=100

Кроме того, если вы хотите получить записи менее 100 за вызов службы, вам нужно использовать $top запрос.Допустим, если в вашем приложении размер страницы 50, добавьте $top=50 к строке запроса.

0 голосов
/ 22 октября 2018

В соответствии с документацией здесь , вам необходимо добавить аргумент пропуска в URL.

Что-то вроде:

https://accounting.sageone.co.za/api/2.0.0/TaxInvoice/get?apikey={xxxxxxxxxx}&companyid=12345&includeDetail=true&$skip=100&$orderby=Created%20desc

Предоставленный пример:

https://services.odata.org/OData/OData.svc/Products?$skip=2&$top=2&$orderby=Rating

Возможно, вам придется немного поиграть, но это похоже на метод.

...