1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-21 01:50:24 +02:00

Notion API: Создание базы

This commit is contained in:
Anton 2024-01-21 14:46:24 +03:00
parent 65f864f56d
commit eea51d2139

View File

@ -2,26 +2,24 @@
#Область РаботаСоСтраницами
// Создать дочернюю страницу
// Создать дочернюю страницу над другой страницей-родителем
//
// Параметры:
// Токен - Строка - Токен
// Заголовок - Строка - Заголовок страницы
// Родитель - Строка - ID Родителя
// РодительБаза - Булево - Истина, если родитель - база, Ложь - если страница
// Заголовок - Строка - Заголовок страницы
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - Ответ сервера Notion
Функция СоздатьСтраницу(Знач Токен, Знач Заголовок, Знач Родитель, Знач РодительБаза = Ложь) Экспорт
Функция СоздатьСтраницу(Знач Токен, Знач Родитель, Знач Заголовок) Экспорт
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Родитель = ИдентификацияРодителя(Родитель, РодительБаза);
Свойства = Новый Структура;
Параметры = Новый Структура;
ДобавитьЗаголовокСтраницы(Заголовок, Свойства);
ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры);
Параметры = Новый Структура;
Параметры.Вставить("parent" , Родитель);
Параметры.Вставить("properties", Свойства);
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
@ -40,11 +38,57 @@
// ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Notion
Функция ПолучитьСтраницу(Знач Токен, Знач Родитель) Экспорт
PID = "page_id";
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Родитель = ИдентификацияРодителя(Родитель, Ложь);
ПреобразоватьИД(Родитель);
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Родитель[PID], , Заголовки);
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Родитель, , Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСБазамиДанных
// Создать базу данных страниц
//
// Параметры:
// Токен - Строка - Токен
// Родитель - Строка - ID страницы родителя
// Заголовок - Строка - Заголовок базы данных
// Свойства - Структура Из Строка - Свойства базы данных
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - Ответ сервера Notion
Функция СоздатьБазуДанных(Знач Токен, Знач Родитель, Знач Заголовок, Знач Свойства = "") Экспорт
// Пример структуры/соответствия свойств
// Имя : title
// Описание : rich_text
// В работе : checkbox
// Количество : number
// Дата : date
// Статус : Соответствие
// Активный : green
// Неактивный : red
// Архив : yellow
//Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя
Если Не ТипЗнч(Свойства) = Тип("Структура") И Не ТипЗнч(Свойства) = Тип("Соответствие") Тогда
Свойства = Новый Структура("Наименование", "title");
КонецЕсли;
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
ДобавитьРодителяБазы(Родитель, Ложь, Параметры);
ДобавитьЗаголовокБазы(Заголовок, Параметры);
ДобавитьСвойстваБазы(Свойства, Параметры);
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/databases", Параметры, Заголовки);
Возврат Ответ;
@ -83,16 +127,29 @@
КонецПроцедуры
Функция ИдентификацияРодителя(Знач Родитель, Знач РодительБаза)
Процедура ДобавитьРодителяСтраницы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
ПреобразоватьИД(Родитель);
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
СтруктураРодителя = Новый Структура(ПолеИдентификатора, Родитель);
Возврат СтруктураРодителя;
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
КонецФункции
КонецПроцедуры
Процедура ДобавитьРодителяБазы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
ПреобразоватьИД(Родитель);
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
СтруктураРодителя = Новый Структура();
СтруктураРодителя.Вставить("type" , ПолеИдентификатора);
СтруктураРодителя.Вставить(ПолеИдентификатора, Родитель);
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
КонецПроцедуры
Процедура ДобавитьЗаголовокСтраницы(Знач Заголовок, ОсновнаяСтруктура)
@ -117,4 +174,69 @@
КонецПроцедуры
Процедура ДобавитьЗаголовокБазы(Знач Заголовок, ОсновнаяСтруктура)
СтруктураДанных = Новый Структура;
СтруктураТекста = Новый Структура;
МассивДанных = Новый Массив;
СтруктураТекста.Вставить("content", Заголовок);
СтруктураТекста.Вставить("link" , Неопределено);
СтруктураДанных.Вставить("type", "text");
СтруктураДанных.Вставить("text", СтруктураТекста);
МассивДанных.Добавить(СтруктураДанных);
ОсновнаяСтруктура.Вставить("title", МассивДанных);
КонецПроцедуры
Процедура ДобавитьСвойстваБазы(Знач Свойства, ОсновнаяСтруктура)
Если Свойства.Количество() = 0 Тогда
ОсновнаяСтруктура.Вставить("properties", Новый Структура);
Возврат;
КонецЕсли;
СоответствиеПараметров = Новый Соответствие;
Для Каждого Свойство Из Свойства Цикл
Если ТипЗнч(Свойство.Значение) = Тип("Строка") Тогда
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура(Свойство.Значение, Новый Структура));
ИначеЕсли ТипЗнч(Свойство.Значение) = Тип("Структура")
Или ТипЗнч(Свойство.Значение) = Тип("Соответствие") Тогда
ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения))
КонецЕсли;
КонецЦикла;
ОсновнаяСтруктура.Вставить("properties", СоответствиеПараметров);
КонецПроцедуры
Функция СформироватьЗначенияВыбора(Знач СтруктураВариантов)
МассивВариантов = Новый Массив;
Для Каждого Вариант Из СтруктураВариантов Цикл
СоответствиеВарианта = Новый Соответствие;
СоответствиеВарианта.Вставить("name", Вариант.Ключ);
СоответствиеВарианта.Вставить("color", Вариант.Значение);
МассивВариантов.Добавить(СоответствиеВарианта);
КонецЦикла;
Возврат Новый Структура("options", МассивВариантов);
КонецФункции
#КонецОбласти