Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавлена возможность выбора типа СУБД вручную на форме настройки #177

Merged
merged 2 commits into from
Dec 28, 2024
Merged
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
44 changes: 44 additions & 0 deletions src/cf/Catalogs/пбп_НастройкиИнтеграции.xml
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,50 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="6c9902f2-7e3f-4d2e-b51e-efd40a6134c0">
<Properties>
<Name>ТипСУБД</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тип СУБД</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>30</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
Comment on lines +856 to +899
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Рекомендуется добавить валидацию значений атрибута ТипСУБД

Для обеспечения целостности данных и предотвращения ошибок ввода предлагается:

  1. Заменить тип данных xs:string на перечисление с фиксированным списком поддерживаемых СУБД
  2. Добавить проверку заполнения (FillChecking>ShowError</FillChecking)

Пример реализации:

-					<Type>
-						<v8:Type>xs:string</v8:Type>
-						<v8:StringQualifiers>
-							<v8:Length>30</v8:Length>
-							<v8:AllowedLength>Variable</v8:AllowedLength>
-						</v8:StringQualifiers>
-					</Type>
+					<Type>
+						<v8:Type>cfg:EnumRef.пбп_ТипыСУБД</v8:Type>
+					</Type>

Committable suggestion skipped: line range outside the PR's diff.

<Form>ФормаЭлемента</Form>
<Form>ФормаСписка</Form>
<Form>ФормаЗагрузкиВнешнейКомпоненты</Form>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,31 @@

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

Если Не ЭтоНовый() И пбп_ИнтеграцииСлужебный.ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "ВЫБРАТЬ
| пбп_НастройкиИнтеграции.СтрокаПодключения КАК СтрокаПодключения,
| пбп_НастройкиИнтеграции.Порт КАК Порт,
| пбп_НастройкиИнтеграции.ИмяОбъекта КАК ИмяОбъекта,
| пбп_НастройкиИнтеграции.ТипСУБД КАК ТипСУБД
|ИЗ
| Справочник.пбп_НастройкиИнтеграции КАК пбп_НастройкиИнтеграции
|ГДЕ
| пбп_НастройкиИнтеграции.Ссылка = &Ссылка";

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
ВыборкаРезультатаЗапроса.Следующий();

Если ИмяОбъекта <> ВыборкаРезультатаЗапроса.ИмяОбъекта
Или СтрокаПодключения <> ВыборкаРезультатаЗапроса.СтрокаПодключения
Или Порт <> ВыборкаРезультатаЗапроса.Порт
Или ТипСУБД <> ВыборкаРезультатаЗапроса.ТипСУБД Тогда
ТекстСообщения = НСтр("ru = 'После записи настроек интеграции необходимо нажать на ""Установить соединение с базой данных"" для обновления параметров соединения с внешним источником данных'");
пбп_Переадресация.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;

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

Процедура ПриЗаписи(Отказ)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,83 @@
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="СтрокаПодключенияМногострочнаяКонтекстноеМеню" id="70"/>
<ExtendedTooltip name="СтрокаПодключенияМногострочнаяРасширеннаяПодсказка" id="71"/>
<Events>
<Event name="OnChange">СтрокаПодключенияМногострочнаяПриИзменении</Event>
</Events>
</InputField>
<InputField name="ТипСУБД" id="76">
<DataPath>Объект.ТипСУБД</DataPath>
<DropListButton>true</DropListButton>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ChoiceList>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Microsoft SQL Server</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">MSSQLServer</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Postgre SQL</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">PostgreSQL</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>IDM Db2</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">IBMDB2</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Oracle Database</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">OracleDatabase</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>MySQL</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">MySQL</Value>
</xr:Value>
</xr:Item>
</ChoiceList>
<ContextMenu name="ТипСУБДКонтекстноеМеню" id="77"/>
<ExtendedTooltip name="ТипСУБДРасширеннаяПодсказка" id="78"/>
</InputField>
</ChildItems>
</UsualGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,15 @@

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

&НаКлиенте
Процедура СтрокаПодключенияМногострочнаяПриИзменении(Элемент)

Если ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(Объект.ТипИнтеграции) Тогда
Объект.ТипСУБД = ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(Объект.СтрокаПодключения);
КонецЕсли;

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

&НаКлиенте
Процедура СписокНастроекПриИзменении(Элемент)

Expand Down Expand Up @@ -202,6 +211,7 @@
ГруппаСтрокаПорт = "ГруппаСтрокаПорт";
СтрокаПодключенияМногострочная = "СтрокаПодключенияМногострочная";
УстановитьСоединениеСБазойДанных = "УстановитьСоединениеСБазойДанных";
ТипСУБДСтрокой = "ТипСУБД";

УстанавливаемоеСвойство = "Видимость";

Expand All @@ -211,6 +221,8 @@
Элементы, ГруппаСтрокаПорт, УстанавливаемоеСвойство, Истина);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, УстановитьСоединениеСБазойДанных, УстанавливаемоеСвойство, Ложь);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, ТипСУБДСтрокой, УстанавливаемоеСвойство, Ложь);

