3.5.2.1.36. 关联实体组件
RelatedEntities
组件是一个弹窗按钮,其中包含了与表格中显示的实体相关的实体类的下拉列表。当用户选择了所需的实体类,就会打开一个新的浏览界面,其中包含与初始表格中选择的实体实例关联的实体实例。
该组件的 XML 名称: relatedEntities
选中的关联实体受用户的实体、实体属性和界面权限机制的控制。
默认情况下,下拉列表中所选类的浏览界面使用约定的格式( {entity_name}.browse
、 {entity_name}.lookup
)定义。当然,也可以在组件中显式自定义浏览界面。
在新的浏览界面中会动态创建过滤器,这个过滤器只选择与选中实体相关的记录。
<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
属性从下拉列表中排除一些关联实体。该属性的值是匹配要排除的引用属性的正则表达。
平台提供了一个不使用 RelatedEntities
组件就可以打开关联实体界面的 API: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
是一个 POJO,可以存储界面标识符(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 - htmlSanitizerEnabled - icon - id - openType - stylename - tabIndex - visible - width
- property 的属性
-
caption - filterCaption - name - screen