<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Сервис интеграции > Ограничение количества объектов для передачи Пример «Передавать не более 1 000 объектов» |
![]() ![]() |
Ситуация
Через сервис интеграции необходимо получить список договоров по контрагенту с ограниченным набором полей: ИД, наименование, дата создания. Список нужно отфильтровать по имени контрагента. При этом в ответе на запрос должно выводиться не больше 1 000 документов. Если запрошено большее количество документов, то отображать ошибку.
Решение
ВАЖНО. Далее в примерах кода замените значение DEV на ваш код компании и Trade – на имя вашего модуля, в который добавляется интеграционная функция.
1.В среде разработки в своем решении откройте редактор модуля и в группе «Структуры и константы» добавьте новую константу GetDocumentsCountLimits. Укажите в ней лимит по количеству объектов:
public static class Module
{
public const int GetDocumentsCountLimits = 1000;
}
2.В том же редакторе модуля добавьте структуру DocumentList, в которой будет храниться ИД, наименование и дата создания:
[Public]
partial class DocumentList
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime? Created { get; set; }
}
3.Добавьте еще одну структуру GetDocumentResult, которая будет использоваться для вывода текста сообщения и списка договоров:
[Public]
partial class GetDocumentResult
{
public string ErrorText { get; set; }
public List<DEV.Trade.Structures.Module.IDocumentList> documentList { get; set; }
}
4.В ресурсы модуля добавьте текст сообщения. Для этого в дереве решений в контекстном меню модуля выберите пункт Открыть ресурсы. Чтобы добавить ресурс, в контекстном меню табличной части выберите пункт Добавить строку и заполните:
•имя – GetDocumentsCountLimitsOverload;
•текст сообщения – «Превышено допустимое количество документов. Запрошено документов – {0}, максимальное количество – {1}».
5.В редакторе вашего решения добавьте зависимость от модуля Sungero.Contracts.
6.Добавьте интеграционную функцию для получения документов. Для этого в редакторе модуля в группе «Функции» перейдите по ссылке Серверные и создайте функцию GetContractList() с атрибутом [Public(WebApiRequestType = RequestType.Get)]:
[Public(WebApiRequestType = RequestType.Get)]
public virtual DEV.Trade.Structures.Module.IGetDocumentResult GetContractList(int count, string counterpartyName)
{
var result = DEV.Trade.Structures.Module.GetDocumentResult.Create();
// Получить контрагента по имени.
var counterparty = Sungero.Parties.Companies.GetAll(x => x.Name == counterpartyName).FirstOrDefault();
// Если запрашиваемое количество документов превышает лимит,
// показать сообщение об ошибке.
if (count > DEV.Trade.Constants.Module.GetDocumentsCountLimits)
{
result.ErrorText = DEV.Trade.Resources.GetDocumentsCountLimitsOverloadFormat(count, DEV.Trade.Constants.Module.GetDocumentsCountLimits);
return result;
}
// Получить список документов по контрагенту.
result.documentList = new List<DEV.Trade.Structures.Module.IDocumentList>();
result.documentList.AddRange(Sungero.Contracts.Contracts.GetAll(x => x.Counterparty == counterparty).Take(count).Select(x => new DEV.Trade.Structures.Module.DocumentList() {Id = x.Id, Name = x.Name, Created = x.Created}).ToList());
return result;
}
7.Сохраните изменения и опубликуйте решение.
Тестирование
1.Если в параметрах среды разработки установлен флажок Запускать клиент после публикации, то после публикации автоматически запускается веб-клиент. Если флажок не установлен, на панели инструментов нажмите на кнопку Запустить веб-клиент.
2.В открывшейся локальной системе создайте тестовые договоры.
3.Напишите HTTP-запрос к ранее добавленной интеграционной функции. Для этого используйте URL в формате:
{Протокол https или http}://{имя сервера, на котором установлен сервис интеграции}/{имя сервиса интеграции}/odata/{Имя модуля}/{Имя функции (параметры)}
Пример 1. Запрос без превышения лимита
GET-запрос:
http://dev.com/integration/odata/Trade/GetContractList(count=100,counterpartyName='Техносистемы')
Ответ сервиса интеграции:
{
"@odata.context":"http://dev.com/odata/$metadata#Sungero.IntegrationService.Models.Generated.Trade.IGetDocumentResultDto",
"ErrorText":null,
"documentList":[
{
"Id":36,
"Name":"Договор с Техносистемы \"Тестовый\"",
"Created":"2024-05-17T16:43:41+03:00"
}
]
...
}
Пример 2. Запрос с превышением лимита
GET-запрос:
http://dev.com/Integration/odata/Trade/GetContractList(count=10000,counterpartyName='Test')
Ответ сервиса интеграции:
{
"@odata.context":"http://dev.com/odata/$metadata#Sungero.IntegrationService.Models.Generated.Test.IGetDocumentResultDto",
"ErrorText":"Превышено допустимое количество документов. Запрошено документов – 10000, максимальное количество – 1000",
"documentList":[]
}
© Компания Directum, 2024 |