<< Click to Display Table of Contents >> Интеграция с внешними системами > Примеры настройки интеграции Как создать документ |
Ситуация
Необходимо простой документ из внешней системы передать в Directum RX.
Решение
Чтобы добавить простой документ (SimpleDocument), нужно отдельными запросами к сервису интеграции создать в Directum RX документ и версию для него, а потом в созданную версию внести содержимое документа. Это можно сделать:
•отдельными запросами для каждой операции;
Отдельные запросы для каждой операции
1.В среде разработки с установленной библиотекой Simple.OData.Client создайте приложение, например консольное. В коде задайте URL запроса, аутентификационные данные и обязательные заголовки. Подробнее см. раздел «Разработка консольного приложения для интеграции».
2.Создайте документ в Directum RX. Для этого напишите POST-запрос, в котором передайте значения для обязательных свойств. Для простого документа это свойство Имя (Name). Пример кода для создания запроса:
// Создание документа типа SimpleDocument.
var newSimpleDocument = await odataClient.For("ISimpleDocuments")
.Set(new { Name = "Пример простого документа" })
.InsertEntryAsync();
3.При создании версии документа нужно указать идентификатор приложения-обработчика (AssociatedApplications), с помощью которого документ можно редактировать. Для этого напишите GET-запрос с функцией фильтрации. Пример кода для создания запроса, который вернет идентификатор приложения-обработчика для файлов в формате DOC:
// Поиск идентификатора подходящего приложения-обработчика для документа.
var associatedApplication = await odataClient.For("IAssociatedApplications")
.Filter("Extension eq 'doc'")
.FindEntriesAsync();
var associatedApplicationId = associatedApplication.First()["Id"];
Примечание. Для упрощения считаем, что в ответе сервиса интеграции будет список с одним соответствием.
4.Создайте версию документа. Для этого напишите POST-запрос, в котором для созданного простого документа заполните обязательное свойство Версии (Versions). Пример кода для создания запроса:
// Создание версии документа.
var newVersion = await odataClient.For("ISimpleDocuments").Key("Id")
.NavigateTo("Versions")
.Set(new { Number = 1, AssociatedApplication = new { Id = associatedApplicationId } })
.InsertEntryAsync();
5.В созданную версию добавьте содержимое документа. Для этого отправьте POST-запрос, в котором для этой версии заполните обязательное свойство Текст (Body). Передавать документ можно в виде строки байт и потока данных. Пример кода для создания запроса:
Передача строки байт
// Добавление строки, закодированной в Base64, в свойство Body версии
// документа. Для примера взята строка "111111".
await odataClient.For("ISimpleDocuments ").Key(newSimpleDocument["Id"])
.NavigateTo("Versions").Key(newVersion["Id"])
.NavigateTo("Body")
.Set(new { Value = "MTExMTEx" })
.InsertEntryAsync();
Передача потока данных
// Добавление значения из потока байт в свойство Body версии документа.
// Для примера взята строка "Test String For Body".
// Преобразуем строку в поток байт.
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("Test String For Body"))) await odataClient
.SetMediaStreamAsync($"ISimpleDocuments({newSimpleDocument ["Id"]})/Versions({newVersion["Id"]})/Body/$value", stream, "mutipart/octet-stream", false);
6.Запустите приложение.
В результате в Directum RX создастся простой документ с одной версией, в которой будет лежать загруженный документ из внешней системы.
Работа с другими видами документов, например с договорами (ContractualDocument), выполняется аналогично.
Запросы можно отправить в одной транзакции с помощью пакетного запроса. Это удобно, если нужно внести в систему много документов. Если при выполнении одного из подзапросов произойдет ошибка, на остальной процесс она не повлияет. Для этого:
1.В среде разработки с установленной библиотекой Simple.OData.Client создайте приложение, например консольное. В коде задайте URL запроса, аутентификационные данные и обязательные заголовки.
2.Напишите пакетный запрос, в котором создается документ и его версия, а в версию добавляется содержимое документа. Для обращения к сущностям, созданным внутри запроса, используйте отрицательные идентификаторы. Пример кода для создания запроса:
// Создание пакетного запроса.
var odataBatchRequest = new ODataBatch(odataClientSettings);
// Создание переменной postRequestsResult для сохранения ответов сервиса интеграции.
object postRequestsResult;
// Создание документа типа SimpleDocument. В подзапросе ему присваивается
// идентификатор -1. Идентификатор используется для обращения к сущности
// только внутри текущего запроса.
odataBatchRequest += async odataClient => postRequestsResult = await odataClient.For("ISimpleDocuments")
.Set(new { Id = -1, Name = "Пример простого документа" })
.InsertEntryAsync();
// Поиск подходящего приложения-обработчика для документа. Для упрощения
// считаем, что в ответе сервиса интеграции будет список с одним
// соответствием.
var associatedApplication = await odataClient.For("IAssociatedApplications")
.Filter("Extension eq 'doc'")
.FindEntriesAsync();
var associatedApplicationId = associatedApplication.First()["Id"];
// Создание версии документа для сущности с идентификатором -1, созданной в
// предыдущем подзапросе. В подзапросе создается запись свойства-коллекции
// с идентификатором -2, который используется для обращения к сущности
// только внутри текущего запроса.
odataBatchRequest += async odataClient => await odataClient.For("ISimpleDocuments").Key(-1)
.NavigateTo("Versions")
.Set(new { Id = -2, Number = 1, AssociatedApplication = new { Id = associatedApplicationId } })
.InsertEntryAsync();
// Добавление строки, закодированной в Base64, в свойство Body версии
// документа. Для примера взята строка "111111". В подзапросе строка
// добавляется в запись свойства-коллекции с идентификатором -2, созданную
// в предыдущем подзапросе.
odataBatchRequest += async odataClient => await odataClient.For("ISimpleDocuments").Key(-1)
.NavigateTo("Versions").Key(-2)
.NavigateTo("Body")
.Set(new { Value = "MTExMTEx" })
.InsertEntryAsync();
// Выполнение пакетного запроса.
await odataBatchRequest.ExecuteAsync();
3.Запустите приложение.
© Компания Directum, 2024 |