Initial project import
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
// Обработчик URL-шаблона HTTP-сервиса, например POST /runtime-bridge/rpc.
|
||||
// Требует общий серверный модуль ДополнительныеРеквизитыReadOnly
|
||||
// (additional_attributes_readonly.bsl) в составе тестового расширения.
|
||||
|
||||
Функция ОбработатьRPC(Запрос) Экспорт
|
||||
Попытка
|
||||
ДанныеЗапроса = ПрочитатьJSONИзСтроки(Запрос.ПолучитьТелоКакСтроку());
|
||||
Метод = ДанныеЗапроса.method;
|
||||
Параметры = ДанныеЗапроса.payload;
|
||||
Если Метод = "additional_attributes.find" Тогда
|
||||
ТекстПоиска = ПолучитьПараметр(Параметры, "query", "");
|
||||
ВключатьУдаленные = ПолучитьПараметр(Параметры, "include_deleted", Ложь);
|
||||
Результат = Новый Структура("status,properties", "found", ДополнительныеРеквизитыReadOnly.НайтиДополнительныеРеквизиты(ТекстПоиска, ВключатьУдаленные));
|
||||
Если Результат.properties.Количество() = 0 Тогда
|
||||
Результат.status = "not_found";
|
||||
КонецЕсли;
|
||||
ИначеЕсли Метод = "additional_attributes.storage.resolve" Тогда
|
||||
СсылкаСвойства = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(Новый УникальныйИдентификатор(Параметры.property_ref));
|
||||
Маршрут = ДополнительныеРеквизитыReadOnly.МаршрутЗначенийДополнительногоРеквизита(СсылкаСвойства, Параметры.owner_ref);
|
||||
Результат = Новый Структура("status,property_ref,owner_ref,storage,scd_join", "confirmed", Параметры.property_ref, Параметры.owner_ref,
|
||||
Новый Структура("source_ref,source_kind,fields", Маршрут.source, "TabularSection", Новый Структура("object,property,value", Маршрут.object_field, Маршрут.property_field, Маршрут.value_field)),
|
||||
Новый Структура("source,alias,condition,value_expression,parameters", Маршрут.source, "ДополнительныеРеквизиты", Маршрут.query_join, "ДополнительныеРеквизиты.Значение", Новый Структура("Свойство", Маршрут.parameter)));
|
||||
Иначе
|
||||
Возврат ОтветJSON(405, Новый Структура("status,error", "invalid_argument", "Unsupported read-only bridge method."));
|
||||
КонецЕсли;
|
||||
Возврат ОтветJSON(200, Результат);
|
||||
Исключение
|
||||
// Не передаем внутренний стек и сведения о подключении.
|
||||
Возврат ОтветJSON(400, Новый Структура("status,error", "error", "Invalid read-only bridge request."));
|
||||
КонецПопытки;
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьПараметр(СтруктураПараметров, Имя, ЗначениеПоУмолчанию) Экспорт
|
||||
Значение = ЗначениеПоУмолчанию;
|
||||
Если СтруктураПараметров.Свойство(Имя, Значение) Тогда
|
||||
Возврат Значение;
|
||||
КонецЕсли;
|
||||
Возврат ЗначениеПоУмолчанию;
|
||||
КонецФункции
|
||||
|
||||
Функция ПрочитатьJSONИзСтроки(ТекстJSON) Экспорт
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ЧтениеJSON.УстановитьСтроку(ТекстJSON);
|
||||
Попытка
|
||||
Возврат ПрочитатьJSON(ЧтениеJSON);
|
||||
Наконец
|
||||
ЧтениеJSON.Закрыть();
|
||||
КонецПопытки;
|
||||
КонецФункции
|
||||
|
||||
Функция ОтветJSON(КодСостояния, Данные) Экспорт
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ЗаписьJSON.УстановитьСтроку();
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
ТекстJSON = ЗаписьJSON.Закрыть();
|
||||
Ответ = Новый HTTPСервисОтвет(КодСостояния);
|
||||
Ответ.УстановитьТелоИзСтроки(ТекстJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
|
||||
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
|
||||
Возврат Ответ;
|
||||
КонецФункции
|
||||
Reference in New Issue
Block a user