定制项目模块开发
代码地址:trantor-demo-custom
本文基于 制品项目模块开发,在原模块基础上进行模块二开,由于模块定义,运行和访问机制不变,因此本文仅描述定制下模块二开的资源覆盖定义写法。
用户常见的覆盖资源是行为,视图,因此本文重点会着重讲述这两个资源如何实现覆盖,其他类型的资源覆盖原理与之类似。
Trantor为什么能二开
在trantor下,每个资源都有唯一对应的resourceKey,针对原始模块对应的资源key,只要在二开模块增加相同的资源key,然后使二开的资源key生效,而原模块的资源key失效即可,详情见:Trantor为什么能二开。
新建定制项目
定制项目的新建依赖制品一个制品版本,且需要制品版本为稳定版本,因此先设置依赖制品版本为稳定版本(设置为稳定版后,资源不可修改)。

模块定义
定义trantor.yml文件
二开模块可以上报到制品项目,也可以上报到定制项目,具体看项目要求。
如果需要上报到定制项目,则模块key需要以项目key开头,如:定制项目key为trantor_custom,则模块名需要以trantor_custom开头,本文示例模块名为:trantor_custom_demo。
trantor.yml 编写详情见:模块定义
!!!注意:每个模块定义的的packageName都应该唯一。
定义application.yml
定义demo-server下的application.yml,将依赖的terminus_trantor_demo加入内嵌模块,内嵌模块详情见:模块->内嵌模块。
spring: profiles: include: > trantortrantor: # 模型元信息定义类 mainModule: trantor_custom_demo embedModules: # trantor.yml 中定义的模块 key - terminus_trantor_demo enabledModuleKeys: terminus_trantor_demo定义扩展模型
!!!注意:扩展模型仍使用的是原模型,如下Classes模型,modelKey的仍是terminus_trantor_demo_Classes,不存在ClassesExt模型。
对依赖的terminus_trantor_demo中的Classes模型进行二开,新增一个headTeacherName扩展字段。在发布模块之后,就可以从数据库中看出原先的terminus_trantor_demo__classes表新增了headTeacherName字段。
ClassesExt 扩展模型定义如下:
@Data@ExtendTModel(Classes.class)public class ClassesExt extends Classes { private static final long serialVersionUID = 2L;
@TModelField(name = "二开字段(班主任姓名)") String headTeacherName;}定义扩展字典项
可以使用 @ExtendTDict 注解扩展产品中字典的字典项,如:
@ExtendTDictpublic class SexEnumExt extends SexEnum {
@Label("保密") public static final Integer Secrecy = 2;
}用户扩展时需要注意:
- 和扩展模型字段不同,扩展字典项时继承原本的字典类是必须的,只有明确继承才能知道是要扩展哪个字典的字典项。
- 多个扩展字典类包含同值字典项时,启动会报错。
覆盖视图
如果想覆盖原视图,则需要在view-mainfest.json中定义相同的forModel+key,然后在运行环境中,扩展使覆盖的视图生效。
{ "key": "List", "name": "班级列表覆盖", "type": "Form", "forModel": "terminus_trantor_demo_Classes", "template": "classes/classes-list-view.xml", "isDefault": false }
覆盖action
ViewAction覆盖
如果想覆盖原action,则需要在*-actions.json中定义相同的forModel+key,然后在运行环境中,扩展使覆盖的视图生效。
- 比如我们需要去覆盖Classes模型的编辑视图,增加二开字段,首先定义视图,使用的依然是terminus_trantor_demo_Classes_toEdit。
{ "key": "toEdit", "forModel": "terminus_trantor_demo_Classes", "extra": { "dataSource": "Empty", "target": "terminus_trantor_demo_Classes_Edit", "openViewType": "Self" } }
ServerAction重写
ServerAction是否重写分两种情况:
- 使用原逻辑,对扩展字段不做校验或其他处理的情况下,可依旧使用原ServerAction。
- 增加了扩展字段校验或其他处理的情况下,需要使用自定义ServerAction。
2. 配置定制项目应用(制品请忽略)
在创建定制项目时,需要依赖某个制品版本,用户可以通过安装应用/解决方案的形式将制品中的应用/解决方案资源复制到当前定制项目里。
同时,在安装应用/解决方案后,应用/解决方案依赖的模块也会引入到当前定制项目,可以通过模块-》引入模块 查看当前模块的引入。
