UserEvents
UserEvents — системный модуль, дающий действию, выполняющемуся на открытой форме, программный доступ на чтение и запись к фильтрам и порядкам формы по имени группы объектов и имени свойства. Подключается через REQUIRE UserEvents. Два публичных действия обращаются к текущей структуре фильтров группы объектов, меняют значение фильтра по одному свойству и записывают её обратно, так что действие может задать или прочитать фильтр без обращения пользователя к диалогу фильтрации.
Локальные буферы
Модуль объявляет локальные буферы, хранящие копию порядков и фильтров группы объектов на время правки её действием, вместе с двумя формами, которые переносят эту копию между буферами и работающей формой.
| Свойство | Что хранит |
|---|---|
orders[] | порядки группы объектов как JSON |
filters[] | фильтры группы объектов как JSON |
filterGroups[] | число групп фильтров как INTEGER |
filtersProperty[] | прочитанное значение фильтра по свойству как STRING |
property[INTEGER] / desc[INTEGER] | строка порядка: имя свойства и признак убывания, по номеру строки |
property[INTEGER] / compare[INTEGER] / negation[INTEGER] / or[INTEGER] / value[INTEGER] | строка фильтра: имя свойства, сравнение, признак отрицания, признак OR и значение фильтра, по номеру строки |
Форма orders показывает строки порядка (один объект INTEGER со свойствами property и desc), форма filters — строки фильтров (один объект INTEGER со свойствами property, negation, compare, value, or). Каждая форма оставляет только строки с заполненным property. Эти формы и есть промежуточные структуры, из которых читают и в которые пишут шаги импорта и экспорта.
Установка фильтра
filterProperty[STRING groupObject, STRING property, STRING value] устанавливает на указанной группе объектов фильтр так, чтобы указанное свойство было отфильтровано по заданному значению: добавляет фильтр, если свойство ещё не отфильтровано, и заменяет значение, если уже отфильтровано. Выполняется как обход промежуточной структуры:
- чтение текущих фильтров группы объектов —
EVAL ACTION 'FILTERS ' + groupObject + ';'наполняет буферы формыfiltersиз текущих фильтров формы по этой группе объектов; - импорт их в промежуточную структуру через
IMPORT filters FROM filters()— по строке на каждый текущий фильтр; - правка структуры — для строки, где
propertyравно заданному свойству, запись нового значения вvalue[INTEGER]; если такой строки нет, добавление новой строки (с индексом на единицу больше наибольшей заполненной строки или0, если заполненных нет) с именем свойства и значением; - запись структуры обратно через
EXPORT filters TO filters— повторное наполнение формыfiltersиз изменённых строк; - повторное применение —
EVAL ACTION 'FILTER ' + groupObject + ';'применяет подготовленные фильтры обратно к группе объектов на работающей форме.
Чтение фильтра
filtersProperty[STRING groupObject, STRING property] читает значение фильтра, применённого в данный момент к указанному свойству группы объектов. Выполняет шаги чтения и импорта из обхода — EVAL ACTION 'FILTERS ' + groupObject + ';', затем IMPORT filters FROM filters() — и для строки, где property равно заданному свойству, записывает значение value[INTEGER] этой строки в filtersProperty[], откуда вызывающий читает результат.
Язык
- Оператор
EVAL— запускает действие формыFILTERS/FILTER, читающее и заново применяющее фильтры группы объектов. - Оператор
IMPORT— читает формуfiltersв промежуточную структуру. - Оператор
EXPORT— пишет промежуточную структуру обратно в формуfilters.
Связано
System modules— общий список модулей платформы.Выполнение программного кода (EVAL)— выполнение сгенерированного кода lsFusion, используемое здесь для чтения и повторного применения фильтров формы.Формы— что такое форма, её группы объектов, фильтры и порядки.Reflection— метаданные о формах, группах объектов и свойствах, к которым здесь обращаются по имени.