61 lines
4.7 KiB
Plaintext
61 lines
4.7 KiB
Plaintext
// Обработчик 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");
|
|
Возврат Ответ;
|
|
КонецФункции
|