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");
Возврат СекретныйКлюч;
КонецЕсли;
@@ -174,6 +212,10 @@
Если Результат["result"] Тогда
Для Каждого Элемент Из Результат["data"] Цикл
Элемент.Вставить("args", ПолучитьАргументыОбработчика(Проект, КлючОбработчика));
КонецЦикла;
КоличествоЗаписей = Результат["data"].Количество();
Если КоличествоЗаписей = 1 Тогда
@@ -183,7 +225,7 @@
Иначе
Если КоличествоЗаписей = 0 Тогда
Результат = СформироватьОтвет(Ложь, "Обработчик не найден!");
Результат = СформироватьОтвет(Ложь, "Handler not found");
КонецЕсли;
КонецЕсли;
@@ -224,23 +266,46 @@
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Результаты = Новый Соответствие;
Успех = Истина;
Возврат Результат;
Для Каждого Таблица Из ИменаКонстантТаблиц() Цикл
ИмяТаблицы = КонстантноеЗначение(Таблица);
Результат = OPI_SQLite.УдалитьЗаписи(ИмяТаблицы, СтруктураФильтра, Проект);
ТекущийУспех = Результат["result"];
Результаты.Вставить(ИмяТаблицы, ТекущийУспех);
Успех = ?(Не ТекущийУспех, ТекущийУспех, Успех);
КонецЦикла;
Возврат Новый Структура("result,tables", Успех, Результаты);
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
#КонецОбласти
#Область УстановкаАргументов
// Установить аргумент обработчика
// Устанавливает аргумент для функции установщика, позволяя не указывать его при вызове
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
// Аргумент - Строка - CLI аргумент (опция) для функции обработчика - arg
// Значение - Строка - Строковое значение аргумента - value
// Строгий - Булево - Истина > аргумент не может быть перезаписан параметром запроса - strict
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
// Структура Из КлючИЗначение - Результат установки
Функция УстановитьАргументОбработчика(Знач Проект
, Знач КлючОбработчика
, Знач Аргумент
, Знач Значение
, Знач Строгий = Истина) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
@@ -250,17 +315,86 @@
Проект = Результат["path"];
КонецЕсли;
ТипСервер = Тип("ВебСервер");
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Аргумент);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
OPI_ПреобразованиеТипов.ПолучитьБулево(Строгий);
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
МассивФильтров = Новый Массив;
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
МассивФильтров.Добавить(СтруктураФильтра);
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
СтруктураФильтра.Вставить("field", "arg");
СтруктураФильтра.Вставить("value", Аргумент);
МассивФильтров.Добавить(СтруктураФильтра);
Возврат СформироватьОтвет(Истина, "Остановлен");
Таблица = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , МассивФильтров, , , Проект);
Если Результат["result"] Тогда
КоличествоЗаписей = Результат["data"].Количество();
СтруктураЗаписи = Новый Структура("value,strict", Значение, Строгий);
Если КоличествоЗаписей <> 0 Тогда
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураЗаписи, МассивФильтров, Проект);
Иначе
СтруктураЗаписи.Вставить("key", КлючОбработчика);
СтруктураЗаписи.Вставить("arg", Аргумент);
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, Проект);
КонецЕсли;
Если Результат["result"] Тогда
Результат = ПолучитьОбработчикЗапросов(Проект, КлючОбработчика);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Получить аргументы обработчика
// Получает список установленных аргументов обработчика
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - 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";
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
КонецЕсли;
@@ -358,10 +492,22 @@
Функция КонстантноеЗначение(Знач Ключ)
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
ИначеЕсли Ключ = "ТаблицаАргументов" Тогда Возврат "arguments"
Иначе Возврат "" КонецЕсли;
КонецФункции
Функция ИменаКонстантТаблиц(Знач ТолькоОбработчики = Истина)
МассивИмен = Новый Массив;
МассивИмен.Добавить("ТаблицаОбработчиков");
МассивИмен.Добавить("ТаблицаАргументов");
Возврат МассивИмен;
КонецФункции
Функция СоздатьНовыйПроект(Путь)
ПустойФайл = ПолучитьДвоичныеДанныеИзСтроки("");
@@ -374,6 +520,13 @@
Возврат Результат;
КонецЕсли;
Результат = СоздатьТаблицуАргументов(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -394,6 +547,21 @@
КонецФункции
Функция СоздатьТаблицуАргументов(Путь)
СтруктураТаблицы = Новый Соответствие();
СтруктураТаблицы.Вставить("key" , "TEXT");
СтруктураТаблицы.Вставить("arg" , "TEXT");
СтруктураТаблицы.Вставить("value" , "TEXT");
СтруктураТаблицы.Вставить("strict" , "BOOLEAN");
ИмяТаблицыАргументов = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыАргументов, СтруктураТаблицы, Путь);
Возврат Результат;
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(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");
Возврат СекретныйКлюч;
КонецЕсли;
@@ -174,6 +212,10 @@
Если Результат["result"] Тогда
Для Каждого Элемент Из Результат["data"] Цикл
Элемент.Вставить("args", ПолучитьАргументыОбработчика(Проект, КлючОбработчика));
КонецЦикла;
КоличествоЗаписей = Результат["data"].Количество();
Если КоличествоЗаписей = 1 Тогда
@@ -183,7 +225,7 @@
Иначе
Если КоличествоЗаписей = 0 Тогда
Результат = СформироватьОтвет(Ложь, "Обработчик не найден!");
Результат = СформироватьОтвет(Ложь, "Handler not found");
КонецЕсли;
КонецЕсли;
@@ -224,23 +266,46 @@
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Результаты = Новый Соответствие;
Успех = Истина;
Возврат Результат;
Для Каждого Таблица Из ИменаКонстантТаблиц() Цикл
ИмяТаблицы = КонстантноеЗначение(Таблица);
Результат = OPI_SQLite.УдалитьЗаписи(ИмяТаблицы, СтруктураФильтра, Проект);
ТекущийУспех = Результат["result"];
Результаты.Вставить(ИмяТаблицы, ТекущийУспех);
Успех = ?(Не ТекущийУспех, ТекущийУспех, Успех);
КонецЦикла;
Возврат Новый Структура("result,tables", Успех, Результаты);
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
#КонецОбласти
#Область УстановкаАргументов
// Установить аргумент обработчика
// Устанавливает аргумент для функции обработчика, позволяя не указывать его при вызове
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
// Аргумент - Строка - CLI аргумент (опция) для функции обработчика - arg
// Значение - Строка - Строковое значение аргумента - value
// Строгий - Булево - Истина > аргумент не может быть перезаписан данными из запроса - strict
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
// Структура Из КлючИЗначение - Результат установки
Функция УстановитьАргументОбработчика(Знач Проект
, Знач КлючОбработчика
, Знач Аргумент
, Знач Значение
, Знач Строгий = Истина) Экспорт
Результат = ПроверитьСуществованиеПроекта(Проект);
@@ -250,17 +315,86 @@
Проект = Результат["path"];
КонецЕсли;
ТипСервер = Тип("ВебСервер");
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Аргумент);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
OPI_ПреобразованиеТипов.ПолучитьБулево(Строгий);
ПараметрыСервера = Новый Массив(1);
ПараметрыСервера[0] = Порт;
МассивФильтров = Новый Массив;
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "key");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
МассивФильтров.Добавить(СтруктураФильтра);
ВебСервер.ДобавитьОбработчикЗапросов(OPI_ПроксиИнтеграций, "ОсновнаяОбработка");
ВебСервер.Запустить();
СтруктураФильтра.Вставить("field", "arg");
СтруктураФильтра.Вставить("value", Аргумент);
МассивФильтров.Добавить(СтруктураФильтра);
Возврат СформироватьОтвет(Истина, "Остановлен");
Таблица = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , МассивФильтров, , , Проект);
Если Результат["result"] Тогда
КоличествоЗаписей = Результат["data"].Количество();
СтруктураЗаписи = Новый Структура("value,strict", Значение, Строгий);
Если КоличествоЗаписей <> 0 Тогда
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураЗаписи, МассивФильтров, Проект);
Иначе
СтруктураЗаписи.Вставить("key", КлючОбработчика);
СтруктураЗаписи.Вставить("arg", Аргумент);
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, Проект);
КонецЕсли;
Если Результат["result"] Тогда
Результат = ПолучитьОбработчикЗапросов(Проект, КлючОбработчика);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Получить аргументы обработчика
// Получает список установленных аргументов обработчика
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - 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";
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
КонецЕсли;
@@ -358,10 +492,22 @@
Функция КонстантноеЗначение(Знач Ключ)
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
ИначеЕсли Ключ = "ТаблицаАргументов" Тогда Возврат "arguments"
Иначе Возврат "" КонецЕсли;
КонецФункции
Функция ИменаКонстантТаблиц(Знач ТолькоОбработчики = Истина)
МассивИмен = Новый Массив;
МассивИмен.Добавить("ТаблицаОбработчиков");
МассивИмен.Добавить("ТаблицаАргументов");
Возврат МассивИмен;
КонецФункции
Функция СоздатьНовыйПроект(Путь)
ПустойФайл = ПолучитьДвоичныеДанныеИзСтроки("");
@@ -374,6 +520,13 @@
Возврат Результат;
КонецЕсли;
Результат = СоздатьТаблицуАргументов(Путь);
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -394,6 +547,21 @@
КонецФункции
Функция СоздатьТаблицуАргументов(Путь)
СтруктураТаблицы = Новый Соответствие();
СтруктураТаблицы.Вставить("key" , "TEXT");
СтруктураТаблицы.Вставить("arg" , "TEXT");
СтруктураТаблицы.Вставить("value" , "TEXT");
СтруктураТаблицы.Вставить("strict" , "BOOLEAN");
ИмяТаблицыАргументов = КонстантноеЗначение("ТаблицаАргументов");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыАргументов, СтруктураТаблицы, Путь);
Возврат Результат;
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(9);