3.5.5.2. Стандартные действия
Стандартные действия, предлагаемые платформой, предназначены для решения типовых задач, таких как вызов экрана редактирования для сущности, выбранной в таблице. Стандартные действия объявляются в XML-дескрипторе экрана с указанием их типа в атрибуте type
.
Существует два вида стандартных действий:
-
Действия с коллекцией сущностей, отображаемой в таблице или дереве. Это CreateAction, EditAction, ViewAction, RemoveAction, AddAction, ExcludeAction, RefreshAction, ExcelAction, BulkEditAction.
Когда действие с коллекцией добавлено в таблицу или дерево, оно может быть вызвано из контекстного меню данного компонента или с помощью предустановленной горячей клавиши. Обычно для вызова действия используется также кнопка, добавленная в панель кнопок.
<groupTable id="customersTable"> <actions> <action id="create" type="create"/> ... <buttonsPanel> <button id="createBtn" action="customersTable.create"/> ...
-
Действия поля выбора экземпляра сущности. Это LookupAction, OpenAction, OpenCompositionAction, ClearAction.
Когда такое действие добавляется в компонент, оно автоматически отображается кнопкой внутри поля.
<pickerField id="customerField"> <actions> <action id="lookup" type="picker_lookup"/> ...
Каждое стандартное действие реализуется классом, аннотированным @ActionType("<some_type>")
. Класс задает свойства и поведение действия по умолчанию.
Для переопределения общих свойств действий можно задать XML-атрибуты элемента action
, такие как caption
, icon
, shortcut
и др., например:
<action id="create" type="create" caption="Create customer" icon="USER_PLUS"/>
Начиная с CUBA 7.2 стандартные действия имеют дополнительные свойства, которые можно устанавливать в XML, или используя сеттеры в Java. В XML дополнительные свойства конфигурируются во вложенном элементе <properties>
, где каждый элемент <property>
соответствует сеттеру, имеющемуся в классе данного действия:
<action id="create" type="create">
<properties>
<property name="openMode" value="DIALOG"/>
<property name="screenClass" value="com.company.demo.web.CustomerEdit"/>
</properties>
</action>
То же самое можно сделать в контроллере на Java:
@Named("customersTable.create")
private CreateAction createAction;
@Subscribe
public void onInit(InitEvent event) {
createAction.setOpenMode(OpenMode.DIALOG);
createAction.setScreenClass(CustomerEdit.class);
}
Если сеттер принимает функциональный интерфейс, то в контроллере можно создать соответствующий метод-обработчик. Например, CreateAction
имеет метод setAfterCommitHandler(Consumer)
, который используется для установки обработчика, вызываемого после коммита созданной сущности. Тогда обработчик можно задать следующим образом:
@Install(to = "customersTable.create", subject = "afterCommitHandler")
protected void customersTableCreateAfterCommitHandler(Customer entity) {
System.out.println("Created " + entity);
}
Во всех действиях имеется обработчик enabledRule
, который позволяет управлять состоянием "enabled" действия в зависимости от некоторых условий. В примере ниже данный обработчик запрещает RemoveAction для некоторых сущностей:
@Inject
private GroupTable<Customer> customersTable;
@Install(to = "customersTable.remove", subject = "enabledRule")
private boolean customersTableRemoveEnabledRule() {
Set<Customer> customers = customersTable.getSelected();
return canBeRemoved(customers);
}
В следующих разделах приведено детальное описание действий, предоставляемых фреймворком. В разделе Собственные типы действий объясняется, как создать собственные типы действий или переопределить существующие.