1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-25 02:42:28 +02:00
This commit is contained in:
Anton 2024-05-09 14:42:33 +03:00
commit 99c02e7856
7 changed files with 237 additions and 2 deletions

View File

@ -91,6 +91,10 @@ jobs:
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьПоле"
- name: Создать/Удалить записи
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьУдалитьЗаписи"
- name: Записать измененные данные
if: ${{ cancelled() }} == false

View File

@ -851,6 +851,10 @@ jobs:
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьПоле"
- name: Создать/Удалить записи
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьУдалитьЗаписи"
Encode:
runs-on: ubuntu-latest
needs: [Testing-Twitter]

View File

@ -292,6 +292,128 @@
#КонецОбласти
#Область РаботаСЗаписями
// Получить список записей
// Получает список записей выбранной таблицы
//
// Параметры:
// Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table
// Отступ - Строка - Иднтификатор следующей страницы данных из предыдущего запроса - offset
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьСписокЗаписей(Знач Токен, Знач База, Знач Таблица, Знач Отступ = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура();
OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить запись
// Получает данные строки таблицы по идентификатору
//
// Параметры:
// Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table
// Запись - Строка - Идентификатор записи в таблице - record
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция ПолучитьЗапись(Знач Токен, Знач База, Знач Таблица, Знач Запись) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Запись);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + "/" + Запись;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Создать записи
// Создает одну или массив записей по описанию или массиву описаний значений полей
//
// Параметры:
// Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table
// Данные - Структура, Массив из Структура - Набор или массив наборов пар Ключ : Значение > Поле : Показатель - data
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция СоздатьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Данные) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
Параметры = Новый Структура();
ДобавитьОписаниеДанных(Данные, Параметры);
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Удалить записи
// Удаляет одну или массив записей по идентификаторам
//
// Параметры:
// Токен - Строка - Токен - token
// База - Строка - Идентификатор базы данных - base
// Таблица - Строка - Идентификатор таблицы - table
// Записи - Строка, Массив из Строка - Идентификатор или массив индентификаторов записей - records
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Airtable
Функция УдалитьЗаписи(Знач Токен, Знач База, Знач Таблица, Знач Записи) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица);
OPI_ПреобразованиеТипов.ПолучитьМассив(Записи);
СтрокаЗаписей = "";
Для Каждого Запись Из Записи Цикл
СтрокаЗаписей = СтрокаЗаписей
+ ?(ЗначениеЗаполнено(СтрокаЗаписей), "&", "?")
+ "records[]="
+ OPI_Инструменты.ЧислоВСтроку(Запись);
КонецЦикла;
URL = "https://api.airtable.com/v0/" + База + "/" + Таблица + СтрокаЗаписей;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@ -331,4 +453,24 @@
КонецФункции
Процедура ДобавитьОписаниеДанных(Знач Данные, Параметры)
Если ТипЗнч(Данные) = Тип("Массив") Тогда
МассивОтправки = Новый Массив;
Для Каждого ОписаниеЗаписи Из Данные Цикл
МассивОтправки.Добавить(Новый Структура("fields", ОписаниеЗаписи));
КонецЦикла;
OPI_Инструменты.ДобавитьПоле("records", МассивОтправки, "Массив", Параметры);
Иначе
OPI_Инструменты.ДобавитьПоле("fields", Данные, "Коллекция", Параметры);
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -3574,6 +3574,73 @@
КонецПроцедуры
Процедура АТ_СоздатьУдалитьЗаписи() Экспорт
Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
База = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base");
Таблица = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Table");
Числовой = 10;
Строчный = "Привет";
ОписаниеСтроки1 = Новый Структура("Номер,Строковое", Числовой, Строчный);
ОписаниеСтроки2 = Новый Структура("Номер,Строковое", Числовой, Строчный);
МассивУдаляемых = Новый Массив;
МассивОписаний = Новый Массив;
МассивОписаний.Добавить(ОписаниеСтроки1);
МассивОписаний.Добавить(ОписаниеСтроки2);
Результат = OPI_Airtable.СоздатьЗаписи(Токен, База, Таблица, МассивОписаний);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьЗаписи");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"].Количество()).Равно(2);
Для Каждого Запись Из Результат["records"] Цикл
МассивУдаляемых.Добавить(Запись["id"]);
КонецЦикла;
Результат = OPI_Airtable.СоздатьЗаписи(Токен, База, Таблица, ОписаниеСтроки1);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьЗаписи (одна)");
ОдиночнаяЗапись = Результат["id"];
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ОдиночнаяЗапись).Заполнено(ОдиночнаяЗапись);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["createdTime"]).Заполнено();
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["fields"]["Номер"]).Равно(Числовой);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(СокрЛП(Результат["fields"]["Строковое"])).Равно(Строчный);
Результат = OPI_Airtable.ПолучитьЗапись(Токен, База, Таблица, ОдиночнаяЗапись);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗапись");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Равно(ОдиночнаяЗапись);
Результат = OPI_Airtable.ПолучитьСписокЗаписей(Токен, База, Таблица);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗаписей");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"].Количество()).Равно(3);
Результат = OPI_Airtable.УдалитьЗаписи(Токен, База, Таблица, МассивУдаляемых);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЗаписи");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"].Количество()).Равно(2);
Результат = OPI_Airtable.УдалитьЗаписи(Токен, База, Таблица, ОдиночнаяЗапись);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЗаписи (одна)");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["records"].Количество()).Равно(1);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -200,6 +200,7 @@
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
Возврат ТаблицаТестов;

View File

@ -184,11 +184,13 @@
СтрокаПараметров = "?";
Для Каждого Параметр Из Параметры Цикл
ЗначениеПараметра = ПреобразоватьПараметрВСтроку(Параметр.Значение);
СтрокаПараметров = СтрокаПараметров
+ Параметр.Ключ
+ "="
+ КодироватьСтроку(Параметр.Значение,
СпособКодированияСтроки.КодировкаURL)
+ ЗначениеПараметра
+ "&";
КонецЦикла;
@ -704,6 +706,21 @@
КонецФункции
Функция ПреобразоватьПараметрВСтроку(Знач Значение)
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Значение = СтрСоединить(Значение, ",");
Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
Значение = "[" + Значение + "]";
Иначе
Значение = ЧислоВСтроку(Значение);
Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
КонецЕсли;
Возврат Значение;
КонецФункции
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
Коллекция = ТипЗнч(Параметры) = Тип("Структура")

Binary file not shown.