SetAdvancedFilter

 
Фильтрует отображаемые сообщения о событиях по указанному столбцу таблицы сообщений. С помощью функции можно отфильтровать таблицу по любому столбцу и в историческом и в оперативном режиме программы.
 
bool SetAdvancedFilter(string ColumnID, string FilterExpr)
 

Параметры

 
Параметр
Тип
Описание
ColumnID
string
Идентификатор столбца таблицы сообщений. За каждым столбцом закреплен собственный идентификатор, менять который нельзя
FilterExpr
string
Условие фильтрации в виде логического выражения. Чтобы фильтрация по столбцу сработала, вам нужно правильно составить условие фильтрации. Ниже описаны операторы, которые можно использовать в условиях фильтрации и правила, которые помогут вам составить работающее условие
 
Столбцы таблицы событий, по которым возможна фильтрация:
 
Столбец
Идентификатор
Тип данных
Время генерации
time
Время
Время срабатывания
active_time
Время
Время деактивации
deactive_time
Время
Сообщение
message
Строка
Источник события
source
Строка
Важность
severity
Число
Квитировано
ack
Текст
Время квитирования
ack_time
Время
Пользователь
actor_id
Строка
Комментарий квитирования
ack_comment
Строка
Активность
active
Строка
Квитировать
ack_required
Строка
Качество сигнала
quality
Число
Значение сигнала
value
Число
Группа важности
group
Строка
 

Возвращаемое значение

 
Значение
Описание
true
Фильтр отображения установлен
false
Фильтр отображения не установлен, т.к. условие фильтрации сформировано неверно
 

Операторы и правила формирования условий фильтрации

 
Условие фильтрации для столбца нужно записывать в виде логического выражения с использованием операторов сравнения и/или логических операторов. Такие выражения могут содержать всего одно условие фильтрации, либо быть сложными и включать сразу несколько условий.
 
Когда вы составляете логическое выражение, помните, что внутри каждого столбца содержатся данные определенного типа (в столбце Сообщение - строковые данные, в столбце Важность - число и т.д.), поэтому подбирайте операторы, работающие с этим типом. Ниже для всех операторов указано, с какими столбцами они работают.
 

Операторы сравнения

 
Операторы сравнения нужны для сравнения значений в фильтруемом столбце с какими-либо произвольными значениями. Такие операторы вы можете использовать для фильтрации по столбцам, содержащим число или время.
 
Символьное написание
Описание
<
Меньше
>
Больше
<=
Меньше или равно
>=
Больше или равно
=
Равно
 

Логические операторы

 
Логические операторы нужны для сложных выражений, когда несколько условий объединяются в одно условие, а также для создания отрицательного условия фильтрации.
 
Символьное написание
Кириллическое написание
Англоязычное написание
Описание
Для столбцов
&
И, и
AND, and
логическое "и"
Можно использовать для фильтрации по любому столбцу
|
ИЛИ, или
OR, or
логическое "или"
Можно использовать для фильтрации по любому столбцу
!
Не, не
NOT, not
логическое "не"
Можно использовать только для столбцов, содержащих строку
<>, !=
не равно
Можно использовать только для столбцов, содержащих число
 

Правила составления логических выражений

 
Дата и время записывается в формате: dd.mm.yyyy hh:mm:ss.zzz (dd – день, mm – месяц, yyyy – год, hh – часы, mm – минуты, ss – секунды, zzz - миллисекунды). Вы можете фильтровать столбец по времени вплоть до миллисекунд, а можете обрезать формат и фильтровать, например, только по дате (DD.MM.YYYY) или по дате и конкретной минуте (dd.mm.yyyy hh:mm).
 
Вместо классического синтаксиса операций сравнения A < B можете использовать короткую запись вида < B (оператор при этом может быть любой). Подразумевается, что левый операнд (A) всегда содержит данные из фильтруемого столбца. Такая запись неприменима для столбца со строками, т.к. для строк операторы сравнения не работают.
 
