学习目标:
实现一个参照
学习内容:
1 参照简介
参照,即对其它实体信息的参考和对照。YonBIP高级版参照的实质:前端JS:通过配置属性控制参照的界面显示后端java:拼接查询参照数据的具体sql
2 参照分类
参照主要分为以下三种:
- 树形参照
- 表型参照
后端java类需继承DefaultGridRefAction,前端js配置中需加入ColumnConfig的配置一次请求。
- 树表型参照
实际上是树形参照和表形参照的集合。两次请求,一次请求走树形参照action,一次请求走表形参照action。
3 YonBIP高级版 参照实现原理
3.1 往bd_refinfo表里插入一条数据,内容参考已有数据。
往bd_refinfo里插入一条参照数据。 refclass字段代表原NC参照,若只加YonBIP高级版参照此处可以为空;refpath字段代表YonBIP高级版参照的前端js路径,mobilerefpath字段代表移动端参照的前端js路径。注意需要抽取参照脚本。
(注:当我们对表格中每一列代表的含义不清楚时,可以通过开发社区的数据字典进行查询。当前连接的数据库是培训老师给我们的。)
3.2 画参照对应的元数据。(跳过此阶段)
3.3 编写参照后端java代码(若存在原NC参照,可以以原NC参照代码作为参考)。
继承了对应参照类型基类后,一般只需重写4个方法和构造方法。
- 构造方法中设置管控模式,数据权限,停启用相关参数,后续在DefaultRefSqlbuilder类中会根据这些参数拼接sql条件。
- getRefMeta()方法中设置RefMeta对象各属性对应的String值,即sql语句中我们需要查询的字段,以及设置要查询的表名。
- getExtraSql()方法会拼接Sql语句中where 后的条件语句。
- getExtralSqlParameter()设置where后条件语句中占位符对应的真实数据(为了防止Sql注入)
- getOrderSql()方法设置sql语句中的order by内容。
NC参照:
YonBIP高级版参照:
1、 对应的是我们需要查询的额外字段。
2、3、4、 对应的是参照的主键、名称和编码(若是树型参照还需要设置refMeta的pidField,即父节点主键)
5、 原NC代码中若含有5,说明该参照是有停启用字段的,YonBIP高级版代码中也要加上5,设置默认不显示被停用数据。
6、 设置数据权限资源code。
7、 为设置order by语句。不重写该方法会默认按refmeta中的codeField排序。
8、 需要查询的表,一般是实体vo中默认对应的表,部分情况需要自己写子查询拼表。
3.4 配置参照action映射文件以及authorize鉴权文件。
(文件位置:D:\NCChome\hotwebs\nccloud\WEB-INF\lib)
鉴权文件:
action映射文件:
3.5 编写参照前端js代码(若存在原NC参照,可以以原NC参照代码作为参考)
YonBIP高级版参照前端JS配置:
conf中各参数具体含义请参见平台参照文档或YonBIP高级版开发手册,这里简单介绍一下上图中conf各参数:
属性 | 说明 |
---|---|
multiLang | 多语配置,其中domainName为领域模块名,大部分参照所属领域均为uapbd,少部分为uap。currentLocale | 默认语言,当前为简体中文,moduleId为多语文件名。refType | 参照类型,这里为grid-表型,还有tree-树型和gridTree-左树右表型。refName | 参照名即弹出框显示的标题名。queryGridUrl | 参照配置文件中的action Name,树型参照为queryTreeUrl,左树右表型参照,两个属性都要配置。treeConfig | 树的显示配置,树型参照只支持显示编码名称两列,表型参照对应的该配置为columnConfig,表型参照能显示多列(当配置超过3列时,表型参照会 显示列的配置按钮)。对象中name属性为显示名称,code为显示名在代码中对应的字段。Name和code需要按顺序一一对应。IsMultiSelectedEnabled | 是否开启多选,不配置默认为false。unitProps | 参照左上角过滤参照的配置。isShowUnit | 是否显示左上角过滤参照。
4 参照后端整体流程
后端主要流程如上图所示,对应下图中的java代码:
图中为NCGridRefDBProcessor类中的getWhereSql方法:
主要的where后条件sql拼接过程就在类DefaultRefSqlBuilder中的getExtraSql方法中:
学习时间:
2023.8.10
学习产出:
这是一个完整的参照制作流程,根据步骤一步步制作,前后端不知道代码中需要更改的字段含义可以查看数据字典。映射文件和鉴权文件的位置也标记出来了。