1.ManyToOne功能增强

1.ManyToOne不需要填写依赖和允许跨App安装

  1. 如果是模型的ManyToOne依赖,app.json不需要填写应用依赖
  2. 如果2个APP不存在继承扩展,只存在调用关系或者模型的many2one引用,可以不安装在一起
  3. 注意:如果模型之前存在继承扩展关系,必须安装在一起

1.@ManyToOne 指定targetModel的格式为 appName.modelName

@Model
public class TestLog extends BaseModel {
   
    @ManyToOne(targetModel = "newSdkApp.TestOrg")// Many2one跨app安装,格式为:其他app的名字.模型名
    @JoinColumn(name = "org_code")
    private Map<String, Object> testOrg;

}

2.如果需要再ManyToOne方添加tab页显示另外一个app的数据,需要再tabs的body里面指定 "app": "newSdkAppOthers"

"tabs": [
	{
		"body": {
			"columns": [
				{
					"label": "备注",
					"name": "remark"
				},
				{
					"label": "创建时间",
					"name": "createDate"
				}
			],
			"app": "newSdkAppOthers",
			"field": "testLogs",
			"type": "grid"
		},
		"header": "日志列表",
		"tbar": []
	}
]

2.ManyToOne指定任意的显示字段

之前的ManyToOne默认只能是 displayForModel字段,现在已经修改成支持任意字段的显示

通过注解displayFormat指定任意显示的字段(字段):

指定任意字段:

@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="orgCode")
@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="${orgCode}")

指定多个字段格式化输出:

@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="${name}-${orgCode}")

3.ManyToOne关联非ID字段,比如关联code字段

之前的ManyToOne默认只能是关联ID字段,现在可以关联code等非ID字段 示例

通过注解referencedProperty指定任意字段:

 @ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL})
  @JoinColumn(name = "org_id", referencedProperty = "orgCode")
  private TestOrg org;
  
  //引擎内置的base app的模型可以不指定app
  @ManyToOne(displayName = "组织", targetModel = "rbac_organization") 
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> organization;
  
  //如果明确知道是跨app安装,需要指定app.modelname,
  @ManyToOne(displayName = "组织", targetModel = "mbm-main.res_enterprise")
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> enterprise;