Описание

This commit is contained in:
aleksey.koryakin
2019-12-09 19:02:15 +03:00
parent 153e09eba4
commit e90a603588
2 changed files with 161 additions and 60 deletions
+34
View File
@@ -32,3 +32,37 @@
#### Установка метки странице
`Confluence.ПрикрепитьМеткуКСтранице(ПараметрыПодключения, ИдентификаторСтраницы, "Моя метка")`
### Примеры нового API
```bsl
// Настройки подключения
Подключение = Confluence.ОписаниеПодключения("https://confluence.myserver.ru", "user", "password")
// Получение идентификатора страницы
ИдентификаторРодителя = Confluence.НайтиСтраницуПоИмени(Подключение, "SpaceKey", "Корневая страница");
// Структура адреса страницы (Пространство, Наименование, Идентификатор, Родитель)
АдресСтраницы = Confluence.АдресСтраницы("SpaceKey", "Новая страница", , ИдентификаторРодителя);
// Создадим новую страницу
Confluence.Создать(Подключение, АдресСтраницы, "Содержимое страницы");
Сообщить("Идентификатор новой страницы: " + АдресСтраницы.Идентификатор)
// Обновим содержимое
Confluence.Обновить(Подключение, АдресСтраницы, "Новое содержимое страницы", Истина);
// Адрес второй страницы
АдресСтраницы = Confluence.АдресСтраницы("SpaceKey", "Вторая страница", , ИдентификаторРодителя);
// Обновим если содержимое отличается, либо создадим если отсутствует
Confluence.СоздатьИлиОбновить(Подключение, АдресСтраницы, "Содержимое второй страницы");
// Опубликуем страницу в формате Markdown
АдресСтраницы = Confluence.АдресСтраницы("SpaceKey", "Третья страница Markdown", , ИдентификаторРодителя);
Содержимое = Новый Структура("Значение, Формат", "# Содержимое третьей страницы", confluence.ФорматыСодержимого.MarkDown);
Confluence.СоздатьИлиОбновить(Подключение, АдресСтраницы, Содержимое);
```
+127 -60
View File
@@ -140,7 +140,7 @@
Если УспешныйЗапрос(РезультатЗапроса) Тогда
Данные = ЗначениеИзJSON(РезультатЗапроса.Ответ);
Данные = ДесериализоватьJSON(РезультатЗапроса.Ответ);
Возврат Данные.body.storage.value;
@@ -464,32 +464,20 @@
КонецФункции
Функция ПреобразоватьMarkdownToConfluence(ПараметрыПодключения, СодержимоеMarkdown) Экспорт
Идентификатор = "";
URLОперации = "rest/tinymce/1/markdownxhtmlconverter";
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("wiki", СодержимоеMarkdown);
Тело = СтрокаJSON(ПараметрыОперации);
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, "POST", URLОперации, Тело, "text/html; charset=UTF-8");
Если УспешныйЗапрос(РезультатЗапроса) Тогда
Возврат РезультатЗапроса.Ответ;
Иначе
ВызватьИсключение "Ошибка преобразования markdown → html" + ТекстОшибки(РезультатЗапроса, URLОперации, "POST");
КонецЕсли;
Возврат Идентификатор;
КонецФункции
#Область НовоеAPI
// АдресСтраницы
// Описание расположения страницы
//
// Параметры:
// КодПространства - Строка - Код пространства confluence
// ИмяСтраницы - Строка - имя страницы, должно быть уникально в пределах пространства
// Идентификатор - Строка - Идентификатор страницы confluence, может быть получен только поиском
// ИдентификаторРодителя - Строка - Идентификатор родителя страницы confluence, может быть получен только поиском
//
// Возвращаемое значение:
// Структура - Описание расположения страницы
//
Функция АдресСтраницы(КодПространства, ИмяСтраницы = "", Идентификатор = "", ИдентификаторРодителя = "") Экспорт
Адрес = Новый Структура;
@@ -503,6 +491,19 @@
КонецФункции
// Создать
// Создает новую страницу в confluence и возвращает идентификатор новой страницы, также установив его в "АдресСтраницы"
//
// Параметры:
// ПараметрыПодключения - Структура - Описание подключения, см. confluence.ОписаниеПодключения
// АдресСтраницы - Структура - Описание расположения страницы, см. confluence.АдресСтраницы
// Содержимое - Строка, Структура - Содержимое новой страницы.
// либо строка содержимого в формате confluence
// либо структура с ключами Значение и Формат (Confluence, Markdown, HTML)
//
// Возвращаемое значение:
// Строка - Идентификатор созданной страницы
//
Функция Создать(ПараметрыПодключения, АдресСтраницы, Содержимое = Неопределено) Экспорт
HTTPМетод = "POST";
@@ -512,7 +513,7 @@
URL = ПолучитьURLОперации();
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, HTTPМетод, URL, СтрокаJSON(ПараметрыКоманды));
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, HTTPМетод, URL, СериализоватьJSON(ПараметрыКоманды));
Если УспешныйЗапрос(РезультатЗапроса) Тогда
@@ -531,6 +532,23 @@
КонецФункции
// Обновить
// Выполняет обновление существующей страницы
//
// Параметры:
// ПараметрыПодключения - Структура - Описание подключения, см. confluence.ОписаниеПодключения
// АдресСтраницы - Структура - Описание расположения страницы, см. confluence.АдресСтраницы
// Содержимое - Строка, Структура - Содержимое новой страницы.
// либо строка содержимого в формате confluence
// либо структура с ключами Значение и Формат (Confluence, Markdown, HTML)
//
// ОбновитьПриИзмененииСодержимого - Булево - Выполнять только если содержимое изменено,
// Если установлено в Истина, но меняется только родитель или имя страницы - изменения не будут применены
//
// Возвращаемое значение:
// Неопределено, Строка - Когда обновление не требуется будет возвращено Неопределено,
// в других случаях - идентификатор страницы
//
Функция Обновить(ПараметрыПодключения, АдресСтраницы, Содержимое = Неопределено, ОбновитьПриИзмененииСодержимого = Ложь) Экспорт
Если ПустаяСтрока(АдресСтраницы.ИмяСтраницы) И ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
@@ -590,7 +608,7 @@
ПараметрыКоманды = ПараметрыСозданияОбновления(АдресСтраницы, ОписаниеСодержимого, Версия);
ТелоЗапроса = СтрокаJSON(ПараметрыКоманды);
ТелоЗапроса = СериализоватьJSON(ПараметрыКоманды);
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, HTTPМетод, URL, ТелоЗапроса);
@@ -602,7 +620,66 @@
Возврат АдресСтраницы.Идентификатор;
КонецФункции // ОбновитьСтраницу()
КонецФункции
// СоздатьИлиОбновить
// Создает новую страницу, либо обновление существующую
//
// Параметры:
// ПараметрыПодключения - Структура - Описание подключения, см. confluence.ОписаниеПодключения
// АдресСтраницы - Структура - Описание расположения страницы, см. confluence.АдресСтраницы
// Содержимое - Строка, Структура - Содержимое новой страницы.
// либо строка содержимого в формате confluence
// либо структура с ключами Значение и Формат (Confluence, Markdown, HTML)
// ОбновитьПриИзмененииСодержимого - Булево - Выполнять только если содержимое изменено,
// Если установлено в Истина, но меняется только родитель или имя страницы - изменения не будут применены
//
// Возвращаемое значение:
// Структура - Ключи:
// Успешно - Булево - не было ошибок
// Действие - Строка - "Создание", "Обновление", Неопределено
//
Функция СоздатьИлиОбновить(ПараметрыПодключения, АдресСтраницы, Содержимое, ОбновитьПриИзмененииСодержимого) Экспорт
Результат = Новый Структура("Успешно, Действие");
Если ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
АдресСтраницы.Идентификатор = НайтиСтраницуПоИмени(ПараметрыПодключения, АдресСтраницы.КодПространства, АдресСтраницы.ИмяСтраницы);
КонецЕсли;
Если Не ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
РезультатОбновления = Обновить(
ПараметрыПодключения,
АдресСтраницы,
Содержимое,
ОбновитьПриИзмененииСодержимого);
Если РезультатОбновления <> Неопределено Тогда
Результат.Действие = "Обновление";
КонецЕсли;
Иначе
АдресСтраницы.Идентификатор = Создать(ПараметрыПодключения, АдресСтраницы, Содержимое);
Результат.Действие = "Создание";
КонецЕсли;
Результат.Успешно = Истина;
Возврат Результат;
КонецФункции
#КонецОбласти
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ФУНКЦИОНАЛ
///////////////////////////////////////////////////////////////////
#Область СлужебныеМетоды
Функция ПараметрыСозданияОбновления(Адрес, ОписаниеСодержимого, Версия = Неопределено)
@@ -710,44 +787,32 @@
КонецФункции
Функция СоздатьИлиОбновить(ПараметрыПодключения, АдресСтраницы, Содержимое, ОбновитьПриИзмененииСодержимого) Экспорт
Функция ПреобразоватьMarkdownToConfluence(ПараметрыПодключения, СодержимоеMarkdown)
Идентификатор = "";
Результат = Новый Структура("Успешно, Действие");
Если ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
АдресСтраницы.Идентификатор = НайтиСтраницуПоИмени(ПараметрыПодключения, АдресСтраницы.КодПространства, АдресСтраницы.ИмяСтраницы);
КонецЕсли;
URLОперации = "rest/tinymce/1/markdownxhtmlconverter";
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("wiki", СодержимоеMarkdown);
Если Не ПустаяСтрока(АдресСтраницы.Идентификатор) Тогда
Тело = СериализоватьJSON(ПараметрыОперации);
РезультатЗапроса = ВыполнитьHTTPЗапрос(ПараметрыПодключения, "POST", URLОперации, Тело, "text/html; charset=UTF-8");
Если УспешныйЗапрос(РезультатЗапроса) Тогда
Возврат РезультатЗапроса.Ответ;
РезультатОбновления = Обновить(
ПараметрыПодключения,
АдресСтраницы,
Содержимое,
ОбновитьПриИзмененииСодержимого);
Если РезультатОбновления <> Неопределено Тогда
Результат.Действие = "Обновление";
КонецЕсли;
Иначе
АдресСтраницы.Идентификатор = Создать(ПараметрыПодключения, АдресСтраницы, Содержимое);
Результат.Действие = "Создание";
ВызватьИсключение "Ошибка преобразования markdown → html" + ТекстОшибки(РезультатЗапроса, URLОперации, "POST");
КонецЕсли;
Результат.Успешно = Истина;
Возврат Результат;
Возврат Идентификатор;
КонецФункции
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ФУНКЦИОНАЛ
///////////////////////////////////////////////////////////////////
Функция ПолучитьURLОперации(КодПространства = "", ИмяСтраницы = "", Идентификатор = "", Операция = "")
URLОперации = "rest/api/content/";
@@ -828,7 +893,7 @@
КонецФункции
Функция СтрокаJSON(Значение)
Функция СериализоватьJSON(Значение)
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(Ложь, , Истина, , , , , , Истина);
Запись = Новый ЗаписьJSON();
@@ -840,7 +905,7 @@
КонецФункции
Функция ЗначениеИзJSON(СтрокаJSON)
Функция ДесериализоватьJSON(СтрокаJSON)
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
@@ -870,6 +935,8 @@
КонецФункции
#КонецОбласти
ФорматыСодержимого = Новый Структура();
ФорматыСодержимого.Вставить("Markdown", "markdown");
ФорматыСодержимого.Вставить("Confluence", "confluence");