MassChange — различия между версиями
Lan (обсуждение | вклад) (Новая страница: «Класс: {{Class|com.beanexplorer.enterprise.metadata.model.MassChange}} '''MassChange''' (массовое изменение) — возможность п…») |
Lan (обсуждение | вклад) (Метка: visualeditor) |
||
Строка 56: | Строка 56: | ||
Entity:matches(#users,#persons) Query | Entity:matches(#users,#persons) Query | ||
:Выберет все представления из сущностей с именами users и persons. | :Выберет все представления из сущностей с именами users и persons. | ||
+ | |||
+ | == Примеры == |
Версия 16:27, 2 сентября 2014
Класс: MassChange
MassChange (массовое изменение) — возможность применить однотипное изменение к различным элементам дерева проекта по условию. В делеве проекта хранятся в коллекции Mass changes в модуле приложения. На файловой системе хранятся по умолчанию в src/massChanges.yaml. Пример:
- select: Entity#messages Query roles: []
Данное массовое изменение выбирает все представления сущности messages и устанавливает им пустой список ролей.
Каждый элемент списка содержит селектор (select) и определение элемента. Для всех элементов, которые соответствуют селектору, производится переопределение указанных свойств точно так же, как в приложении кастомизируется элемент из модуля. В принципе селектор может соответствовать элементам разного типа, в некоторых случаях это сработает. Например:
- select: Entity#blahblah Query, Entity#blahblah Operation roles: []
Удалит все роли у всех представлений и операций сущности blahblah. Но лучше разносить подобное на отдельные селекторы.
Селектор пока может выбирать Query, Operation или Entity. Если селектор выбрал что-то другое, будет ошибка.
Селекторы
Синтаксис селекторов похож на CSS. Спецсимволы обрабатываются в соответствии со стандартом CSS. Поддерживаются следующие возможности:
- Выбор по классу (аналог CSS type selector). Указывается просто название типа элементов. Пока поддерживаются Module, Entity, Query, Operation. Например:
Operation
- Такой селектор просто выберет все представления.
- Выбор по атрибуту (аналог CSS attribute value selectors). Поддерживаются формы
[attr=val], [attr^=val], [attr$=val], [attr*=val]
для точного совпадения значения, префикса, суффикса и подстроки. Список доступных атрибутов зависит от типа данных и обычно похож на список полей при сериализации в yaml. Например:
[name="messages"]
- Такой селектор выберет все элементы с именем messages.
- Выбор имени. Для сокращения предыдущий селектор можно написать так:
#messages
- Но при этом значение уже должно удовлетворять свойствам идентификатора, а не строки (например, нужно экранировать пробелы).
- Выбор типа. У Entity, Query и Operation бывает тип. Его можно выбрать через
[type="..."]
, но короче через точку:
.table
- Выберет все элементы с типом table. Доступные типы:
- Для Entity: table, dictionary, collection, genericCollection, metadata
- Для Query: 1D, 1D_unknown, 2D, static, custom, container, javascript
- Для Operation: java, sql, javafunction, js (=javascript), jsserver (=javascriptserver), dotnet, javadotnet
- Сложный селектор (CSS: compound selector). Несколько правил, написанных слитно. Выбирается элемент, удовлетворяющий всем правилам. Например:
Entity#messages
- Тут два правила: выбрать элементы по классу Entity (то есть сущности) и выбрать элементы с именем messages. В результате будет выбрана сущность с именем messages.
- Комбинатор-потомок (CSS: descendant combinator). Если перечислить несколько селекторов через пробел, будут выбраны элементы, удовлетворяющие последнему селектору, у которых есть родитель (не обязательно непосредственный), удовлетворяющий предпоследнему, и т. д. Например:
Entity#messages Query
- Выберет все представления сущности с именем messages. Другие CSS-комбинаторы (>, +, ~) не поддерживаются.
- Список селекторов (CSS: selector list). Можно перечислить через запятую несколько селекторов, тогда элемент будет выбран, если он подходит под любой из селекторов. Например:
Query, Operation
- Выберет все представления и все операции.
- Псевдокласс :not (CSS: negation). Выберет элементы, которые не удовлетворяют заданному в скобках селектору. Например:
Entity:not(.table)
- Выберет все сущности, тип которых не table.
- Псевдокласс :matches (CSS: matches). Выберет элементы, которые удовлетворяют хотя бы одному из заданных в скобках селекторов. Например:
Entity:matches(#users,#persons) Query
- Выберет все представления из сущностей с именами users и persons.