Еще один вариант короткой записи: запись только операнда без оператора сравнения. Этот вариант записи используется при фильтрации по точному значению. Результат фильтрации в таком случае зависит от типа данных в фильтруемом столбце:
Для столбца с числами такая запись соответствует сравнению на равенство, т.е. для фильтрации столбца по точному значению вы можете не указывать оператор = (равно) и записать просто значение, такая запись тоже будет правильной (Вместо "=12" можно записать "12").
Для столбца с текстом такая запись соответствует проверке на содержание конкретного слова, т.е. для фильтрации столбца по точному слову просто запишите нужное слово без каких-либо операторов. После фильтрации останутся все строки, содержащие указанное слово, в каком месте строки оно бы ни находилось (Вместо "*Авария*" можно записать "Авария").
Для столбца с временем такая запись заменяется на определенный интервал и уже в рамках этого интервала происходит выборка значений. Интервал, который будет использоваться, зависит от формата, в котором вы указали время:
 
Формат времени
Интервал
21.02.2018 10:50:06.123
>=21.02.2018 10:50:06.123 И <21.02.2018 10:50:06.124
Интервал, в пределах которого выполняется выборка значение, равен 1 миллисекунде
21.02.2018 10:50:06
Не указываем миллисекунды
>=21.02.2018 10:50:06 И <21.02.2018 10:50:07
Интервал, пределах которого выполняется выборка значений, равен 1 секунде
21.02.2018 10:50
Не указываем миллисекунды и секунды
>=21.02.2018 10:50 И <21.02.2018 10:51
Интервал, пределах которого выполняется выборка значений, равен 1 минуте
21.02.2018
Не указываем время
>=21.02.2018 00:00 И <22.02.2018 00:00
Интервал, пределах которого выполняется выборка значений, равен суткам
 
Если выражение получается сложным, используйте круглые скобки для группировки нескольких условий фильтра и расстановки приоритетов операций. Помните, что результат такого выражения вычисляется по обычным правилам алгебры логики: в первую очередь вычисляются выражения внутри скобок, затем операции отрицания (NOT, !=, <>), затем умножения (AND) и в последнюю очередь - сложение (OR).
 
Правила для столбцов с текстом:
Условия фильтрации для столбцов с текстом можно записывать без учета регистра.
Чтобы записать условие фильтрации, при котором столбец с текстом фильтруется по нескольким находящимся не рядом словам, используйте оператор AND (И, и, &). Вы можете не указывать оператор AND (И, и, &), а поставить пробел между словами, такая запись тоже будет правильной.
Чтобы записать условие фильтрации, при котором столбец с текстом фильтруется по неразрывной фразе, заключите нужную фразу в двойные кавычки. После фильтрации останутся все строки, содержащие целиком указанную фразу, в каком месте строки она бы ни находилась.
 
В языке Astra.Om экранируйте кавычки символом \. В языке JavaScript этого делать не нужно.
 

Примеры

 
//Вывод результата в текстовое поле:
filter: string = "условие фильтрации";
column: string = "идентификатор столбца";
if (!Alarms_1.SetAdvancedFilter(column, filter)) {
Text_3 = ("Фильтр: {" + filter + "} для столбца с идентификатором " + column + " не установлен");
}
else {
Text_3 = ("Фильтр: {" + filter + "} для столбца с идентификатором " + column + " установлен");
}
 
//Вывод результата в журнал времени исполнения:
if (!Alarms_1.SetAdvancedFilter("идентификатор", "условие фильтрации")) {
DebugTool_1.Log("Не удалось установить фильтр пользователя для идентификатор: условие фильтрации");
}
else {
DebugTool_1.Log("Фильтр пользователя для идентификатор: условие фильтрации");
}
 

Фильтрация по столбцу с текстом

 
По ключевому слову:
 
Отфильтровать таблицу сообщений по содержимому столбца Пользователь. Показать сообщения, содержащие текст «Operator_1»:
Alarms_1.SetAdvancedFilter("actor_id", "Operator_1");
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Показать сообщения, содержащие текст «выше» или «превышает»:
Alarms_1.SetAdvancedFilter("message", "выше ИЛИ превышает");
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Показать сообщения, содержащие текст «Failed» или «ниже» или «close»:
Alarms_1.SetAdvancedFilter("message", "Failed ИЛИ ниже ИЛИ close");
 
Отфильтровать таблицу сообщений по содержимому столбца Квитировано. Показать сообщения, содержащие текст «Да»:
Alarms_1.SetAdvancedFilter("ack", "Да");
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Выбрать сообщения, содержащие текст «по уровню» или «уровн». Среди полученных строк показать только те строки, которые содержат текст «ниже»:
Alarms_1.SetAdvancedFilter("message", "(\"\"по уровню\"\" или уровн) и ниже");
 
