mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-14 11:23:46 +02:00
803 lines
39 KiB
Plaintext
803 lines
39 KiB
Plaintext
// MIT License
|
|
|
|
// Copyright (c) 2023 Anton Tsitavets
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
|
|
// The above copyright notice and this permission notice shall be included in all
|
|
// copies or substantial portions of the Software.
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// SOFTWARE.
|
|
|
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
|
|
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
|
// BSLLS:IncorrectLineBreak-off
|
|
|
|
// Раскомментировать, если выполняется OneScript
|
|
#Использовать "../../tools"
|
|
|
|
#Область ПрограммныйИнтерфейс
|
|
|
|
#Область РаботаСоСтраницами
|
|
|
|
// Создать дочернюю страницу над другой страницей-родителем
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Родитель - Строка - ID Родителя
|
|
// Заголовок - Строка - Заголовок страницы
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - Ответ сервера Notion
|
|
Функция СоздатьСтраницу(Знач Токен, Знач Родитель, Знач Заголовок) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Свойства = Новый Структура;
|
|
Параметры = Новый Структура;
|
|
|
|
ДобавитьЗаголовокСтраницы(Заголовок, Свойства);
|
|
ДобавитьРодителяСтраницы(Родитель, Ложь, Параметры);
|
|
|
|
Параметры.Вставить("properties", Свойства);
|
|
|
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Создать страницу в базу.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Родитель - Строка - ID родительской базы
|
|
// Данные - Соответствие Из КлючИЗначение - Соответствие свойств. Должен соответствовать шаблону свойств базы
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - Создать страницу в базу
|
|
Функция СоздатьСтраницуВБазу(Знач Токен, Знач Родитель, Знач Данные) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Параметры = Новый Структура;
|
|
|
|
ДобавитьРодителяСтраницы(Родитель, Истина, Параметры);
|
|
|
|
Свойства = ЗаполнитьДанныеПоСхеме(Родитель, Данные, Токен);
|
|
Параметры.Вставить("properties", Свойства);
|
|
|
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/pages", Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить страницу.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Страница - Строка - ID Родителя
|
|
//
|
|
// Возвращаемое значение:
|
|
// ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Notion
|
|
Функция ПолучитьСтраницу(Знач Токен, Знач Страница) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
ПреобразоватьИД(Страница);
|
|
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/pages/" + Страница, , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Изменить свойства страницы.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Страница - Строка - ID изменяемой страницы
|
|
// Данные - Соответствие Из КлючИЗначение - Соответствие изменяемых параметров
|
|
// Иконка - Строка - URL картинки - иконки страницы
|
|
// Обложка - Строка - URL картинки - обложки страницы
|
|
// Архивирована - Булево - Истина - Архивировать страницу
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, Неопределено, HTTPОтвет, ДвоичныеДанные - Изменить свойства страницы
|
|
// @skip-check method-too-many-params
|
|
// BSLLS:NumberOfOptionalParams-off
|
|
Функция ИзменитьСвойстваСтраницы(Знач Токен
|
|
, Знач Страница
|
|
, Знач Данные = ""
|
|
, Знач Иконка = ""
|
|
, Знач Обложка = ""
|
|
, Знач Архивирована = Ложь) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Параметры = Новый Структура;
|
|
Files = "files";
|
|
|
|
Если ЗначениеЗаполнено(Данные) И ТипЗнч(Данные) = Тип("Соответствие") Тогда
|
|
Свойства = ЗаполнитьДанныеПоСхеме(Страница, Данные, Токен, Ложь);
|
|
Иначе
|
|
Свойства = Новый Соответствие;
|
|
КонецЕсли;
|
|
|
|
Если ЗначениеЗаполнено(Иконка) Тогда
|
|
СоответствиеИконки = Новый Соответствие;
|
|
СоответствиеИконки.Вставить("Icon", Иконка);
|
|
|
|
ОбъектИконка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеИконки);
|
|
ОбъектИконка = ОбъектИконка[Files][0];
|
|
ОбъектИконка.Удалить("name");
|
|
|
|
Параметры.Вставить("icon", ОбъектИконка);
|
|
КонецЕсли;
|
|
|
|
Если ЗначениеЗаполнено(Обложка) Тогда
|
|
СоответствиеОбложки = Новый Соответствие;
|
|
СоответствиеОбложки.Вставить("Cover", Обложка);
|
|
|
|
ОбъектОбложка = ПреобразоватьЗначениеПоТипу(Files, СоответствиеОбложки);
|
|
ОбъектОбложка = ОбъектОбложка[Files][0];
|
|
ОбъектОбложка.Удалить("name");
|
|
|
|
Параметры.Вставить("cover", ОбъектОбложка);
|
|
КонецЕсли;
|
|
|
|
Параметры.Вставить("properties", Свойства);
|
|
Параметры.Вставить("archived" , Архивирована);
|
|
|
|
ПреобразоватьИД(Страница);
|
|
|
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/pages/" + Страница, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
// BSLLS:NumberOfOptionalParams-on
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСБазамиДанных
|
|
|
|
// Создать базу данных страниц
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Родитель - Строка - ID страницы родителя
|
|
// Заголовок - Строка - Заголовок базы данных
|
|
// Свойства - Структура Из Строка - Свойства базы данных
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - Ответ сервера Notion
|
|
Функция СоздатьБазуДанных(Знач Токен, Знач Родитель, Знач Заголовок, Знач Свойства = "") Экспорт
|
|
|
|
// Пример структуры/соответствия свойств
|
|
|
|
// Имя : title
|
|
// Описание : rich_text
|
|
// В работе : checkbox
|
|
// Количество : number
|
|
// Дата : date
|
|
// Статус : Соответствие
|
|
// Активный : green
|
|
// Неактивный : red
|
|
// Архив : yellow
|
|
|
|
// Все страницы, которые будут созданы как дочерние, должны иметь свойства базы-родителя
|
|
|
|
Если Не ТипЗнч(Свойства) = Тип("Структура") И Не ТипЗнч(Свойства) = Тип("Соответствие") Тогда
|
|
Свойства = Новый Структура("Наименование", "title");
|
|
КонецЕсли;
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Параметры = Новый Структура;
|
|
|
|
ДобавитьРодителяБазы(Родитель, Ложь, Параметры);
|
|
ДобавитьЗаголовокБазы(Заголовок, Параметры);
|
|
ДобавитьСвойстваБазы(Свойства, Параметры);
|
|
|
|
Ответ = OPI_Инструменты.Post("https://api.notion.com/v1/databases", Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить данные о базе данных
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// База - Строка - ID базы данных
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, ДвоичныеДанные, Неопределено - Ответ сервера Notion
|
|
Функция ПолучитьБазуДанных(Знач Токен, Знач База) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
ПреобразоватьИД(База);
|
|
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/databases/" + База, , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Изменить свойства базы.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// База - Строка - ID целевой базы
|
|
// Свойства - Соответствие из КлючИЗначение - Соответствие, как при создании новой базы. Если значение - пусто,
|
|
// то свойство будет удалено
|
|
// Заголовок - Строка - Заголовок базы
|
|
// Описание - Строка - Описание базы
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, Неопределено, HTTPОтвет, ДвоичныеДанные - Ответ сервера Notion
|
|
Функция ИзменитьСвойстваБазы(Знач Токен, Знач База, Знач Свойства = "", Знач Заголовок = "", Знач Описание = "") Экспорт
|
|
|
|
Параметры = Новый Структура;
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
ПреобразоватьИД(База);
|
|
|
|
Если ЗначениеЗаполнено(Заголовок) Тогда
|
|
ДобавитьЗаголовокБазы(Заголовок, Параметры);
|
|
КонецЕсли;
|
|
|
|
Если ЗначениеЗаполнено(Описание) Тогда
|
|
ДобавитьОписаниеБазы(Описание, Параметры);
|
|
КонецЕсли;
|
|
|
|
Если ТипЗнч(Свойства) = Тип("Структура") Или ТипЗнч(Свойства) = Тип("Соответствие") Тогда
|
|
ДобавитьСвойстваБазы(Свойства, Параметры);
|
|
КонецЕсли;
|
|
|
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/databases/" + База, Параметры, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РаботаСБлоками
|
|
|
|
// Создать блок.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// Родитель - Строка - ID родительского блока или страницы
|
|
// Блок - Строка,Соответствие Из КлючИЗначение - ID блока, копию которого необходимо добавить или сам блок
|
|
// ВставитьПосле - Строка - ID блока, после которого необходимо встаивть новый, если родитель уже имеет дочерние блоки
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка, Произвольный, Неопределено, ДвоичныеДанные, HTTPОтвет - Ответ сервера Notion
|
|
Функция СоздатьБлок(Знач Токен, Знач Родитель, Знач Блок, Знач ВставитьПосле = "") Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
ПреобразоватьИД(Родитель);
|
|
|
|
Если ТипЗнч(Блок) = Тип("Строка") Тогда
|
|
ПреобразоватьИД(Блок);
|
|
Блок = ВернутьБлок(Токен, Блок);
|
|
КонецЕсли;
|
|
|
|
МассивБлоков = Новый Массив;
|
|
МассивБлоков.Добавить(Блок);
|
|
|
|
Параметры = Новый Соответствие;
|
|
Параметры.Вставить("children", МассивБлоков);
|
|
|
|
Если ЗначениеЗаполнено(ВставитьПосле) Тогда
|
|
Параметры.Вставить("after", ВставитьПосле);
|
|
КонецЕсли;
|
|
|
|
Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/blocks/" + Родитель + "/children"
|
|
, Параметры
|
|
, Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Вернуть блок.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// ИДБлока - Строка - ID блока
|
|
// ТолькоОснова - Булево - Истина - служебные поля удаляются, остается только сам блок
|
|
//
|
|
// Возвращаемое значение:
|
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
|
Функция ВернутьБлок(Знач Токен, Знач ИДБлока, Знач ТолькоОснова = Истина) Экспорт
|
|
|
|
ПреобразоватьИД(ИДБлока);
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
|
|
|
Если ТолькоОснова Тогда
|
|
УдалитьЛишниеПоляБлока(Ответ);
|
|
КонецЕсли;
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Вернуть дочерние блоки.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// ИДБлока - Строка - ID блока-родителя
|
|
//
|
|
// Возвращаемое значение:
|
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
|
Функция ВернутьДочерниеБлоки(Знач Токен, Знач ИДБлока) Экспорт
|
|
|
|
ПреобразоватьИД(ИДБлока);
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/blocks/" + ИДБлока + "/children", , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Удалить блок.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// ИДБлока - Строка - ID блока
|
|
//
|
|
// Возвращаемое значение:
|
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
|
Функция УдалитьБлок(Знач Токен, Знач ИДБлока) Экспорт
|
|
|
|
ПреобразоватьИД(ИДБлока);
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Ответ = OPI_Инструменты.Delete("https://api.notion.com/v1/blocks/" + ИДБлока, , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область Пользователи
|
|
|
|
// Список пользователей.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
//
|
|
// Возвращаемое значение:
|
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Ответ сервера Notion
|
|
Функция СписокПользователей(Знач Токен) Экспорт
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users", , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
// Получить данные пользователя.
|
|
//
|
|
// Параметры:
|
|
// Токен - Строка - Токен
|
|
// ИДПользователя - Строка - ID целевого пользователя
|
|
//
|
|
// Возвращаемое значение:
|
|
// Неопределено, ДвоичныеДанные, Строка, Произвольный - Получить данные пользователя
|
|
Функция ПолучитьДанныеПользователя(Знач Токен, Знач ИДПользователя) Экспорт
|
|
|
|
ПреобразоватьИД(ИДПользователя);
|
|
|
|
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
|
|
Ответ = OPI_Инструменты.Get("https://api.notion.com/v1/users/" + ИДПользователя, , Заголовки);
|
|
|
|
Возврат Ответ;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#КонецОбласти
|
|
|
|
#Область СлужебныеПроцедурыИФункции
|
|
|
|
Функция СоздатьЗаголовкиЗапроса(Знач Токен)
|
|
|
|
Заголовки = Новый Соответствие;
|
|
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
|
|
Заголовки.Вставить("Notion-Version", "2022-06-28");
|
|
|
|
Возврат Заголовки;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ПреобразоватьИД(Идентификатор)
|
|
|
|
Идентификатор = СтрЗаменить(Идентификатор, "-", "");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьРодителяСтраницы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
|
|
|
|
ПреобразоватьИД(Родитель);
|
|
|
|
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
|
|
СтруктураРодителя = Новый Структура(ПолеИдентификатора, Родитель);
|
|
|
|
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьРодителяБазы(Знач Родитель, Знач РодительБаза, ОсновнаяСтруктура)
|
|
|
|
ПреобразоватьИД(Родитель);
|
|
|
|
ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id");
|
|
СтруктураРодителя = Новый Структура();
|
|
СтруктураРодителя.Вставить("type" , ПолеИдентификатора);
|
|
СтруктураРодителя.Вставить(ПолеИдентификатора, Родитель);
|
|
|
|
ОсновнаяСтруктура.Вставить("parent", СтруктураРодителя);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьЗаголовокСтраницы(Знач Заголовок, ОсновнаяСтруктура)
|
|
|
|
ПодчиненнаяСтруктура = Новый Структура;
|
|
СтруктураДанных = Новый Структура;
|
|
СтруктураТекста = Новый Структура;
|
|
МассивДанных = Новый Массив;
|
|
Title = "title";
|
|
|
|
СтруктураТекста.Вставить("content", Заголовок);
|
|
СтруктураТекста.Вставить("link" , Неопределено);
|
|
|
|
СтруктураДанных.Вставить("text", СтруктураТекста);
|
|
СтруктураДанных.Вставить("type", "text");
|
|
|
|
МассивДанных.Добавить(СтруктураДанных);
|
|
|
|
ПодчиненнаяСтруктура.Вставить("id" , Title);
|
|
ПодчиненнаяСтруктура.Вставить("type" , Title);
|
|
ПодчиненнаяСтруктура.Вставить(Title , МассивДанных);
|
|
|
|
ОсновнаяСтруктура.Вставить(Title, ПодчиненнаяСтруктура);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьЗаголовокБазы(Знач Заголовок, ОсновнаяСтруктура)
|
|
|
|
Заголовок = ПреобразоватьЗаголовок(Заголовок);
|
|
ОсновнаяСтруктура.Вставить("title", Заголовок["title"]);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьОписаниеБазы(Знач Описание, ОсновнаяСтруктура)
|
|
|
|
Заголовок = ПреобразоватьЗаголовок(Описание);
|
|
ОсновнаяСтруктура.Вставить("description", Заголовок["title"]);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьСвойстваБазы(Знач Свойства, ОсновнаяСтруктура)
|
|
|
|
Если Свойства.Количество() = 0 Тогда
|
|
ОсновнаяСтруктура.Вставить("properties", Новый Структура);
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
СоответствиеПараметров = Новый Соответствие;
|
|
|
|
Для Каждого Свойство Из Свойства Цикл
|
|
|
|
Если ТипЗнч(Свойство.Значение) = Тип("Строка") Тогда
|
|
|
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура(Свойство.Значение, Новый Структура));
|
|
|
|
ИначеЕсли ТипЗнч(Свойство.Значение) = Тип("Структура")
|
|
Или ТипЗнч(Свойство.Значение) = Тип("Соответствие") Тогда
|
|
|
|
ВыборЗначения = СформироватьЗначенияВыбора(Свойство.Значение);
|
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Новый Структура("select", ВыборЗначения));
|
|
|
|
Иначе
|
|
|
|
СоответствиеПараметров.Вставить(Свойство.Ключ, Свойство.Значение);
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
ОсновнаяСтруктура.Вставить("properties", СоответствиеПараметров);
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция СформироватьЗначенияВыбора(Знач СтруктураВариантов)
|
|
|
|
МассивВариантов = Новый Массив;
|
|
|
|
Для Каждого Вариант Из СтруктураВариантов Цикл
|
|
|
|
СоответствиеВарианта = Новый Соответствие;
|
|
СоответствиеВарианта.Вставить("name" , Вариант.Ключ);
|
|
СоответствиеВарианта.Вставить("color", Вариант.Значение);
|
|
|
|
МассивВариантов.Добавить(СоответствиеВарианта);
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат Новый Структура("options", МассивВариантов);
|
|
|
|
КонецФункции
|
|
|
|
Функция ЗаполнитьДанныеПоСхеме(Знач Схема, Знач Данные, Знач Токен, Знач ЭтоБаза = Истина)
|
|
|
|
Если ЭтоБаза Тогда
|
|
ДанныеСхемы = ПолучитьБазуДанных(Токен, Схема);
|
|
Иначе
|
|
ДанныеСхемы = ПолучитьСтраницу(Токен, Схема);
|
|
КонецЕсли;
|
|
|
|
ПоляБазы = ДанныеСхемы["properties"];
|
|
Свойства = Новый Соответствие;
|
|
|
|
Если ЗначениеЗаполнено(ПоляБазы) Тогда
|
|
|
|
Для Каждого Поле Из ПоляБазы Цикл
|
|
|
|
ДанныеПоля = Поле.Значение;
|
|
ТипПоля = ДанныеПоля["type"];
|
|
|
|
ЗаполняемыеДанные = Данные.Получить(Поле.Ключ);
|
|
|
|
Если ЗаполняемыеДанные = Неопределено Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
ПреобразованныеДанные = ПреобразоватьЗначениеПоТипу(ТипПоля, ЗаполняемыеДанные);
|
|
|
|
Если ПреобразованныеДанные = Неопределено Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Свойства.Вставить(ДанныеПоля["id"], ПреобразованныеДанные);
|
|
|
|
КонецЦикла;
|
|
|
|
КонецЕсли;
|
|
|
|
Возврат Свойства;
|
|
|
|
КонецФункции
|
|
|
|
Процедура УдалитьЛишниеПоляБлока(Знач Блок)
|
|
|
|
МассивЛишних = Новый Массив;
|
|
МассивЛишних.Добавить("request_id");
|
|
МассивЛишних.Добавить("archived");
|
|
МассивЛишних.Добавить("created_by");
|
|
МассивЛишних.Добавить("last_edited_time");
|
|
МассивЛишних.Добавить("created_time");
|
|
МассивЛишних.Добавить("has_children");
|
|
МассивЛишних.Добавить("parrent");
|
|
МассивЛишних.Добавить("last_edited_by");
|
|
МассивЛишних.Добавить("id");
|
|
|
|
Для Каждого Поле Из МассивЛишних Цикл
|
|
|
|
Если Не Блок.Получить(Поле) = Неопределено Тогда
|
|
Блок.Удалить(Поле);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
#Область ПреобразованиеТипов
|
|
|
|
Функция ПреобразоватьЗначениеПоТипу(Знач Тип, Знач Значение)
|
|
|
|
Если Тип = "title" Тогда
|
|
Возврат ПреобразоватьЗаголовок(Значение);
|
|
ИначеЕсли Тип = "rich_text" Тогда
|
|
Возврат ПреобразоватьТекст(Значение);
|
|
ИначеЕсли Тип = "number" Тогда
|
|
Возврат ПреобразоватьЧисло(Значение);
|
|
ИначеЕсли Тип = "select" Тогда
|
|
Возврат ПреобразоватьВариантВыбора(Значение);
|
|
ИначеЕсли Тип = "multi_select" Тогда
|
|
Возврат ПреобразоватьМножественныйВыбор(Значение);
|
|
ИначеЕсли Тип = "status" Тогда
|
|
Возврат ПреобразоватьСтатус(Значение);
|
|
ИначеЕсли Тип = "date" Тогда
|
|
Возврат ПреобразоватьДату(Значение);
|
|
ИначеЕсли Тип = "relation" Тогда
|
|
Возврат ПреобразоватьСвязь(Значение);
|
|
ИначеЕсли Тип = "people" Тогда
|
|
Возврат ПреобразоватьПользователей(Значение);
|
|
ИначеЕсли Тип = "files" Тогда
|
|
Возврат ПреобразоватьФайлы(Значение);
|
|
ИначеЕсли Тип = "checkbox" Тогда
|
|
Возврат ПреобразоватьБулево(Значение);
|
|
ИначеЕсли Тип = "url" Тогда
|
|
Возврат ПреобразоватьСсылку(Значение);
|
|
ИначеЕсли Тип = "email" Тогда
|
|
Возврат ПреобразоватьПочту(Значение);
|
|
ИначеЕсли Тип = "phone_number" Тогда
|
|
Возврат ПреобразоватьТелефон(Значение);
|
|
Иначе
|
|
Возврат Неопределено;
|
|
КонецЕсли;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьЗаголовок(Знач Заголовок)
|
|
|
|
СтруктураДанных = Новый Структура;
|
|
СтруктураТекста = Новый Структура;
|
|
МассивДанных = Новый Массив;
|
|
|
|
СтруктураТекста.Вставить("content", Заголовок);
|
|
СтруктураТекста.Вставить("link" , Неопределено);
|
|
|
|
СтруктураДанных.Вставить("type", "text");
|
|
СтруктураДанных.Вставить("text", СтруктураТекста);
|
|
|
|
МассивДанных.Добавить(СтруктураДанных);
|
|
|
|
Возврат Новый Структура("title", МассивДанных);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьТекст(Знач Текст)
|
|
|
|
МассивТекста = Новый Массив;
|
|
СтруктураТекста = Новый Структура;
|
|
|
|
СтруктураТекста.Вставить("type", "text");
|
|
СтруктураТекста.Вставить("text", Новый Структура("content", Текст));
|
|
|
|
МассивТекста.Добавить(СтруктураТекста);
|
|
|
|
Возврат Новый Структура("rich_text", МассивТекста);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьЧисло(Знач Число)
|
|
Возврат Новый Структура("number", Число);
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьВариантВыбора(Знач Вариант)
|
|
|
|
СтруктураВыбора = Новый Структура;
|
|
СтруктураВыбора.Вставить("select", Новый Структура("name", Вариант));
|
|
|
|
Возврат СтруктураВыбора;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьСтатус(Знач Статус)
|
|
|
|
СтруктураСтатуса = Новый Структура;
|
|
СтруктураСтатуса.Вставить("status", Новый Структура("name", Статус));
|
|
|
|
Возврат СтруктураСтатуса;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьМножественныйВыбор(Знач МассивВариантов)
|
|
|
|
МассивВариантовВыбора = Новый Массив;
|
|
|
|
Для Каждого Вариант Из МассивВариантов Цикл
|
|
МассивВариантовВыбора.Добавить(Новый Структура("name", Вариант));
|
|
КонецЦикла;
|
|
|
|
Возврат Новый Структура("multi_select", МассивВариантовВыбора);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьДату(Знач Дата)
|
|
|
|
СтруктураДаты = Новый Структура;
|
|
|
|
Если Дата = НачалоДня(Дата) Тогда
|
|
ФорматДаты = "ДФ=yyyy-MM-dd";
|
|
Иначе
|
|
ФорматДаты = "ДФ=yyyy-MM-ddThh:mm:ssZ";
|
|
КонецЕсли;
|
|
|
|
Дата = Формат(Дата, ФорматДаты);
|
|
СтруктураДаты.Вставить("start", Дата);
|
|
|
|
Возврат Новый Структура("date", СтруктураДаты);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьСвязь(Знач Идентификатор)
|
|
|
|
МассивСвязи = Новый Массив;
|
|
МассивСвязи.Добавить(Новый Структура("id", Идентификатор));
|
|
|
|
Возврат Новый Структура("relation", МассивСвязи);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьПользователей(Знач МассивИД)
|
|
|
|
Если Не ТипЗнч(МассивИД) = Тип("Массив") Тогда
|
|
МассивИД_ = Новый Массив;
|
|
МассивИД_.Добавить(МассивИД);
|
|
МассивИД = МассивИД_;
|
|
КонецЕсли;
|
|
|
|
МассивПользователей = Новый Массив;
|
|
|
|
Для Каждого Идентификатор Из МассивИД Цикл
|
|
|
|
СтруктураПользователя = Новый Структура;
|
|
СтруктураПользователя.Вставить("object", "user");
|
|
СтруктураПользователя.Вставить("id" , Идентификатор);
|
|
МассивПользователей.Добавить(СтруктураПользователя);
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат Новый Структура("people", МассивПользователей);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьФайлы(Знач СоответствиеФайлов)
|
|
|
|
МассивФайлов = Новый Массив;
|
|
|
|
Для Каждого Файл Из СоответствиеФайлов Цикл
|
|
|
|
СтруктураФайла = Новый Структура;
|
|
СтруктураФайла.Вставить("type" , "external");
|
|
СтруктураФайла.Вставить("name" , Файл.Ключ);
|
|
СтруктураФайла.Вставить("external", Новый Структура("url", Файл.Значение));
|
|
|
|
МассивФайлов.Добавить(СтруктураФайла);
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат Новый Структура("files", МассивФайлов);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьБулево(Знач Булево)
|
|
Возврат Новый Структура("checkbox", Булево);
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьСсылку(Знач URL)
|
|
Возврат Новый Структура("url", URL);
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьПочту(Знач Почта)
|
|
Возврат Новый Структура("email", Почта);
|
|
КонецФункции
|
|
|
|
Функция ПреобразоватьТелефон(Знач Телефон)
|
|
Возврат Новый Структура("phone_number", Телефон);
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#КонецОбласти
|