1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

PXY: Добавление аргументов

This commit is contained in:
Anton Titovets
2025-01-30 21:20:42 +03:00
parent 34077d5a5f
commit 7f66811627
4 changed files with 6910 additions and 6553 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -60,6 +60,44 @@
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
Возврат Результат;
Иначе
Проект = Результат["path"];
КонецЕсли;
ТипСервер = Тип("ВебСервер");
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
Возврат СформироватьОтвет(Истина, "Stopped");
КонецФункции
#КонецОбласти
#Область НастройкаОбработчиков
// Добавить обработчик запросов
// Добавляет новый обработчик в проект
//
@@ -88,7 +126,7 @@
СекретныйКлюч = ПолучитьУникальныйКлючОбработчика(Проект);
Если ТипЗнч(СекретныйКлюч) = Тип("Соответствие") Тогда
СекретныйКлюч.Вставить("message", "Не удалось сформировать UID обработчика. Попробуйте еще раз");
СекретныйКлюч.Вставить("message", "Failed to generate a handler UID. Try again");
Возврат СекретныйКлюч;
КонецЕсли;
@@ -173,6 +211,10 @@
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Проект);
Если Результат["result"] Тогда
Для Каждого Элемент Из Результат["data"] Цикл
Элемент.Вставить("args", ПолучитьАргументыОбработчика(Проект, КлючОбработчика));
КонецЦикла;
КоличествоЗаписей = Результат["data"].Количество();
@@ -183,7 +225,7 @@
Иначе
Если КоличествоЗаписей = 0 Тогда
Результат = СформироватьОтвет(Ложь, "Обработчик не найден!");
Результат = СформироватьОтвет(Ложь, "Handler not found");
КонецЕсли;
КонецЕсли;
@@ -224,24 +266,47 @@
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Результаты = Новый Соответствие;
Успех = Истина;
Для Каждого Таблица Из ИменаКонстантТаблиц() Цикл
ИмяТаблицы = КонстантноеЗначение(Таблица);
Результат = OPI_SQLite.УдалитьЗаписи(ИмяТаблицы, СтруктураФильтра, Проект);
ТекущийУспех = Результат["result"];
Результаты.Вставить(ИмяТаблицы, ТекущийУспех);
Успех = ?(Не ТекущийУспех, ТекущийУспех, Успех);
КонецЦикла;
Возврат Результат;
Возврат Новый Структура("result,tables", Успех, Результаты);
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
#КонецОбласти
#Область УстановкаАргументов
// Установить аргумент обработчика
// Устанавливает аргумент для функции установщика, позволяя не указывать его при вызове
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
// Аргумент - Строка - CLI аргумент (опция) для функции обработчика - arg
// Значение - Строка - Строковое значение аргумента - value
// Строгий - Булево - Истина > аргумент не может быть перезаписан параметром запроса - strict
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
// Структура Из КлючИЗначение - Результат установки
Функция УстановитьАргументОбработчика(Знач Проект
, Знач КлючОбработчика
, Знач Аргумент
, Знач Значение
, Знач Строгий = Истина) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
@@ -249,19 +314,88 @@
Иначе
Проект = Результат["path"];
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Аргумент);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
OPI_ПреобразованиеТипов.ПолучитьБулево(Строгий);
МассивФильтров = Новый Массив;
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
МассивФильтров.Добавить(СтруктураФильтра);
СтруктураФильтра.Вставить("field", "arg");
СтруктураФильтра.Вставить("value", Аргумент);
МассивФильтров.Добавить(СтруктураФильтра);
ТипСервер = Тип("ВебСервер");
Таблица = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , МассивФильтров, , , Проект);
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
Если Результат["result"] Тогда
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
КоличествоЗаписей = Результат["data"].Количество();
СтруктураЗаписи = Новый Структура("value,strict", Значение, Строгий);
Если КоличествоЗаписей <> 0 Тогда
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураЗаписи, МассивФильтров, Проект);
Иначе
СтруктураЗаписи.Вставить("key", КлючОбработчика);
СтруктураЗаписи.Вставить("arg", Аргумент);
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, Проект);
КонецЕсли;
Если Результат["result"] Тогда
Результат = ПолучитьОбработчикЗапросов(Проект, КлючОбработчика);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
Возврат СформироватьОтвет(Истина, "Остановлен");
// Получить аргументы обработчика
// Получает список установленных аргументов обработчика
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Список обработчиков
Функция ПолучитьАргументыОбработчика(Знач Проект, Знач КлючОбработчика) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
Возврат Результат;
Иначе
Проект = Результат["path"];
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Таблица = КонстантноеЗначение("ТаблицаАргументов");
МассивПолей = СтрРазделить("arg,value,strict", ",");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, МассивПолей, СтруктураФильтра, , , Проект);
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -278,16 +412,16 @@
OPI_Инструменты.ВернутьУправляющиеПоследовательности(Путь);
ФайлПроекта = Новый Файл(Путь);
Текст = "Файл проекта существует!";
Текст = "The project file exists";
Результат = Истина;
Если Не ФайлПроекта.Существует() Тогда
Текст = "Файл проекта по указанному пути не найден!";
Текст = "Project file not found at the specified path";
Результат = Ложь;
КонецЕсли;
Если ФайлПроекта.ЭтоКаталог() Тогда
Текст = "Передан путь к каталогу, а не файл проекта!";
Текст = "A directory path was passed, not a project file";
Результат = Ложь;
КонецЕсли;
@@ -326,7 +460,7 @@
Результат = СоздатьНовыйПроект(ПолныйПуть);
Если Результат["result"] Тогда
Текст = "Файл проекта успешно создан!";
Текст = "The project file was created successfully";
Ответ = СформироватьОтвет(Истина, Текст, ПолныйПуть);
Иначе
Ответ = Результат;
@@ -334,7 +468,7 @@
Иначе
Текст = "Файл проекта по заданному пути уже существует!";
Текст = "The project file at the specified path already exists";
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
КонецЕсли;
@@ -357,11 +491,23 @@
Функция КонстантноеЗначение(Знач Ключ)
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
ИначеЕсли Ключ = "ТаблицаАргументов" Тогда Возврат "arguments"
Иначе Возврат "" КонецЕсли;
КонецФункции
Функция ИменаКонстантТаблиц(Знач ТолькоОбработчики = Истина)
МассивИмен = Новый Массив;
МассивИмен.Добавить("ТаблицаОбработчиков");
МассивИмен.Добавить("ТаблицаАргументов");
Возврат МассивИмен;
КонецФункции
Функция СоздатьНовыйПроект(Путь)
ПустойФайл = ПолучитьДвоичныеДанныеИзСтроки("");
@@ -369,6 +515,13 @@
Результат = СоздатьТаблицуОбработчиков(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Результат = СоздатьТаблицуАргументов(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
@@ -394,6 +547,21 @@
КонецФункции
Функция СоздатьТаблицуАргументов(Путь)
СтруктураТаблицы = Новый Соответствие();
СтруктураТаблицы.Вставить("key" , "TEXT");
СтруктураТаблицы.Вставить("arg" , "TEXT");
СтруктураТаблицы.Вставить("value" , "TEXT");
СтруктураТаблицы.Вставить("strict" , "BOOLEAN");
ИмяТаблицыАргументов = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыАргументов, СтруктураТаблицы, Путь);
Возврат Результат;
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(9);

View File

@@ -2155,9 +2155,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@@ -60,6 +60,44 @@
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
Возврат Результат;
Иначе
Проект = Результат["path"];
КонецЕсли;
ТипСервер = Тип("ВебСервер");
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
Возврат СформироватьОтвет(Истина, "Stopped");
КонецФункции
#КонецОбласти
#Область НастройкаОбработчиков
// Добавить обработчик запросов
// Добавляет новый обработчик в проект
//
@@ -88,7 +126,7 @@
СекретныйКлюч = ПолучитьУникальныйКлючОбработчика(Проект);
Если ТипЗнч(СекретныйКлюч) = Тип("Соответствие") Тогда
СекретныйКлюч.Вставить("message", "Не удалось сформировать UID обработчика. Попробуйте еще раз");
СекретныйКлюч.Вставить("message", "Failed to generate a handler UID. Try again");
Возврат СекретныйКлюч;
КонецЕсли;
@@ -173,6 +211,10 @@
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Проект);
Если Результат["result"] Тогда
Для Каждого Элемент Из Результат["data"] Цикл
Элемент.Вставить("args", ПолучитьАргументыОбработчика(Проект, КлючОбработчика));
КонецЦикла;
КоличествоЗаписей = Результат["data"].Количество();
@@ -183,7 +225,7 @@
Иначе
Если КоличествоЗаписей = 0 Тогда
Результат = СформироватьОтвет(Ложь, "Обработчик не найден!");
Результат = СформироватьОтвет(Ложь, "Handler not found");
КонецЕсли;
КонецЕсли;
@@ -224,24 +266,47 @@
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Результаты = Новый Соответствие;
Успех = Истина;
Для Каждого Таблица Из ИменаКонстантТаблиц() Цикл
ИмяТаблицы = КонстантноеЗначение(Таблица);
Результат = OPI_SQLite.УдалитьЗаписи(ИмяТаблицы, СтруктураФильтра, Проект);
ТекущийУспех = Результат["result"];
Результаты.Вставить(ИмяТаблицы, ТекущийУспех);
Успех = ?(Не ТекущийУспех, ТекущийУспех, Успех);
КонецЦикла;
Возврат Результат;
Возврат Новый Структура("result,tables", Успех, Результаты);
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
#КонецОбласти
#Область УстановкаАргументов
// Установить аргумент обработчика
// Устанавливает аргумент для функции обработчика, позволяя не указывать его при вызове
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
// Аргумент - Строка - CLI аргумент (опция) для функции обработчика - arg
// Значение - Строка - Строковое значение аргумента - value
// Строгий - Булево - Истина > аргумент не может быть перезаписан данными из запроса - strict
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
// Структура Из КлючИЗначение - Результат установки
Функция УстановитьАргументОбработчика(Знач Проект
, Знач КлючОбработчика
, Знач Аргумент
, Знач Значение
, Знач Строгий = Истина) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
@@ -249,19 +314,88 @@
Иначе
Проект = Результат["path"];
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Аргумент);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
OPI_ПреобразованиеТипов.ПолучитьБулево(Строгий);
МассивФильтров = Новый Массив;
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
МассивФильтров.Добавить(СтруктураФильтра);
СтруктураФильтра.Вставить("field", "arg");
СтруктураФильтра.Вставить("value", Аргумент);
МассивФильтров.Добавить(СтруктураФильтра);
ТипСервер = Тип("ВебСервер");
Таблица = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , МассивФильтров, , , Проект);
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
Если Результат["result"] Тогда
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
КоличествоЗаписей = Результат["data"].Количество();
СтруктураЗаписи = Новый Структура("value,strict", Значение, Строгий);
Если КоличествоЗаписей <> 0 Тогда
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураЗаписи, МассивФильтров, Проект);
Иначе
СтруктураЗаписи.Вставить("key", КлючОбработчика);
СтруктураЗаписи.Вставить("arg", Аргумент);
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, Проект);
КонецЕсли;
Если Результат["result"] Тогда
Результат = ПолучитьОбработчикЗапросов(Проект, КлючОбработчика);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
Возврат СформироватьОтвет(Истина, "Остановлен");
// Получить аргументы обработчика
// Получает список установленных аргументов обработчика
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Список обработчиков
Функция ПолучитьАргументыОбработчика(Знач Проект, Знач КлючОбработчика) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
Если Не Результат["result"] Тогда
Возврат Результат;
Иначе
Проект = Результат["path"];
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Таблица = КонстантноеЗначение("ТаблицаАргументов");
МассивПолей = СтрРазделить("arg,value,strict", ",");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, МассивПолей, СтруктураФильтра, , , Проект);
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -278,16 +412,16 @@
OPI_Инструменты.ВернутьУправляющиеПоследовательности(Путь);
ФайлПроекта = Новый Файл(Путь);
Текст = "Файл проекта существует!";
Текст = "The project file exists";
Результат = Истина;
Если Не ФайлПроекта.Существует() Тогда
Текст = "Файл проекта по указанному пути не найден!";
Текст = "Project file not found at the specified path";
Результат = Ложь;
КонецЕсли;
Если ФайлПроекта.ЭтоКаталог() Тогда
Текст = "Передан путь к каталогу, а не файл проекта!";
Текст = "A directory path was passed, not a project file";
Результат = Ложь;
КонецЕсли;
@@ -326,7 +460,7 @@
Результат = СоздатьНовыйПроект(ПолныйПуть);
Если Результат["result"] Тогда
Текст = "Файл проекта успешно создан!";
Текст = "The project file was created successfully";
Ответ = СформироватьОтвет(Истина, Текст, ПолныйПуть);
Иначе
Ответ = Результат;
@@ -334,7 +468,7 @@
Иначе
Текст = "Файл проекта по заданному пути уже существует!";
Текст = "The project file at the specified path already exists";
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
КонецЕсли;
@@ -357,11 +491,23 @@
Функция КонстантноеЗначение(Знач Ключ)
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
ИначеЕсли Ключ = "ТаблицаАргументов" Тогда Возврат "arguments"
Иначе Возврат "" КонецЕсли;
КонецФункции
Функция ИменаКонстантТаблиц(Знач ТолькоОбработчики = Истина)
МассивИмен = Новый Массив;
МассивИмен.Добавить("ТаблицаОбработчиков");
МассивИмен.Добавить("ТаблицаАргументов");
Возврат МассивИмен;
КонецФункции
Функция СоздатьНовыйПроект(Путь)
ПустойФайл = ПолучитьДвоичныеДанныеИзСтроки("");
@@ -369,6 +515,13 @@
Результат = СоздатьТаблицуОбработчиков(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Результат = СоздатьТаблицуАргументов(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
@@ -394,6 +547,21 @@
КонецФункции
Функция СоздатьТаблицуАргументов(Путь)
СтруктураТаблицы = Новый Соответствие();
СтруктураТаблицы.Вставить("key" , "TEXT");
СтруктураТаблицы.Вставить("arg" , "TEXT");
СтруктураТаблицы.Вставить("value" , "TEXT");
СтруктураТаблицы.Вставить("strict" , "BOOLEAN");
ИмяТаблицыАргументов = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыАргументов, СтруктураТаблицы, Путь);
Возврат Результат;
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(9);