По нескольким словам:
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Показать сообщения, содержащие слова «выше», «аварийного» и «на»:
//Первый вариант.
Alarms_1.SetAdvancedFilter("message", "выше & аварийного & на");
 
//Второй вариант.
Alarms_1.SetAdvancedFilter("message", "выше аварийного на");
 
Отфильтровать таблицу сообщений по содержимому столбца Комментарий. Показать сообщения, содержащие текст «IGNATIEV» и «отправлено»:
//Первый вариант.
Alarms_1.SetAdvancedFilter("ack_comment", "IGNATIEV И отправлено");
 
//Второй вариант.
Alarms_1.SetAdvancedFilter("ack_comment", "IGNATIEV отправлено");
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Показать сообщения, содержащие фразу «выше верхнего»:
//язык OM
Alarms_1.SetAdvancedFilter("message", "\"\"выше верхнего\"\"");
 
//язык JavaScript
Alarms_1.SetAdvancedFilter("message", '""выше верхнего""');
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Выбрать сообщения, содержащие текст «ниже аварийного» или «опустилось» и среди полученных строк показать только те строки, которые содержат текст «датчик 1»:
//язык OM
Alarms_1.SetAdvancedFilter("message", "(\"\"ниже аварийного\"\" или опустилось) и \"\"датчик 1\"\"");
 
//язык JavaScript
Alarms_1.SetAdvancedFilter("message", '(""ниже аварийного"" или опустилось) и ""датчик 1""');
 
Исключение отдельных слов:
 
Отфильтровать таблицу сообщений по содержимому столбца Группа важности. Показать сообщения, не содержащие текст «inf»:
Alarms_1.SetAdvancedFilter("group", "NOT inf");
 
Отфильтровать таблицу сообщений по содержимому столбца Сообщение. Показать сообщения, не содержащие текст «уров», «предел» и «пункт25»:
//Первый вариант.
Alarms_1.SetAdvancedFilter("message", "НЕ(уров предел пункт25)");
 
//Второй вариант.
Alarms_1.SetAdvancedFilter("message", "НЕ уров и НЕ предел или НЕ пункт25");
 

Фильтрация по столбцу с числом

 
По точному значению:
 
Отфильтровать таблицу сообщений по содержимому столбца Важность. Показать сообщения о событиях, важность которых равна «660»:
//Первый вариант.
Alarms_1.SetAdvancedFilter("severity", "=660");
 
//Второй вариант.
Alarms_1.SetAdvancedFilter("severity", "660");
 
Отфильтровать таблицу сообщений по содержимому столбца Значение сигнала. Показать сообщения о событиях, содержащие значение «-58» или «59»:
Alarms_1.SetAdvancedFilter("value", "=-58 | =59");
 
По диапазону значений:
 
Отфильтровать таблицу сообщений по содержимому столбца Важность. Показать сообщения о событиях, важность которых больше или равна «9»:
Alarms_1.SetAdvancedFilter("severity", ">=9");
 
Отфильтровать таблицу сообщений по содержимому столбца Значение сигнала. Показать сообщения о событиях, важность которых больше или равна «40» и меньше «100»:
Alarms_1.SetAdvancedFilter("value", >=40 И <100);
 
Отфильтровать таблицу сообщений по содержимому столбца Важность. Показать сообщения о событиях с важностью от «1» до «300» или «1000»:
Alarms_1.SetAdvancedFilter("severity", "(>=1 AND <=300) OR =1000");
 
Отфильтровать таблицу сообщений по содержимому столбца Значение сигнала. Выбрать сообщения о событиях, содержащие значения в диапазоне от «5» до «80» и из них отбросить те, в которых значение равно «50»:
Alarms_1.SetAdvancedFilter("value", "!=50 и (>=5 и <80)");
 
Исключений отдельных значений:
 
Чтобы записать условие, при котором из столбца с числами исключатся определенные значения, используйте оператор !=, <> (не равно).
 
Отфильтровать  таблицу сообщений по содержимому столбца Важность. Показать все сообщения о событиях, кроме тех, важность которых равна «667»:
Alarms_1.SetAdvancedFilter("severity", "!=667");
 
