Skip to content
This repository was archived by the owner on Feb 5, 2024. It is now read-only.

Тестовая реализация генератора OAS #2

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#Область СлужебныйПрограммныйИнтерфейс

#Область ОбработчикиЗапросов

// Создать заявку.
//
// Параметры:
Expand Down Expand Up @@ -122,18 +124,10 @@
// HTTPСервисОтвет - Ответ
Функция ПолучитьПроект(Запрос, МетаданныеСервиса) Экспорт

ПараметрАйдиПроекта = СервисыОбщее.НовыйПараметрЗапроса("project_id", "ИД", Истина);
ПараметрКод = СервисыОбщее.НовыйПараметрЗапроса("code", "Число");
ПараметрУдален = СервисыОбщее.НовыйПараметрЗапроса("deleted", "Булево");
ПараметрСтатус = СервисыОбщее.НовыйПараметрЗапроса("status");
ПараметрСтатус.ВозможныеЗначения.Добавить("active");
ПараметрСтатус.ВозможныеЗначения.Добавить("disabled");

ОжидаемыеПараметры = Новый Массив();
ОжидаемыеПараметры.Добавить(ПараметрАйдиПроекта);
ОжидаемыеПараметры.Добавить(ПараметрКод);
ОжидаемыеПараметры.Добавить(ПараметрУдален);
ОжидаемыеПараметры.Добавить(ПараметрСтатус);
ОжидаемыеПараметры = ОбщегоНазначенияХТТП.ДополнитьМассив(
ПараметрыШаблона_projects_single(),
ПараметрыМетода_ПолучитьПроект()
); // Массив

