3.5.2.1.36. 关联实体组件

在线示例

API 文档

RelatedEntities 组件是一个弹窗按钮,其中包含了与表格中显示的实体相关的实体类的下拉列表。当用户选择了所需的实体类,就会打开一个新的浏览界面,其中包含与初始表格中选择的实体实例关联的实体实例。

gui relatedEntities

该组件的 XML 名称: relatedEntities

选中的关联实体受用户的实体、实体属性和界面权限机制的控制。

默认情况下,下拉列表中所选类的浏览界面使用约定的格式( {entity_name}.browse{entity_name}.lookup)定义。当然,也可以在组件中显式自定义浏览界面。

在新的浏览界面中会动态创建过滤器,这个过滤器只选择与选中实体相关的记录。

  1. <table id="invoiceTable"
  2. multiselect="true"
  3. width="100%">
  4. <actions>
  5. <action id="create"/>
  6. <action id="edit"/>
  7. <action id="remove"/>
  8. </actions>
  9. <buttonsPanel id="buttonsPanel">
  10. <button id="createBtn"
  11. action="invoiceTable.create"/>
  12. <button id="editBtn"
  13. action="invoiceTable.edit"/>
  14. <button id="removeBtn"
  15. action="invoiceTable.remove"/>
  16. <relatedEntities for="invoiceTable"
  17. openType="NEW_TAB">
  18. <property name="invoiceItems"
  19. screen="sales$InvoiceItem.lookup"
  20. filterCaption="msg://invoiceItems"/>
  21. </relatedEntities>
  22. </buttonsPanel>
  23. . . .
  24. </table>

for 属性是必须的。使用这个属性指定要查看其关联实体的表格的标识符。

openType="NEW_TAB" 属性将查找窗口的打开模式设置为新标签页。默认情况下,实体浏览界面在当前标签页中打开。

property 元素允许显式定义显示在下拉列表中的相关实体。

property 元素的属性:

  • name – 当前实体的属性名称,这个属性是一个引用类型的属性,引用了关联实体。
  • screen – 要使用的浏览界面的标识符。
  • filterCaption – 动态生成的过滤器的标题。

可以使用 exclude 属性从下拉列表中排除一些关联实体。该属性的值是匹配要排除的引用属性的正则表达。

gui relatedEntitiesTable

平台提供了一个不使用 RelatedEntities 组件就可以打开关联实体界面的 API:RelatedEntitiesAPI 接口及其实现 RelatedEntitiesBean 。逻辑是在 openRelatedScreen() 方法定义的,该方法可接受三个参数:关系一侧的实体集合、该集合中单个实体的 MetaClass 、要查找其关联实体的字段。

  1. <button id="related"
  2. caption="Related customer"/>
  1. @UiController("sales_Order.browse")
  2. @UiDescriptor("order-browse.xml")
  3. @LookupComponent("ordersTable")
  4. @LoadDataBeforeShow
  5. public class OrderBrowse extends StandardLookup<Order> {
  6. @Inject
  7. private RelatedEntitiesAPI relatedEntitiesAPI;
  8. @Inject
  9. private GroupTable<Order> ordersTable;
  10. @Subscribe("related")
  11. protected void onRelatedClick(Button.ClickEvent event) {
  12. relatedEntitiesAPI.openRelatedScreen(ordersTable.getSelected(), Order.class, "customer");
  13. }
  14. }

默认情况下,将打开标准实体浏览界面。可以使用 RelatedScreenDescriptor 参数使该方法打开另一个界面或使用其它参数打开界面。RelatedScreenDescriptor 是一个 POJO,可以存储界面标识符(String)、打开类型(WindowManager.OpenType)、过滤器标题(String)和界面参数(Map <String,Object>)。

  1. relatedEntitiesAPI.openRelatedScreen(ordersTable.getSelected(),
  2. Order.class, "customer",
  3. 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