Если Не ЗначениеЗаполнено(Объект.ТипИнтеграции) Тогда
Элементы.СтрокаПодключения.Заголовок = НСтр("ru = 'Каталог'");
Expand Down Expand Up @@ -252,6 +264,7 @@
ПодключитьВнешнююКомпоненту = "ПодключитьВнешнююКомпоненту";
СтрокаПодключенияМногострочная = "СтрокаПодключенияМногострочная";
УстановитьСоединениеСБазойДанных = "УстановитьСоединениеСБазойДанных";
ТипСУБДСтрокой = "ТипСУБД";

СерверСтрока = НСтр("ru = 'Сервер'");

Expand Down Expand Up @@ -312,6 +325,8 @@

пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, УстановитьСоединениеСБазойДанных, УстанавливаемоеСвойство, Истина);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, ТипСУБДСтрокой, УстанавливаемоеСвойство, Истина);
ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.COM Тогда
Элементы.СтрокаПодключенияМногострочная.Заголовок = НСтр("ru = 'Строка подключения'");
Элементы.ИмяОбъекта.Заголовок = НСтр("ru = 'Имя COM-объекта'");
Expand Down Expand Up @@ -587,4 +602,32 @@

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

&НаСервереБезКонтекста
Функция ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции)

Возврат пбп_ИнтеграцииСлужебный.ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции);

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

&НаКлиенте
Функция ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(СтрокаСоединения)

Если СтрНайти(СтрокаСоединения, "SQL Server") > 0 Тогда
ИмяСУБД = "MSSQLServer";
ИначеЕсли СтрНайти(СтрокаСоединения, "PostgreSQL") > 0 Тогда
ИмяСУБД = "PostgreSQL";
ИначеЕсли СтрНайти(СтрокаСоединения, "IBM DB2") > 0 Тогда
ИмяСУБД = "IBMDB2";
ИначеЕсли СтрНайти(СтрокаСоединения, "Oracle") > 0 Тогда
ИмяСУБД = "OracleDatabase";
ИначеЕсли СтрНайти(СтрокаСоединения, "MySQL") > 0 Тогда
ИмяСУБД = "MySQL";
Иначе
ИмяСУБД = "";
КонецЕсли;

Возврат ИмяСУБД;

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

#КонецОбласти // СлужебныеПроцедурыИФункции
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,7 @@
ПараметрыСоединения.АутентификацияОС = Ложь;
ПараметрыСоединения.АутентификацияСтандартная = Истина;
ПараметрыСоединения.СтрокаСоединения = СтруктураНастроек.СтрокаПодключения;
ПараметрыСоединения.СУБД = ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(
СтруктураНастроек.СтрокаПодключения);
ПараметрыСоединения.СУБД = СтруктураНастроек.ТипСУБД;

Если СтруктураНастроек.Свойство("Логин") Тогда
ПараметрыСоединения.ИмяПользователя = СтруктураНастроек.Логин.Значение;
Expand Down Expand Up @@ -678,32 +677,6 @@

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

// Получить имя СУБД внешнего источника данных по строке соединения
//
// Параметры:
// СтрокаСоединения - Строка - строка соединения с базой данных
//
// Возвращаемое значение:
// Строка - тип СУБД (см. ПараметрыСоединенияВнешнегоИсточникаДанных)
//
Функция ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(СтрокаСоединения)

Если СтрНайти(СтрокаСоединения, "SQL Server") > 0 Тогда
ИмяСУБД = "MSSQLServer";
ИначеЕсли СтрНайти(СтрокаСоединения, "PostgreSQL") > 0 Тогда
ИмяСУБД = "PostgreSQL";
ИначеЕсли СтрНайти(СтрокаСоединения, "IBM DB2") > 0 Тогда
ИмяСУБД = "IBMDB2";
ИначеЕсли СтрНайти(СтрокаСоединения, "Oracle") > 0 Тогда
ИмяСУБД = "OracleDatabase";
ИначеЕсли СтрНайти(СтрокаСоединения, "MySQL") > 0 Тогда
ИмяСУБД = "MySQL";
Иначе
ИмяСУБД = Неопределено;
КонецЕсли;

Возврат ИмяСУБД;

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


#КонецОбласти // СлужебныеПроцедурыИФункции
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@
УстановитьПривилегированныйРежим(Истина);

СтруктураНастроек = пбп_Переадресация.ЗначенияРеквизитовОбъекта(
НастройкаИнтеграции, "СтрокаПодключения, Порт, ИмяОбъекта");
НастройкаИнтеграции, "СтрокаПодключения, Порт, ИмяОбъекта, ТипСУБД");
ДанныеБезопасногоХранилища = пбп_Переадресация.ПрочитатьДанныеИзБезопасногоХранилища(НастройкаИнтеграции);

Для Каждого КлючИЗначение Из ДанныеБезопасногоХранилища Цикл
Expand Down Expand Up @@ -260,6 +260,23 @@

#КонецОбласти // РаботаСДанными

// Проверить это интеграция с внешним источником данных
//
// Параметры:
// ТипИнтеграции - СправочникСсылка.пбп_ТипыИнтеграций - тип интеграции
//
// Возвращаемое значение:
// Булево - Истина, если настройка интеграции с типом интеграция с внешним источником данных
//
Функция ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции) Экспорт

ЭлементНаследования = Справочники.пбп_ТипыИнтеграций
.ПолучитьПредопределенныйЭлементНаследованияНастроекТипаИнтеграции(ТипИнтеграции);

Возврат ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.ПрямоеПодключениеКБД;

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

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

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