ПараметрыЗапроса = СервисыОбщее.ПараметрыЗапроса(
Запрос,
Expand Down Expand Up @@ -211,11 +205,65 @@
Возврат XMLСтрока(Значение);
КонецЕсли;
КонецФункции
#КонецОбласти


#Область OAS

// Параметры шаблонов URL.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - Параметры шаблонов URL:
// * Ключ - ОбъектМетаданныхШаблонURLHTTPСервиса
// * Значение - Массив из см. СервисыОбщее.НовыйПараметрЗапроса
Функция ПараметрыШаблоновURL() Экспорт
Результат = Новый Соответствие();
Результат.Вставить(Метаданные.HTTPСервисы.Демо_.ШаблоныURL.projects_single, ПараметрыШаблона_projects_single());
Возврат Результат;
КонецФункции

// Параметры методов.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - Параметры шаблонов URL:
// * Ключ - ОбъектМетаданныхМетодHTTPСервиса
// * Значение - Массив из см. СервисыОбщее.НовыйПараметрЗапроса
Функция ПараметрыМетодов() Экспорт
Результат = Новый Соответствие();
Результат.Вставить(Метаданные.HTTPСервисы.Демо_.ШаблоныURL.projects_single.Методы.GET, ПараметрыМетода_ПолучитьПроект());
Возврат Результат;
КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область СпецификацииМетодов

Функция ПараметрыМетода_ПолучитьПроект()
ОжидаемыеПараметры = Новый Массив();
ПараметрКод = СервисыОбщее.НовыйПараметрЗапроса("code", "Число");
ПараметрУдален = СервисыОбщее.НовыйПараметрЗапроса("deleted", "Булево");
ПараметрСтатус = СервисыОбщее.НовыйПараметрЗапроса("status");
ПараметрСтатус.ВозможныеЗначения.Добавить("active");
ПараметрСтатус.ВозможныеЗначения.Добавить("disabled");
ОжидаемыеПараметры.Добавить(ПараметрКод);
ОжидаемыеПараметры.Добавить(ПараметрУдален);
ОжидаемыеПараметры.Добавить(ПараметрСтатус);
Возврат ОжидаемыеПараметры;
КонецФункции

Функция ПараметрыШаблона_projects_single()
ОжидаемыеПараметры = Новый Массив();
ПараметрАйдиПроекта = СервисыОбщее.НовыйПараметрЗапроса("project_id", "ИД", Истина);
ОжидаемыеПараметры.Добавить(ПараметрАйдиПроекта);
Возврат ОжидаемыеПараметры;
КонецФункции

#КонецОбласти

// Общие параметры преобразования.
//
// Параметры:
Expand Down
1 change: 1 addition & 0 deletions example/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@
<catalogs>Catalog.Демо_Проекты</catalogs>
<documents>Document.Демо_Заявка</documents>
<documents>Document.Демо_Сообщение</documents>
<dataProcessors>DataProcessor.ГенераторСхемыКонфигурации</dataProcessors>
</mdclass:Configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormField">
<name>Реквизит1</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Реквизит1</segments>
</dataPath>
<extendedTooltip>
<name>Реквизит1РасширеннаяПодсказка</name>
<id>3</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>Реквизит1КонтекстноеМеню</name>
<id>2</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>СобратьСхему</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СобратьСхемуРасширеннаяПодсказка</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<commandName>Form.Command.СобратьСхему</commandName>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.ГенераторСхемыКонфигурации</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>Реквизит1</name>
<id>2</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>СобратьСхему</name>
<title>
<key>ru</key>
<value>Собрать схему</value>
</title>
<id>1</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>СобратьСхему</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@

&НаКлиенте
Процедура СобратьСхему(Команда)
СобратьСхемуНаСервере();
КонецПроцедуры

&НаСервере
Процедура СобратьСхемуНаСервере()
Генератор = ГенераторOAS.НовыйГенераторСхемы();
Генератор
.ДобавитьИнфо("Тестовая схема", "1.0")
.ДобавитьКонтакт("daabramov", , "[email protected]")
.ДобавитьЛицензию("MIT")
.ДобавитьСервер("http://localhost/api");

ПараметрыШаблонов = Демо_КонтроллерСервиса.ПараметрыШаблоновURL();
ПараметрыМетодов = Демо_КонтроллерСервиса.ПараметрыМетодов();

Для Каждого Шаблон Из Метаданные.HTTPСервисы.Демо_.ШаблоныURL Цикл

Генератор.ДобавитьПуть(Шаблон.Шаблон, Шаблон.Синоним, Шаблон.Комментарий);

ПараметрыПути = ПараметрыШаблонов.Получить(Шаблон);
Если ПараметрыПути <> Неопределено Тогда
Для Каждого Параметр Из ПараметрыПути Цикл
Генератор.ДобавитьПараметр(Параметр.Имя, "path", Истина, ТипПараметраСхемыПоОписанию(Параметр, Генератор));
КонецЦикла;
КонецЕсли;

Для Каждого Метод Из Шаблон.Методы Цикл

Генератор.ДобавитьМетод(НРег(Строка(Метод.HTTPМетод)), Метод.Синоним, Метод.Комментарий);

ПараметрыМетода = ПараметрыМетодов.Получить(Метод);
Если ПараметрыМетода <> Неопределено Тогда
Для Каждого Параметр Из ПараметрыМетода Цикл
Генератор.ДобавитьПараметр(
Параметр.Имя,
"query",
Параметр.Обязательный,
ТипПараметраСхемыПоОписанию(Параметр, Генератор)
);
КонецЦикла;
КонецЕсли;

КонецЦикла;

КонецЦикла;

Реквизит1 = Генератор.ПолучитьСхему();

КонецПроцедуры

// Тип параметра схемы по описанию.
//
// Параметры:
// Параметр - см. СервисыОбщее.НовыйПараметрЗапроса
// ГенераторСхемы - ОбработкаОбъект.ГенераторOAS
//
// Возвращаемое значение:
&НаСервере
Функция ТипПараметраСхемыПоОписанию(Параметр, ГенераторСхемы)

Результат = ГенераторСхемы.ДоступныеТипы[Врег(Параметр.Тип)];

Если Параметр.ВозможныеЗначения.Количество() > 0 Тогда
Результат = Новый Структура(Результат);
Результат.Вставить("enum", Параметр.ВозможныеЗначения);
Возврат Новый ФиксированнаяСтруктура(Результат);
Иначе
Возврат Результат;
КонецЕсли;

КонецФункции

&НаСервере
Функция ПараметрыВПути(Шаблон)
ПараметрыВПути = Новый Массив;
СоставПути = СтрРазделить(Шаблон, "/", Ложь);

Для Каждого Элемент Из СоставПути Цикл

Если Лев(Элемент, 1) = "{" И Прав(Элемент, 1) = "}" Тогда
ПараметрыВПути.Добавить(Сред(Элемент, 2, СтрДлина(Элемент) - 2));
КонецЕсли;

КонецЦикла;

Возврат ПараметрыВПути;

КонецФункции
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f60b8fcc-6340-4a34-a134-cdb1bf0ee2be">
<producedTypes>
<objectType typeId="3558f8d0-7f79-47ca-b48f-2b3e8422c20d" valueTypeId="3041dd94-6aa7-4897-ada8-7b9b6ebdb771"/>
<managerType typeId="f84b1ec3-02af-4afa-8165-4df095aa5b23" valueTypeId="e48c5593-b459-41d9-b07d-2b35c5942217"/>
</producedTypes>
<name>ГенераторСхемыКонфигурации</name>
<synonym>
<key>ru</key>
<value>Генератор схемы конфигурации</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<defaultForm>DataProcessor.ГенераторСхемыКонфигурации.Form.Форма</defaultForm>
<forms uuid="7b68f7b7-4990-481f-b7cd-d86940738889">
<name>Форма</name>
<synonym>
<key>ru</key>
<value>Форма</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:DataProcessor>
Loading