diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index 083726eb68..927741238a 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -2822,6 +2822,20 @@ #КонецОбласти +#Область Slack + +Процедура Слак_ОтправитьСообщение() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); + Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel"); + Текст = "Тестовое сообщение"; + + Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #КонецОбласти diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index 0b11bd5370..d911fbfcb5 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -211,6 +211,7 @@ МассивРазделов.Добавить("Google Calendar"); МассивРазделов.Добавить("Google Drive"); МассивРазделов.Добавить("Notion"); + МассивРазделов.Добавить("Slack"); Возврат МассивРазделов; @@ -227,6 +228,7 @@ Драйв = "Google Drive"; ВСпейс = "Google Workspace"; Ноушн = "Notion"; + Слак = "Slack"; ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов.Колонки.Добавить("Метод"); @@ -329,6 +331,8 @@ НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн); + + НовыйТест(ТаблицаТестов, "Слак_ОтправитьСообщение" , "Отправить сообщение" , Слак); Возврат ТаблицаТестов; diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index 85a8855eb8..b365945b74 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -412,8 +412,9 @@ Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных); Соединение = СоздатьСоединение(Сервер); - ТелоЗапроса = Запрос.ПолучитьТелоКакПоток(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); + + ТелоЗапроса = ПолучитьИмяВременногоФайла(); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры); ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы); @@ -421,6 +422,8 @@ ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок); ЗаписьТекста.Закрыть(); + Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; @@ -434,7 +437,11 @@ Иначе ОбработатьОтвет(Ответ); КонецЕсли; - + + Запрос = Неопределено; + ЗаписьТекста = Неопределено; + + УдалитьФайлы(ТелоЗапроса); Возврат Ответ; КонецФункции @@ -453,9 +460,9 @@ Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных); Соединение = СоздатьСоединение(Сервер); - ТелоЗапроса = Запрос.ПолучитьТелоКакПоток(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); - + ТелоЗапроса = ПолучитьИмяВременногоФайла(); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); + ЗаписатьJSONМультипарт(ЗаписьТекста, Boundary, JSON); ЗаписатьФайлыРелэйтед(ЗаписьТекста, Boundary, Файлы); @@ -464,6 +471,8 @@ ДобавитьContentLength(Запрос); + Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; @@ -473,6 +482,10 @@ ОбработатьОтвет(Ответ); КонецЕсли; + Запрос = Неопределено; + ЗаписьТекста = Неопределено; + + УдалитьФайлы(ТелоЗапроса); Возврат Ответ; КонецФункции @@ -617,7 +630,7 @@ ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + ТипКонтента); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); - ЗаписьТекста.Записать(Файл.Значение); + ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Значение); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); КонецЦикла; @@ -639,7 +652,7 @@ ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + Файл.Значение); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); - ЗаписьТекста.Записать(Файл.Ключ); + ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Ключ); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); @@ -649,6 +662,37 @@ КонецПроцедуры +Процедура ЗаписатьДвоичныеДанные(ЗаписьДанных, Знач ДвоичныеДанные) + + РазмерЧасти = 268435456; + ПрочитанноБайт = 0; + ТекущаяПозиция = 0; + ОбщийРазмер = ДвоичныеДанные.Размер(); + + Пока ПрочитанноБайт < ОбщийРазмер Цикл + + ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); + ПрочитанноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция); + Результат = ЧтениеДанных.Прочитать(РазмерЧасти); + ТекущиеДанные = Результат.ПолучитьДвоичныеДанные(); + РазмерТекущих = ТекущиеДанные.Размер(); + + Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда + Прервать; + КонецЕсли; + + + ЗаписьДанных.Записать(ТекущиеДанные); + + ОсвободитьОбъект(ТекущиеДанные); + ВыполнитьСборкуМусора(); + + ТекущаяПозиция = ТекущаяПозиция + РазмерТекущих; + + КонецЦикла; + +КонецПроцедуры + Процедура ЗаписатьJSONМультипарт(ЗаписьТекста, Знач Boundary, Знач JSON) Если Не ЗначениеЗаполнено(JSON) Тогда