From eea51d2139164fb42368c8ac4000977c22fc3cae Mon Sep 17 00:00:00 2001 From: Anton Date: Sun, 21 Jan 2024 14:46:24 +0300 Subject: [PATCH] =?UTF-8?q?Notion=20API:=20=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B7=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OPI/src/CommonModules/OPI_Notion/Module.bsl | 158 +++++++++++++++++--- 1 file changed, 140 insertions(+), 18 deletions(-) diff --git a/OPI/src/CommonModules/OPI_Notion/Module.bsl b/OPI/src/CommonModules/OPI_Notion/Module.bsl index b700459c0..a6a4bdd2d 100644 --- a/OPI/src/CommonModules/OPI_Notion/Module.bsl +++ b/OPI/src/CommonModules/OPI_Notion/Module.bsl @@ -2,26 +2,24 @@ #Область РаботаСоСтраницами -// Создать дочернюю страницу +// Создать дочернюю страницу над другой страницей-родителем // // Параметры: // Токен - Строка - Токен -// Заголовок - Строка - Заголовок страницы // Родитель - Строка - ID Родителя -// РодительБаза - Булево - Истина, если родитель - база, Ложь - если страница +// Заголовок - Строка - Заголовок страницы // // Возвращаемое значение: // Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - Ответ сервера Notion -Функция СоздатьСтраницу(Знач Токен, Знач Заголовок, Знач Родитель, Знач РодительБаза = Ложь) Экспорт +Функция СоздатьСтраницу(Знач Токен, Знач Родитель, Знач Заголовок) Экспорт - Заголовки = СоздатьЗаголовкиЗапроса(Токен); - Родитель = ИдентификацияРодителя(Родитель, РодительБаза); + Заголовки = СоздатьЗаголовкиЗапроса(Токен); Свойства = Новый Структура; + Параметры = Новый Структура; ДобавитьЗаголовокСтраницы(Заголовок, Свойства); + ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры); - Параметры = Новый Структура; - Параметры.Вставить("parent" , Родитель); Параметры.Вставить("properties", Свойства); Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки); @@ -40,11 +38,10 @@ // ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Notion Функция ПолучитьСтраницу(Знач Токен, Знач Родитель) Экспорт - PID = "page_id"; Заголовки = СоздатьЗаголовкиЗапроса(Токен); - Родитель = ИдентификацияРодителя(Родитель, Ложь); + ПреобразоватьИД(Родитель); - Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Родитель[PID], , Заголовки); + Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Родитель, , Заголовки); Возврат Ответ; @@ -52,6 +49,53 @@ #КонецОбласти +#Область РаботаСБазамиДанных + +// Создать базу данных страниц +// +// Параметры: +// Токен - Строка - Токен +// Родитель - Строка - 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"); - СтруктураРодителя = Новый Структура(ПолеИдентификатора, Родитель); - - Возврат СтруктураРодителя; + ПолеИдентификатора = ?(РодительБаза, "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", МассивВариантов); + +КонецФункции + #КонецОбласти \ No newline at end of file