3.5.2.1.36. RelatedEntities
RelatedEntities
- компонент в виде кнопки с выпадающим списком, при нажатии показывающим список классов, связанных с сущностью, экземпляры которой отображаются в таблице. Пользователь выбирает интересующий его класс сущности, после чего открывается новый браузер с экземплярами данной сущности, связанными с выбранными экземплярами в начальной таблице.
XML-имя компонента: relatedEntities
При отборе связанных сущностей для отображения учитываются разрешения пользователя на открытие экранов, чтение сущностей и чтение атрибутов.
По умолчанию для выбранного в списке класса сущности открывается браузер сущности, определенный по соглашениям ({entity_name}.browse
, {entity_name}.lookup
). Опционально, экран можно явно задать в компоненте.
В открытом браузере динамически создается фильтр, который выбирает связанные с выбранными сущностями записи.
Пример описания компонента в XML-дескрипторе экрана:
<table id="invoiceTable"
multiselect="true"
width="100%">
<actions>
<action id="create"/>
<action id="edit"/>
<action id="remove"/>
</actions>
<buttonsPanel id="buttonsPanel">
<button id="createBtn"
action="invoiceTable.create"/>
<button id="editBtn"
action="invoiceTable.edit"/>
<button id="removeBtn"
action="invoiceTable.remove"/>
<relatedEntities for="invoiceTable"
openType="NEW_TAB">
<property name="invoiceItems"
screen="sales$InvoiceItem.lookup"
filterCaption="msg://invoiceItems"/>
</relatedEntities>
</buttonsPanel>
. . .
</table>
Атрибут for
является обязательным. В нем указывается идентификатор таблицы.
Атрибут openType="NEW_TAB"
устанавливает режим открытия браузера (новая вкладка). По умолчанию браузер открывается в текущей вкладке.
Элемент property
позволяет явно задать связанную сущность, которая будет отображаться в выпадающем списке.
Атрибуты property
:
-
name
- имя атрибута текущей сущности, ссылающегося на связанную сущность
-
screen
- идентификатор браузера, открывающегося при выборе сущности в списке
-
filterCaption
- имя динамически формируемого фильтра
Атрибут exclude
позволяет исключить определенные связанные сущности из числа отображаемых. В качестве значения указывается регулярное выражение, отбирающее ссылочные атрибуты текущей сущности для исключения.
В платформе есть API для открытия экранов связанных сущностей без использования компонента RelatedEntities
: интерфейс RelatedEntitiesAPI
и его реализация RelatedEntitiesBean
. Логика задаётся методом openRelatedScreen()
, который принимает коллекцию сущностей с одной стороны отношения, MetaClass
отдельной сущности из этой коллекции и поле, являющееся ссылкой на связанные сущности.
<button id="related"
caption="Related customer"/>
@UiController("sales_Order.browse")
@UiDescriptor("order-browse.xml")
@LookupComponent("ordersTable")
@LoadDataBeforeShow
public class OrderBrowse extends StandardLookup<Order> {
@Inject
private RelatedEntitiesAPI relatedEntitiesAPI;
@Inject
private GroupTable<Order> ordersTable;
@Subscribe("related")
protected void onRelatedClick(Button.ClickEvent event) {
relatedEntitiesAPI.openRelatedScreen(ordersTable.getSelected(), Order.class, "customer");
}
}
По умолчанию метод открывает стандартный экран просмотра списка. Дополнительно можно указать параметр RelatedScreenDescriptor
, если требуется открыть экран, отличный от стандартного, или открыть его с параметрами. RelatedScreenDescriptor
- это простой Java-объект, хранящий идентификатор экрана (String
), тип его открытия (WindowManager.OpenType
), заголовок фильтра (String
) и параметры экрана (Map<String, Object>
).
relatedEntitiesAPI.openRelatedScreen(ordersTable.getSelected(),
Order.class, "customer",
new RelatedEntitiesAPI.RelatedScreenDescriptor("sales$Customer.lookup", WindowManager.OpenType.DIALOG));
- Атрибуты relatedEntities
-
align - caption - captionAsHtml - css - description - descriptionAsHtml - enable - exclude - box.expandRatio - for - icon - id - openType - stylename - tabIndex - visible - width
- Атрибуты property
-
caption - filterCaption - name - screen