RelatedAction
RelatedAction
– это действие с коллекцией, предназначенное для открытия экрана браузера со списком связанных сущностей. Связанные сущности отбираются с учетом пользовательских разрешений для сущностей, атрибутов сущностей и экранов.
Экран браузера со списком связанных сущностей должен содержать компонент Filter. |
Действие реализовано классом io.jmix.ui.action.list.RelatedAction
и объявляется в XML с помощью атрибута type="related"
. Общие свойства действий можно конфигурировать с помощью атрибутов элемента action
, подробнее см. раздел Декларативные действия. Ниже рассматриваются параметры, специфичные для класса RelatedAction
.
Параметры
Следующие параметры можно установить и в XML, и в Java:
-
openMode
- режим открытия экрана, задаваемый значением перечисленияOpenMode
:NEW_TAB
,DIALOG
, и т.д. По умолчанию экран открывается в режимеTHIS_TAB
. -
screenId
- строковый идентификатор экрана. По умолчанию используется экран, аннотированный@PrimaryEditorScreen
, или имеющий идентификатор вида<entity_name>.browse
, напримерdemo_Customer.browse
. -
screenClass
- класс Java экрана. Данный параметр имеет более высокий приоритет,screenId
. -
property
- свойство, из которого нужно отобразить связанные сущности. -
configurationName
- заголовок, который будет присвоен фильтру в открывшемся экране.
Например, если необходимо открыть определенный экран в режиме диалога, действие можно сконфигурировать в XML следующим образом:
<action id="related" type="related">
<properties>
<property name="property" value="favouriteBrands"/>
<property name="openMode" value="DIALOG"/>
</properties>
</action>
В качестве альтернативы, действие можно инжектировать в контроллер экрана и сконфигурировать, используя сеттеры:
@Named("customersTable.related")
private RelatedAction relatedAction;
@Subscribe
public void onInit(InitEvent event) {
relatedAction.setOpenMode(OpenMode.DIALOG);
relatedAction.setProperty("favoriteBrands");
}
Обработчики
Далее рассматриваются параметры, которые можно сконфигурировать только программно в Java. Для генерации корректно аннотированных методов для этих параметров используйте Studio.
screenOptionsSupplier
Это обработчик, возвращающий объект ScreenOptions
для передачи в открываемый экран выбора. Например:
@Install(to = "customersTable.related", subject = "screenOptionsSupplier")
private ScreenOptions customersTableRelatedScreenOptionsSupplier() {
return new MapScreenOptions(ParamsMap.of("someParameter", 10));
}
Возвращаемый объект ScreenOptions
будет доступен в InitEvent
открываемого экрана.
screenConfigurer
Это обработчик, принимающий экран для его конфигурирования перед открытием. Например:
@Install(to = "customersTable.related", subject = "screenConfigurer")
private void customersTableRelatedScreenConfigurer(Screen screen) {
((BrandBrowse) screen).setSomeParameter(10);
}
Обратите внимание, что конфигуратор экрана вступает в действие, когда экран уже инициализирован, но еще не показан, то есть после InitEvent
и AfterInitEvent
, и до BeforeShowEvent
.
afterCloseHandler
Это обработчик, вызываемый после закрытия экрана. Принимает AfterCloseEvent
. Например:
@Install(to = "customersTable.related", subject = "afterCloseHandler")
private void customersTableRelatedAfterCloseHandler(AfterCloseEvent afterCloseEvent) {
System.out.println("Closed with " + afterCloseEvent.getCloseAction());
}
Using ActionPerformedEvent
Можно также подписаться на ActionPerformedEvent
, и вместо вызова метода execute()
действия, использовать для открытия экрана выбора ScreenBuilders
API напрямую. Например:
@Subscribe("customersTable.related")
public void onCustomersTableRelated(Action.ActionPerformedEvent event) {
RelatedEntitiesBuilder builder = relatedEntitiesSupport.builder(this);
Screen brandBrowser = builder
.withMetaClass(metadata.getClass(Customer.class))
.withProperty("favoriteBrands")
.withSelectedEntities(customersTable.getSelected())
.withConfigurationName("See favourite brands")
.build();
brandBrowser.show();
}