mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-25 02:42:28 +02:00
Переписаны методы http инструментария и события Google Calendar
This commit is contained in:
parent
5039c6b502
commit
e869493655
@ -287,45 +287,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создать событие.
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// Календарь - Строка - ID календаря
|
||||
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
|
||||
|
||||
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events";
|
||||
|
||||
Дата0 = ОписаниеСобытия["ДатаНачала"];
|
||||
Дата1 = ОписаниеСобытия["ДатаОкончания"];
|
||||
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
|
||||
Вложения = ПреобразоватьВложения(Вложения);
|
||||
Уведомления = ОписаниеСобытия["ОтправлятьУведомления"];
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
|
||||
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
|
||||
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
|
||||
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
|
||||
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
|
||||
Параметры.Вставить("attachments", Вложения);
|
||||
|
||||
ПараметрыURL = Новый Структура;
|
||||
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
|
||||
ПараметрыURL.Вставить("supportsAttachments" , ?(Вложения.Количество() > 0, "true", "false"));
|
||||
|
||||
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить событие.
|
||||
//
|
||||
// Параметры:
|
||||
@ -349,6 +310,59 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создать событие.
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// Календарь - Строка - ID календаря
|
||||
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
|
||||
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
|
||||
КонецФункции
|
||||
|
||||
// Переместить событие.
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// КалендарьИсточник - Строка - ID календаря источника
|
||||
// КалендарьПриемник - Строка - ID календаря приемника
|
||||
// Событие - Строка - ID события календаря источника
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
|
||||
|
||||
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||
+ КалендарьИсточник
|
||||
+ "/events/"
|
||||
+ Событие
|
||||
+ "/move?destination="
|
||||
+ КалендарьПриемник;
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, , Заголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Изменить событие.
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// Календарь - Строка - ID календаря
|
||||
// ОписаниеСобытия - Строка - Новое описание события
|
||||
// Событие - Строка - ID события
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// HTTPОтвет - Изменить событие
|
||||
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
|
||||
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
|
||||
КонецФункции
|
||||
|
||||
// Удалить событие.
|
||||
//
|
||||
// Параметры:
|
||||
@ -478,4 +492,43 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
|
||||
|
||||
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||
Существующее = ЗначениеЗаполнено(Событие);
|
||||
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||
+ Календарь
|
||||
+ "/events"
|
||||
+ ?(Существующее, "/" + Событие, "");
|
||||
|
||||
Дата0 = ОписаниеСобытия["ДатаНачала"];
|
||||
Дата1 = ОписаниеСобытия["ДатаОкончания"];
|
||||
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
|
||||
Вложения = ПреобразоватьВложения(Вложения);
|
||||
Уведомления = ОписаниеСобытия["ОтправлятьУведомления"];
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
|
||||
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
|
||||
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
|
||||
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
|
||||
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
|
||||
Параметры.Вставить("attachments", Вложения);
|
||||
|
||||
ПараметрыURL = Новый Структура;
|
||||
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
|
||||
ПараметрыURL.Вставить("supportsAttachments" , ?(Вложения.Количество() > 0, "true", "false"));
|
||||
|
||||
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||
|
||||
Если Существующее Тогда
|
||||
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
|
||||
Иначе
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -26,7 +26,7 @@
|
||||
|
||||
#Область HTTPМетоды
|
||||
|
||||
// Без тела
|
||||
#Область ЗапросыБезТела
|
||||
|
||||
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
||||
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки);
|
||||
@ -36,7 +36,9 @@
|
||||
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки);
|
||||
КонецФункции
|
||||
|
||||
// С телом
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапросыСТелом
|
||||
|
||||
Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON);
|
||||
@ -50,6 +52,10 @@
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON);
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапросыMultipart
|
||||
|
||||
Функция PostMultipart(Знач URL
|
||||
, Знач Параметры
|
||||
, Знач Файлы = ""
|
||||
@ -70,6 +76,8 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
|
||||
|
||||
СоответствиеВозврата = Новый Соответствие;
|
||||
@ -181,22 +189,6 @@
|
||||
Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьСкрипт(Знач Текст) Экспорт
|
||||
|
||||
ИмяСкрипта = ПолучитьИмяВременногоФайла(".ps1");
|
||||
ТекстСкрипта = Новый ТекстовыйДокумент;
|
||||
|
||||
ТекстСкрипта.УстановитьТекст(Текст);
|
||||
|
||||
ТекстСкрипта.Записать(ИмяСкрипта, КодировкаТекста.UTF8);
|
||||
|
||||
КодВозврата = 0;
|
||||
ЗапуститьПриложение("powershell -file " + ИмяСкрипта + " -noexit", , Истина, КодВозврата);
|
||||
|
||||
УдалитьФайлы(ИмяСкрипта);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
@ -208,56 +200,26 @@
|
||||
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
||||
Параметры = Новый Структура;
|
||||
КонецЕсли;
|
||||
|
||||
Переадресация = 300;
|
||||
Ошибка = 400;
|
||||
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Сервер = СтруктураURL["Сервер"];
|
||||
Адрес = СтруктураURL["Адрес"];
|
||||
|
||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
||||
Соединение = СоздатьСоединение(Сервер);
|
||||
|
||||
УстановитьТелоЗапроса(Запрос, Параметры, JSON);
|
||||
|
||||
GZip = "gzip";
|
||||
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||
Заголовки.Вставить("Accept-Encoding", GZip);
|
||||
Заголовки.Вставить("Accept", "*/*");
|
||||
Заголовки.Вставить("Connection", "keep-alive");
|
||||
|
||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||
|
||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
||||
|
||||
Если JSON Тогда
|
||||
Данные = JSONСтрокой(Параметры);
|
||||
Иначе
|
||||
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
||||
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
||||
|
||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
||||
"content-encoding") = GZip;
|
||||
|
||||
Если НужнаРаспаковка Тогда
|
||||
Ответ = РаспаковатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
||||
|
||||
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Попытка
|
||||
Ответ = JsonВСтруктуру(Ответ);
|
||||
Исключение
|
||||
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
||||
КонецПопытки;
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||
|
||||
Если ЭтоПереадрисация Тогда
|
||||
Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, JSON);
|
||||
Иначе
|
||||
ОбработатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
@ -270,40 +232,28 @@
|
||||
Параметры = Новый Структура;
|
||||
КонецЕсли;
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
|
||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||
|
||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||
Переадресация = 300;
|
||||
НеНайдено = 400;
|
||||
Переадресация = 300;
|
||||
Ошибка = 400;
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Сервер = СтруктураURL["Сервер"];
|
||||
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
|
||||
|
||||
Если Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < НеНайдено Тогда
|
||||
Возврат ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
|
||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
|
||||
Соединение = СоздатьСоединение(Сервер);
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||
|
||||
Если ЭтоПереадрисация Тогда
|
||||
Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
|
||||
Иначе
|
||||
ОбработатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
ТелоОтвета = JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
||||
Исключение
|
||||
ТелоОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
|
||||
КонецПопытки;
|
||||
|
||||
Возврат ТелоОтвета;
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// BSLLS:CognitiveComplexity-off
|
||||
// BSLLS:Typo-off
|
||||
|
||||
Функция ВыполнитьЗапросМультипарт(Знач URL
|
||||
, Знач Вид
|
||||
, Знач Параметры
|
||||
@ -319,44 +269,128 @@
|
||||
Файлы = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
ЗаменаТочки = "___";
|
||||
GZip = "gzip";
|
||||
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Переадресация = 300;
|
||||
Ошибка = 400;
|
||||
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
||||
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||
ТипДанных = "multipart/form-data; boundary=" + Boundary;
|
||||
СтруктураURL = РазбитьURL(URL);
|
||||
Сервер = СтруктураURL["Сервер"];
|
||||
Адрес = СтруктураURL["Адрес"];
|
||||
|
||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
||||
Соединение = СоздатьСоединение(Сервер);
|
||||
|
||||
ТелоЗапроса = Запрос.ПолучитьТелоКакПоток();
|
||||
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
|
||||
|
||||
ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры);
|
||||
ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы);
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
|
||||
ЗаписьТекста.Закрыть();
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||
|
||||
Если ЭтоПереадрисация Тогда
|
||||
Ответ = ВыполнитьЗапросМультипарт(Ответ.Заголовки["Location"]
|
||||
, Вид
|
||||
, Параметры
|
||||
, Файлы
|
||||
, ТипКонтента
|
||||
, ДопЗаголовки);
|
||||
Иначе
|
||||
ОбработатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "")
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
|
||||
Заголовки.Вставить("Accept-Encoding", GZip);
|
||||
Заголовки.Вставить("Accept", "*/*");
|
||||
Заголовки.Вставить("Connection", "keep-alive");
|
||||
|
||||
Заголовки.Вставить("Accept-Encoding", "gzip");
|
||||
Заголовки.Вставить("Accept" , "*/*");
|
||||
Заголовки.Вставить("Connection" , "keep-alive");
|
||||
|
||||
Если ЗначениеЗаполнено(ТипДанных) Тогда
|
||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||
|
||||
|
||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
|
||||
|
||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
||||
ТелоЗапроса = НовыйЗапрос.ПолучитьТелоКакПоток();
|
||||
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
|
||||
Возврат НовыйЗапрос;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьСоединение(Знач Сервер)
|
||||
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбработатьОтвет(Ответ)
|
||||
|
||||
GZip = "gzip";
|
||||
НужнаРаспаковка =
|
||||
Ответ.Заголовки.Получить("Content-Encoding") = GZip
|
||||
Или Ответ.Заголовки.Получить("content-encoding") = GZip;
|
||||
|
||||
Если НужнаРаспаковка Тогда
|
||||
Ответ = РаспаковатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
||||
|
||||
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Попытка
|
||||
Ответ = JsonВСтруктуру(Ответ);
|
||||
Исключение
|
||||
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
|
||||
|
||||
Если JSON Тогда
|
||||
Данные = JSONСтрокой(Параметры);
|
||||
Иначе
|
||||
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
||||
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Запрос.УстановитьТелоИзСтроки(Данные);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьПараметрыМультипарт(ЗаписьТекста, Знач Boundary, Знач Параметры)
|
||||
|
||||
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||
|
||||
|
||||
Для Каждого Параметр Из Параметры Цикл
|
||||
|
||||
|
||||
Если Параметр.Значение = Неопределено
|
||||
Или Параметр.Значение = NULL Тогда
|
||||
Продолжить;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
||||
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
|
||||
|
||||
Если ТипЗнч(Параметр.Значение) = Тип("Строка")
|
||||
Или ТипЗнч(Параметр.Значение) = Тип("Число") Тогда
|
||||
|
||||
@ -366,28 +400,37 @@
|
||||
ИначеЕсли ТипЗнч(Параметр.Значение) = Тип("Булево") Тогда
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку(?(Параметр.Значение, "true", "false"));
|
||||
|
||||
Иначе
|
||||
|
||||
ЗаписьТекста.Записать(Параметр.Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Счетчик = 0;
|
||||
Процедура ЗаписатьФайлыМультипарт(ЗаписьТекста, Знач Boundary, Знач ТипКонтента, Знач Файлы)
|
||||
|
||||
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||
ЗаменаТочки = "___";
|
||||
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
|
||||
|
||||
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
||||
|
||||
|
||||
Если ТипКонтента = "image/jpeg" Тогда
|
||||
ИмяФайлаОтправки = "photo";
|
||||
Иначе
|
||||
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
||||
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
|
||||
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
|
||||
ЗаменаТочки, "."));
|
||||
ЗаменаТочки, "."));
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
||||
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
|
||||
+ ИмяФайлаОтправки
|
||||
@ -400,32 +443,10 @@
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
ЗаписьТекста.Записать(Файл.Значение);
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
|
||||
|
||||
ЗаписьТекста.Закрыть();
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
||||
|
||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
||||
"content-encoding") = GZip;
|
||||
|
||||
Если НужнаРаспаковка Тогда
|
||||
Ответ = РаспаковатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные")
|
||||
, JsonВСтруктуру(Ответ)
|
||||
, JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()));
|
||||
|
||||
КонецФункции
|
||||
|
||||
// BSLLS:Typo-on
|
||||
// BSLLS:CognitiveComplexity-on
|
||||
КонецПроцедуры
|
||||
|
||||
#Область GZip
|
||||
|
||||
|
@ -1240,6 +1240,7 @@
|
||||
.ИмеетТип("Массив").Заполнено();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область YandexDisk
|
||||
@ -1637,6 +1638,7 @@
|
||||
Календарь = ПолучитьПараметр("Google_Календарь");
|
||||
Наименование = "Новое событие";
|
||||
Описание = "Описание тестового события";
|
||||
ОписаниеИзм = "Описание тестового события (изм.)";
|
||||
ТипСоответствие = Тип("Соответствие");
|
||||
ТипСтрока = Тип("Строка");
|
||||
Summary = "summary";
|
||||
@ -1667,14 +1669,32 @@
|
||||
.Свойство("description").Равно(Описание)
|
||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||
|
||||
СоответствиеСобытия.Вставить("Описание", ОписаниеИзм);
|
||||
Результат = OPI_GoogleCalendar.ИзменитьСобытие(Токен, Календарь, СоответствиеСобытия, Событие);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат)
|
||||
.ИмеетТип(ТипСоответствие)
|
||||
.Свойство(Summary).Равно(Наименование)
|
||||
.Свойство("description").Равно(ОписаниеИзм)
|
||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||
|
||||
|
||||
Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат)
|
||||
.ИмеетТип(ТипСоответствие)
|
||||
.Свойство(Summary).Равно(Наименование)
|
||||
.Свойство("description").Равно(Описание)
|
||||
.Свойство("description").Равно(ОписаниеИзм)
|
||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||
|
||||
Результат = OPI_GoogleCalendar.ПереместитьСобытие(Токен, Календарь, Календарь, Событие);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат)
|
||||
.ИмеетТип(ТипСоответствие)
|
||||
.Свойство(Summary).Равно(Наименование)
|
||||
.Свойство("description").Равно(ОписаниеИзм)
|
||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||
|
||||
Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
|
||||
|
Loading…
Reference in New Issue
Block a user