#ONECICD-211

Ошибка сравнения версий для обновления
This commit is contained in:
aleksey.koryakin
2019-11-13 17:57:07 +03:00
parent 0009bdd6fa
commit 8bdb16cd90
+49 -33
View File
@@ -74,7 +74,7 @@
Иначе
ВызватьИсключение "Ошибка поиска страницы: " + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка поиска страницы: " + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL, "GET");
КонецЕсли;
@@ -112,7 +112,7 @@
Иначе
ВызватьИсключение "Ошибка получения версии страницы:" + Идентификатор + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка получения версии страницы:" + Идентификатор + ТекстОшибки(РезультатЗапроса, URL, "GET");
КонецЕсли;
@@ -138,18 +138,13 @@
Если УспешныйЗапрос(РезультатЗапроса) Тогда
Регексп = Новый РегулярноеВыражение("""body"":{""storage"":{""value"":""([\w\W]*?)"",""representation"":""storage");
Регексп.Многострочный = ИСТИНА;
Ответ = Регексп.НайтиСовпадения(РезультатЗапроса.Ответ);
Если Ответ.Количество() Тогда
Тело = Ответ[0].Группы[1].Значение;
КонецЕсли;
Данные = ЗначениеИзJSON(РезультатЗапроса.Ответ);
Возврат Данные.body.storage.value;
Иначе
ВызватьИсключение "Ошибка получения версии страницы:" + Идентификатор + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка получения версии страницы:" + Идентификатор + ТекстОшибки(РезультатЗапроса, URL, "GET");
КонецЕсли;
@@ -199,7 +194,7 @@
Иначе
ВызватьИсключение "Ошибка получения подчиненных страниц: " + Идентификатор + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка получения подчиненных страниц: " + Идентификатор + ТекстОшибки(РезультатЗапроса, URL, "GET");
КонецЕсли;
@@ -255,7 +250,7 @@
Иначе
ВызватьИсключение "Ошибка создания страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка создания страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL, "POST");
КонецЕсли;
@@ -343,7 +338,7 @@
Если НЕ УспешныйЗапрос(РезультатЗапроса) Тогда
ВызватьИсключение "Ошибка обновления страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка обновления страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL, "PUT");
КонецЕсли;
@@ -391,7 +386,7 @@
// КодПространства - Строка - Код пространства confluence
// ИмяСтраницы - Строка - Наименование страницы (заголовок)
// Идентификатор - Строка - Идентификатор страницы
// УдалятьПодчиненные - Булево - признак необходимости удаления подчиненых страниц.
// УдалятьПодчиненные - Булево - признак необходимости удаления подчиненных страниц.
// Если данный параметр = ЛОЖЬ и есть подчиненные страницы, то удаление не будет выполнено
// и будет вызвано исключение
//
@@ -427,9 +422,9 @@
URL = ПолучитьURLОперации(,, Идентификатор);
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, "DELETE", URL);
Если НЕ (РезультатЗапроса.КодСостояния = 200 И РезультатЗапроса.КодСостояния = 204) Тогда
Если НЕ (УспешныйЗапрос(РезультатЗапроса) ИЛИ РезультатЗапроса.КодСостояния = 204) Тогда
ВызватьИсключение "Ошибка обновления страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка удаления страницы:" + КодПространства + "." + ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL, "DELETE");
КонецЕсли;
@@ -459,7 +454,7 @@
Иначе
ВызватьИсключение "Ошибка прикрепления метки:" + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка прикрепления метки:" + ТекстОшибки(РезультатЗапроса, URL, "POST");
КонецЕсли;
@@ -485,7 +480,7 @@
Иначе
ВызватьИсключение "Ошибка преобразования markdown → html" + ТекстОшибки(РезультатЗапроса, URLОперации);
ВызватьИсключение "Ошибка преобразования markdown → html" + ТекстОшибки(РезультатЗапроса, URLОперации, "POST");
КонецЕсли;
@@ -525,7 +520,7 @@
ВызватьИсключение СтрШаблон("Ошибка создания страницы: %1.%2%3",
АдресСтраницы.КодПространства,
АдресСтраницы.ИмяСтраницы,
ТекстОшибки(РезультатЗапроса, URL));
ТекстОшибки(РезультатЗапроса, URL, HTTPМетод));
КонецЕсли;
@@ -557,14 +552,15 @@
Если ОбновитьПриИзмененииСодержимого Тогда
ТекущееСодержимое = СодержимоеСтраницыПоИдентификатору(ПараметрыПодключения, АдресСтраницы.Идентификатор);
Регексп = Новый РегулярноеВыражение("id=\\""([a-z0-9-]{36})\\""\ ac\:name"); // идентификаторы плагинов меняются
СодержимоеConfluence = СодержимоеСтраницыПоИдентификатору(ПараметрыПодключения, АдресСтраницы.Идентификатор);
Регексп = Новый РегулярноеВыражение("ac\:macro-id=""[a-z0-9-]{36}"""); // идентификаторы плагинов меняются
Регексп.Многострочный = Истина;
ТекущееСодержимое = Регексп.Заменить(ТекущееСодержимое, "NONE");
СодержимоеConfluence = Регексп.Заменить(СодержимоеConfluence, "NONE");
ВрСодержимое = Регексп.Заменить(Содержимое, "NONE");
Если СтрСравнить(СокрЛП(ТекущееСодержимое), СокрЛП(ВрСодержимое)) = 0 Тогда
Если СтрСравнить(СокрЛП(СодержимоеConfluence), СокрЛП(ВрСодержимое)) = 0 Тогда
Возврат АдресСтраницы.Идентификатор;
Возврат Неопределено;
КонецЕсли;
@@ -584,7 +580,7 @@
Если НЕ УспешныйЗапрос(РезультатЗапроса) Тогда
ВызватьИсключение "Ошибка обновления страницы:" + АдресСтраницы.КодПространства + "." + АдресСтраницы.ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL);
ВызватьИсключение "Ошибка обновления страницы:" + АдресСтраницы.КодПространства + "." + АдресСтраницы.ИмяСтраницы + ТекстОшибки(РезультатЗапроса, URL, HTTPМетод);
КонецЕсли;
@@ -633,11 +629,13 @@
Если Формат = "markdown" Тогда
Значение = ПреобразоватьMarkdownToConfluence(ПараметрыПодключения, Значение);
ТелоСтраницы = Новый Структура("editor", Новый Структура("value, representation", Значение, "editor"));
Хранение = Новый Структура("value, representation", Значение, "editor");
ТелоСтраницы = Новый Структура("editor", Хранение);
Иначе
ТелоСтраницы = Новый Структура("storage", Новый Структура("value, representation", Значение, "storage"));
Хранение = Новый Структура("value, representation", Значение, "storage");
ТелоСтраницы = Новый Структура("storage", Хранение);
КонецЕсли;
@@ -651,6 +649,7 @@
Функция СоздатьИлиОбновить(ПараметрыПодключения, АдресСтраницы, Содержимое, ОбновитьПриИзмененииСодержимого) Экспорт
Результат = Новый Структура("Успешно, Действие");
Если ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
АдресСтраницы.Идентификатор = НайтиСтраницуПоИмени(ПараметрыПодключения, АдресСтраницы.КодПространства, АдресСтраницы.ИмяСтраницы);
@@ -659,19 +658,26 @@
Если Не ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
Идентификатор = Обновить(
РезультатОбновления = Обновить(
ПараметрыПодключения,
АдресСтраницы,
Содержимое,
ОбновитьПриИзмененииСодержимого);
Если РезультатОбновления <> Неопределено Тогда
Результат.Действие = "Обновление";
КонецЕсли;
Иначе
АдресСтраницы.Идентификатор = Создать(ПараметрыПодключения, АдресСтраницы, Содержимое);
Результат.Действие = "Создание";
КонецЕсли;
Возврат АдресСтраницы.Идентификатор;
Результат.Успешно = Истина;
Возврат Результат;
КонецФункции
@@ -771,12 +777,22 @@
КонецФункции
Функция ТекстОшибки(РезультатЗапроса, URL)
Функция ЗначениеИзJSON(СтрокаJSON)
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Возврат Данные;
КонецФункции
Функция ТекстОшибки(РезультатЗапроса, URL, HTTМетод)
Возврат СтрШаблон(
"
|Запрос: %1
|Запрос: [%4] %1
|КодСостояния: %2
|Ответ: %3", URL, РезультатЗапроса.КодСостояния, РезультатЗапроса.Ответ);
|Ответ: %3", URL, РезультатЗапроса.КодСостояния, РезультатЗапроса.Ответ, HTTМетод);
КонецФункции