1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-31 22:05:13 +02:00

Дополнение словаря

This commit is contained in:
Anton Titovets 2025-02-04 12:15:05 +03:00
parent 7af6951b79
commit f848fc400c
4 changed files with 6702 additions and 6627 deletions

File diff suppressed because it is too large Load Diff

@ -40,6 +40,8 @@
//@skip-check module-accessibility-at-client //@skip-check module-accessibility-at-client
//@skip-check object-module-export-variable //@skip-check object-module-export-variable
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных #Область ОписаниеПеременных
Перем ПутьПроекта Экспорт; Перем ПутьПроекта Экспорт;
@ -52,7 +54,6 @@
Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Попытка Попытка
Результат = ОбработатьЗапрос(Контекст); Результат = ОбработатьЗапрос(Контекст);
@ -71,10 +72,6 @@
Контекст.Ответ.ТипКонтента = "application/json;charset=UTF8"; Контекст.Ответ.ТипКонтента = "application/json;charset=UTF8";
Контекст.Ответ.Записать(JSON); Контекст.Ответ.Записать(JSON);
#Иначе
ВызватьИсключение "Метод недоступен на клиенте!";
#КонецЕсли
КонецПроцедуры КонецПроцедуры
Функция ОбработатьЗапрос(Контекст) Функция ОбработатьЗапрос(Контекст)
@ -122,6 +119,10 @@
ИначеЕсли МетодОбработчика = "POST" Тогда ИначеЕсли МетодОбработчика = "POST" Тогда
Результат = ВыполнитьОбработкуPost(Контекст, Обработчик); Результат = ВыполнитьОбработкуPost(Контекст, Обработчик);
ИначеЕсли МетодОбработчика = "MULTIPART" Тогда
Результат = ВыполнитьОбработкуMultipart(Контекст, Обработчик);
Иначе Иначе
@ -157,13 +158,50 @@
КонецФункции КонецФункции
Функция ВыполнитьОбработкуMultipart(Контекст, Обработчик)
Запрос = Контекст.Запрос;
Тело = Запрос.Тело;
Заголовки = Запрос.Заголовки;
Параметры = OPI_Инструменты.РазобратьMultipart(Тело, Заголовки);
Возврат ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры);
КонецФункции
Функция ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры) Функция ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры)
Аргументы = Обработчик["args"]; Аргументы = Обработчик["args"];
Команда = Обработчик["library"]; Команда = Обработчик["library"];
Метод = Обработчик["function"]; Метод = Обработчик["function"];
МассивВФ = Новый Массив;
КотелПараметров = СформироватьКотелПараметров(Аргументы, Параметры); КотелПараметров = СформироватьКотелПараметров(Аргументы, Параметры);
Для Каждого Параметр Из КотелПараметров Цикл
ТекущееЗначение = Параметр.Значение;
ТекущийКлюч = Параметр.Ключ;
Если ТипЗнч(ТекущееЗначение) = Тип("ДвоичныеДанные") Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
ТекущееЗначение.Записать(ИВФ);
МассивВФ.Добавить(ИВФ);
КотелПараметров.Вставить(ТекущийКлюч, ИВФ);
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееЗначение);
КотелПараметров.Вставить(ТекущееЗначение, ИВФ);
КонецЕсли;
КонецЦикла;
СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(КотелПараметров, Команда, Метод); СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(КотелПараметров, Команда, Метод);
Ответ = Неопределено; Ответ = Неопределено;
@ -173,13 +211,23 @@
Иначе Иначе
ТекстВыполнения = СтруктураВыполнения["Результат"]; ТекстВыполнения = СтруктураВыполнения["Результат"];
Выполнить(ТекстВыполнения); Выполнить(ТекстВыполнения);
Ответ = Новый Структура("result,data", Истина, Ответ); Ответ = Новый Структура("result,data", Истина, Ответ);
КонецЕсли; КонецЕсли;
Попытка
Для Каждого ВременныйФайл Из МассивВФ Цикл
УдалитьФайлы(ВременныйФайл);
КонецЦикла;
Исключение
Сообщить("Не удалось удалить временные файлы!");
КонецПопытки;
Возврат Ответ; Возврат Ответ;
@ -210,8 +258,11 @@
Для Каждого Параметр Из Параметры Цикл Для Каждого Параметр Из Параметры Цикл
Значение = Параметр.Значение; Значение = Параметр.Значение;
Значение = ?(СтрНачинаетсяС(Значение , """"), Прав(Значение, СтрДлина(Значение) - 1), Значение);
Значение = ?(СтрЗаканчиваетсяНа(Значение, """"), Лев(Значение , СтрДлина(Значение) - 1), Значение); Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ?(СтрНачинаетсяС(Значение , """"), Прав(Значение, СтрДлина(Значение) - 1), Значение);
Значение = ?(СтрЗаканчиваетсяНа(Значение, """"), Лев(Значение , СтрДлина(Значение) - 1), Значение);
КонецЕсли;
КотелПараметров.Вставить("--" + Параметр.Ключ, Значение); КотелПараметров.Вставить("--" + Параметр.Ключ, Значение);
@ -234,3 +285,7 @@
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Иначе
ВызватьИсключение "Объект недоступен на клиенте!";
#КонецЕсли

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

@ -1197,8 +1197,16 @@
ЧтениеЧасти = Новый ЧтениеДанных(Поток); ЧтениеЧасти = Новый ЧтениеДанных(Поток);
ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧтениеЧасти); ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧтениеЧасти);
ИмяЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти); ДанныеЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти);
ИмяЧасти = ДанныеЧасти["name"];
ИмяФайла = ДанныеЧасти["filename"];
ТекущиеДанные = ЧтениеЧасти.Прочитать().ПолучитьДвоичныеДанные(); ТекущиеДанные = ЧтениеЧасти.Прочитать().ПолучитьДвоичныеДанные();
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
ТекущиеДанные = ПолучитьСтрокуИзДвоичныхДанных(ТекущиеДанные);
КонецЕсли;
СоответствиеДанных.Вставить(ИмяЧасти, ТекущиеДанные); СоответствиеДанных.Вставить(ИмяЧасти, ТекущиеДанные);
@ -1272,8 +1280,9 @@
Функция ПолучитьИмяСообщения(Заголовки) Функция ПолучитьИмяСообщения(Заголовки)
ТекстИсключения = "Content-Disposition одной из частей не найден или имеет неверный формат!"; ТекстИсключения = "Content-Disposition одной из частей не найден или имеет неверный формат!";
Описание = Заголовки.Получить("Content-Disposition"); Описание = Заголовки.Получить("Content-Disposition");
СтруктураВозврата = Новый Структура("name,filename");
Если Не ЗначениеЗаполнено(Описание) Тогда Если Не ЗначениеЗаполнено(Описание) Тогда
ВызватьИсключение ТекстИсключения; ВызватьИсключение ТекстИсключения;
@ -1286,20 +1295,26 @@
Части = СтрРазделить(Свойство, "=", Ложь); Части = СтрРазделить(Свойство, "=", Ложь);
ИмяСвойства = СокрЛП(Части[0]); ИмяСвойства = СокрЛП(Части[0]);
ИмяСвойства = нРег(ИмяСвойства);
Если ИмяСвойства <> "name" И ИмяСвойства <> "Name" Тогда Если ИмяСвойства = "name" Тогда
Продолжить;
СтруктураВозврата["name"] = СокрЛП(Части[1]);
ИначеЕсли ИмяСвойства = "filename"Тогда
СтруктураВозврата["filename"] = СокрЛП(Части[1]);
Иначе
Продолжить;
КонецЕсли; КонецЕсли;
Имя = СокрЛП(Части[1]);
Прервать;
КонецЦикла; КонецЦикла;
Если Не ЗначениеЗаполнено(Имя) Тогда Если Не ЗначениеЗаполнено(СтруктураВозврата["name"]) Тогда
ВызватьИсключение ТекстИсключения; ВызватьИсключение ТекстИсключения;
Иначе Иначе
Возврат Имя; Возврат СтруктураВозврата;
КонецЕсли; КонецЕсли;
КонецФункции КонецФункции