CUBA:在框架中动态注入数据源

CUBA : injecting a datasource in a frame dynamically

与问题

相关

我有:
- 客户实体(姓名、电子邮件)
- 公司扩展客户(行业)
- Person extends Customer (firstName, lastName)

我想设计以下画面:
- CustomerEditFrame,未定义数据源
- CompanyEditScreen 嵌入 CustomerEditFrame
- PersonEditScreen 嵌入 CustomerEditFrame

然后我需要定义框架的数据源:
- 在CompanyEditScreen中,需要为frame定义一个companyDs
- 在 PersonEditScreen 中,personDs 需要

我看到的选项:
1) 在嵌入框架的所有屏幕中,使用相同的数据源名称(例如 customerDs),以便可以将其注入框架:令人困惑,如果我有公司数据源,我想将其称为 companyDs 而不是 customerDs
2) 从框架中,调用 getDsContext().get(ds_id) :不行,因为 ds 的名称改变了
3) 从框架中,迭代 getDsContext().getAll() 并在 Customer class 或 subclass 上查找数据源并确保只有一个:不安全,不确定获取正确的
4) 从屏幕,例如 CompanyEditScreen,在 init() 方法中将 companyDs 分配给框架:本身没有这样做的方法

已查看所有示例(包括示例代码)。更接近的案例是销售示例的 OrderEdit 屏幕,它根据操作类型动态打开一个框架。它不包括继承,但使用的解决方案是基于数据源名称(第一个选项,我在处理子项时感到困惑 classes)。

我该怎么办?

我建议将实体实例传递给框架,而不是传递或引用整个数据源,如 所述。

当提交包含相同实例(一个在屏幕中,一个在嵌套框架中)的两个数据源的屏幕时,不会有任何重复,因为屏幕将所有脏数据源的数据收集到一个单一的 Set.