Skip to content

Commit

Permalink
Предварительная фильтрации объектов кластера arkuznetsov#9
Browse files Browse the repository at this point in the history
  • Loading branch information
salexdv committed Apr 22, 2022
1 parent 7f486ec commit 462fe40
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions src/model/classes/ПодключениеКАгентам.os
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@

Для Каждого ТекОписаниеОбъекта Из КэшОписанийОбъектов Цикл

Если НЕ ОбъектСоответствуетПредварительномуФильтру(ТекОписаниеОбъекта, Фильтр) Тогда
Продолжить;
КонецЕсли;

// При необходимости получаем полное описание ИБ или соединения и сохраняем в кэш
ЗаполнитьРасширенноеОписаниеОбъекта(ТипОбъекта, ТекОписаниеОбъекта.Значение, Поля, ОбновленныеОписания);

Expand Down Expand Up @@ -838,3 +842,68 @@
КонецФункции // ТипыОбъектовКластера()

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

#Область ПредварительнаяФильтрацияОбъектов

// Функция проверяет, относится ли поле к тому списку полей, который может
// использоваться для предварительной фильтрации объектов кластера
//
// Возвращаемое значение:
// Булево - Истина - поле может использоваться для предварительной фильтрации
//
Функция ЭтоПолеПредварительногоФильтраОбъекта(ИмяПоля)

ПоляПредварительногоФильтра = Новый Соответствие();
ПоляПредварительногоФильтра.Вставить("ID" , Истина);
ПоляПредварительногоФильтра.Вставить("LABEL" , Истина);
ПоляПредварительногоФильтра.Вставить("AGENT" , Истина);
ПоляПредварительногоФильтра.Вставить("CLUSTER" , Истина);
ПоляПредварительногоФильтра.Вставить("CLUSTER-LABEL", Истина);
ПоляПредварительногоФильтра.Вставить("CLUSTER-HOST" , Истина);
ПоляПредварительногоФильтра.Вставить("CLUSTER-PORT" , Истина);

Возврат ПоляПредварительногоФильтра[ВРег(ИмяПоля)] <> Неопределено;

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

// Функция проверяет соответствие значений полей объекта указанному набору сравнений (фильтру)
// результаты сравнений объединяются по "И"
//
// Параметры:
// Объект - Соответствие - проверяемый объект
// Фильтр - Массив из Структура - набор сравнений (фильтр)
// * Оператор - Строка - оператор сравнения
// * Значение - Произвольный - значение для сравнения
// РегистроНезависимо - Булево - Истина - при сравнении на (не)равенство
//
// Возвращаемое значение:
// Булево - Истина - значения полей объекта соответствует фильтру
//
Функция ОбъектСоответствуетПредварительномуФильтру(Объект, Фильтр, РегистроНезависимо = Истина)

Результат = Истина;

Если НЕ (ЗначениеЗаполнено(Фильтр) И ТипЗнч(Фильтр) = Тип("Соответствие")) Тогда
Возврат Результат;
КонецЕсли;

Для Каждого ТекЭлементФильтра Из Фильтр Цикл
Если ЭтоПолеПредварительногоФильтраОбъекта(ТекЭлементФильтра.Ключ) Тогда
Если Объект.Значение[ТекЭлементФильтра.Ключ] = Неопределено Тогда
Результат = Ложь;
Прервать;
КонецЕсли;
Результат = ОбщегоНазначения.ЗначениеСоответствуетФильтру(Объект.Значение[ТекЭлементФильтра.Ключ],
ТекЭлементФильтра.Значение,
РегистроНезависимо);
КонецЕсли;
Если НЕ Результат Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Возврат Результат;

КонецФункции // ОбъектСоответствуетФильтру()

#КонецОбласти // ПредварительнаяФильтрацияОбъектов

0 comments on commit 462fe40

Please sign in to comment.