Отфильтровать  таблицу сообщений по содержимому столбца Качество сигнала. Показать все сообщения о событиях, кроме тех, что содержат качество «0» или «216».
//Первый вариант.
Alarms_1.SetAdvancedFilter("quality", "<>(216 or 0)");
 
//Второй вариант.
Alarms_1.SetAdvancedFilter("quality", "<>216 and <>0");
 

Фильтрация по столбцу с временем

 
По точному значению:
 
Отфильтровать таблицу сообщений по содержимому столбца Время срабатывания. Показать сообщения о событиях, возникших «26.01.2022»:
Alarms_1.SetAdvancedFilter("active_time", "26.01.2022");
 
Отфильтровать таблицу сообщений по содержимому столбца Время срабатывания. Показать сообщения о событиях, возникших «28.11.2022 10:34:03» или «16.11.2022»:
Alarms_1.SetAdvancedFilter("active_time", "28.11.2022 10:34:03 ИЛИ 16.11.2022");
 
По интервалу:
 
Отфильтровать таблицу сообщений по содержимому столбца Время деактивации. Показать сообщения о событиях, возникших раньше, чем «16.08.2022 09:20:37»:
Alarms_1.SetAdvancedFilter("deactive_time", "<16.08.2022 09:20:37");
 
Отфильтровать  таблицу сообщений по содержимому столбца Время генерации. Показать сообщения о событиях, возникших в промежутке между «25.01.2022 11:50:00» и «26.01.2022 15:50:00»:
Alarms_1.SetAdvancedFilter("time", ">=25.01.2022 11:50:00 AND <=26.01.2022 15:50:00");
 
Отфильтровать  таблицу сообщений по содержимому столбца Время генерации. Показать сообщения о событиях, возникших в промежутке между «28.11.2022 10:33:00» и «28.11.2022 10:35:00» или между «16.11.2022 11:15:00» и «16.11.2022 11:15:33»:
//Первый вариант. Добавляем скобки, выделяющие правильные диапазоны времени.
Alarms_1.SetAdvancedFilter("time", "((>28.11.2022 10:33:00 AND <28.11.2022 10:35:00) OR (>16.11.2022 11:15:00 AND <16.11.2022 11:15:33))");
 
//Второй вариант без скобок, выделяющих диапазоны.
В таком случае, с учетом приоритетов операций, результат будет тот же. Alarms_1.SetAdvancedFilter("time", "(>28.11.2022 10:33:00 AND <28.11.2022 10:35:00 OR >16.11.2022 11:15:00 AND <16.11.2022 11:15:33)");
 
Отфильтровать таблицу сообщений по содержимому столбца Время квитирования. Показать сообщения о событиях, возникших раньше, чем «01.04.2022» или позже, чем «01.01.2023»:
Alarms_1.SetAdvancedFilter("ack_time", "<=01.04.2022 или >01.01.2023");
 

Фильтрация по нескольким столбцам одновременно

 
Чтобы записать условие фильтрации по нескольким столбцам, вызовите функцию SetAdvancedFilter для каждого столбца в отдельности и запишите эти строки подряд.
 
Отфильтровать таблицу сообщений по столбцам Пользователь и Квитировано. Показать все сообщения о событиях, квитированные пользователем «User_1»:
DebugTool_1.Log(Alarms_1.SetAdvancedFilter("actor_id","User_1"));
DebugTool_1.Log(Alarms_1.SetAdvancedFilter("ack","Да"));
 
Отфильтровать таблицу сообщений по столбцам Комментарий, Пользователь Значение сигнала. Показать все сообщения о событиях, квитированные пользователем «User 1» и содержащие значение сигнала «50» и текст «Принято» в комментарии квитирования:
DebugTool_1.Log(Alarms_1.SetAdvancedFilter("actor_id","\"\"User 1\"\""));
DebugTool_1.Log(Alarms_1.SetAdvancedFilter("ack_comment","Принято"));
DebugTool_1.Log(Alarms_1.SetAdvancedFilter("value","50"));
 

Отключение фильтрации по столбцу

 
Чтобы отключить фильтрацию по какому-либо столбцу, укажите идентификатор столбца и пустое условие фильтрации.
 
Отключить фильтрацию по столбцу Значение сигнала.
Alarms_1.SetAdvancedFilter("value","");