一、前言
在上一部分中,我们参考了权限规则功能,得到了我们的需求,知道要创建哪些表以及文件。
这一部分,我们来看下进行功能模块开发时,准备阶段需要做的事:
- 建表
- 注册资源
- 维护功能
- 分配功能
二、建表
以下内容主要讲述如何使用liquibase来创建数据表,如有兴趣可参考 Liquibase 官方指令文档
1.文件名
在如下目录新建文件
文件名如下:
[yyyy-MM-dd]-ProjectName-MoudleName-init-table-migration.groovy
例如
2018-09-20-panda-bpm-init-table-migration.groovy
2.文件结构
groovy文件结构如下:
databaseChangeLog
changeSet
createSequence
createTable
createTable
...
changeSet
createSequence
createTable
createTable
...
...
4.注意的点
参考 现有的建表 changeSet 写法, 添加新的 changeSet
其他建表需要注意的内容包括:
- 基础建表语句
- 表描述信息
- 主键设置
- 列描述信息
- 合理的类型,长度
- 是否允许 NULL
- 默认值(如果有)
- 索引(唯一索引,普通索引)
- 主键自增起始 10001
- oracle 是设置 sequence start with
who 字段(8个)
column(name: "OBJECT_VERSION_NUMBER", type: "BIGINT", defaultValue : "1")
column(name: "REQUEST_ID", type: "BIGINT", defaultValue : "-1")
column(name: "PROGRAM_ID", type: "BIGINT", defaultValue : "-1")
column(name: "CREATED_BY", type: "BIGINT", defaultValue : "-1")
column(name: "CREATION_DATE", type: "DATETIME", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "BIGINT", defaultValue : "-1")
column(name: "LAST_UPDATE_DATE", type: "DATETIME", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATE_LOGIN", type: "BIGINT", defaultValue : "-1")
扩展字段 16个(可以不要)
如果不要,在DTO类上加@ExtensionAttribute(disable=true)
TL 表均为联合主键,没有自增长、sequence 等
3.1 创建序列
//序列
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
createSequence(sequenceName: 'SYS_SCRIPT_B_S', startValue:"10001")
}
3.2 创建主键
//主键
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
column(name:"SCRIPT_ID",type:"bigint",remarks:"nashorn脚本ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "SYS_SCRIPT_B_PK")
}
}else {
column(name:"SCRIPT_ID",type:"bigint",autoIncrement: "true", startWith:"10001",remarks:"nashorn脚本ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "SYS_SCRIPT_B_PK")
}
}
3.3 唯一索引
column(name: "SCRIPT_CODE", type:"nvarchar(30)", remarks: "脚本代码") {
constraints(nullable: "false",unique:"true",uniqueConstraintName:"SYS_SCRIPT_B_U1")
}
4.完整的groovy文件示例
如脚本引擎的groovy文件内容为:
package com.hand.hec.panda.db
import com.hand.hap.liquibase.MigrationHelper
def mhi = MigrationHelper.getInstance()
dbType = mhi.dbType()
//databaseChangeLog: 将logicalFilePath的值修改为与文件名相同
databaseChangeLog(logicalFilePath: "2018-09-06-panda-script-init-table-migration.groovy") {
//changeSet : author为hand邮箱名, id为 日期-基础表名
changeSet(author: "[email protected]", id: "20180817-SYS_SCRIPT_B") {
//1.序列 : 序列名称为基础表_S , 起始值均为 10001
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
createSequence(sequenceName: 'SYS_SCRIPT_B_S', startValue:"10001")
}
//2.基表 : tableName即为表名
createTable(tableName: "SYS_SCRIPT_B") {
//2.1 主键
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
column(name:"SCRIPT_ID",type:"bigint",remarks:"nashorn脚本ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "SYS_SCRIPT_B_PK")
}
}else {
column(name:"SCRIPT_ID",type:"bigint",autoIncrement: "true", startWith:"10001",remarks:"nashorn脚本ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "SYS_SCRIPT_B_PK")
}
}
// 2.2 字段
column(name: "SCRIPT_CODE", type:"nvarchar(30)", remarks: "脚本代码") {
constraints(nullable: "false",unique:"true",uniqueConstraintName:"SYS_SCRIPT_B_U1")
}
column(name: "SCRIPT_NAME", type:"nvarchar(30)", remarks: "脚本名称") {
constraints(nullable: "false")
}
column(name: "SCRIPT_PATH", type: 'nvarchar(64)', remarks: "脚本文件路径")
column(name: "SCRIPT_CONTENT", type: 'text', remarks: "脚本内容")
column(name: "DESCRIPTION", type: 'nvarchar(240)', remarks: "描述")
column(name: "ENABLED_FLAG", type: 'nvarchar(1)', remarks: "启用标志")
column(name: "DELETED_FLAG", type: 'nvarchar(1)', remarks: "删除标志")
//2.3 who 字段(9个),很多表都有这些字段
column(name: "CLIENT_ID", type: 'bigint', remarks: "租户ID")
column(name: "OBJECT_VERSION_NUMBER", type: "BIGINT", defaultValue: "1")
column(name: "REQUEST_ID", type: "bigint", defaultValue: "-1")
column(name: "PROGRAM_ID", type: "bigint", defaultValue: "-1")
column(name: "CREATED_BY", type: "bigint", defaultValue: "-1")
column(name: "CREATION_DATE", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "bigint", defaultValue: "-1")
column(name: "LAST_UPDATE_DATE", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATE_LOGIN", type: "bigint", defaultValue: "-1")
//2.4 扩展字段 16个(可以不要) 如果不要,在DTO类上加@ExtensionAttribute(disable=true)
column(name: "ATTRIBUTE_CATEGORY", type: "nvarchar(30)")
column(name: "ATTRIBUTE1", type: "nvarchar(240)")
column(name: "ATTRIBUTE2", type: "nvarchar(240)")
column(name: "ATTRIBUTE3", type: "nvarchar(240)")
column(name: "ATTRIBUTE4", type: "nvarchar(240)")
column(name: "ATTRIBUTE5", type: "nvarchar(240)")
column(name: "ATTRIBUTE6", type: "nvarchar(240)")
column(name: "ATTRIBUTE7", type: "nvarchar(240)")
column(name: "ATTRIBUTE8", type: "nvarchar(240)")
column(name: "ATTRIBUTE9", type: "nvarchar(240)")
column(name: "ATTRIBUTE10", type: "nvarchar(240)")
column(name: "ATTRIBUTE11", type: "nvarchar(240)")
column(name: "ATTRIBUTE12", type: "nvarchar(240)")
column(name: "ATTRIBUTE13", type: "nvarchar(240)")
column(name: "ATTRIBUTE14", type: "nvarchar(240)")
column(name: "ATTRIBUTE15", type: "nvarchar(240)")
column(name: "ATTRIBUTE16", type: "nvarchar(240)")
column(name: "ATTRIBUTE17", type: "nvarchar(240)")
column(name: "ATTRIBUTE18", type: "nvarchar(240)")
column(name: "ATTRIBUTE19", type: "nvarchar(240)")
column(name: "ATTRIBUTE20", type: "nvarchar(240)")
}
//3.多语言表 : TL 表均为联合主键,没有自增长、sequence 等
createTable(tableName: "SYS_SCRIPT_B_TL") {
//3.1 联合主键
column(name:"CODE_ID",type:"bigint",remarks: "nashorn脚本ID"){
constraints(nullable: "false", primaryKey: "true")
}
column(name:"LANG",type:"varchar(10)",remarks: "语言"){
constraints(nullable: "false", primaryKey: "true")
}
//3.2 字段
column(name:"DESCRIPTION",type:"varchar(240)",remarks: "脚本描述")
column(name:"OBJECT_VERSION_NUMBER",type:"BIGINT",defaultValue: "1")
column(name: "REQUEST_ID", type: "bigint", defaultValue : "-1")
column(name: "PROGRAM_ID", type: "bigint", defaultValue : "-1")
column(name: "CREATED_BY", type: "bigint", defaultValue : "-1")
column(name: "CREATION_DATE", type: "datetime", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "bigint", defaultValue : "-1")
column(name: "LAST_UPDATE_DATE", type: "datetime", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATE_LOGIN", type: "bigint", defaultValue : "-1")
column(name:"ATTRIBUTE_CATEGORY",type:"varchar(30)")
column(name:"ATTRIBUTE1",type:"varchar(240)")
column(name:"ATTRIBUTE2",type:"varchar(240)")
column(name:"ATTRIBUTE3",type:"varchar(240)")
column(name:"ATTRIBUTE4",type:"varchar(240)")
column(name:"ATTRIBUTE5",type:"varchar(240)")
column(name:"ATTRIBUTE6",type:"varchar(240)")
column(name:"ATTRIBUTE7",type:"varchar(240)")
column(name:"ATTRIBUTE8",type:"varchar(240)")
column(name:"ATTRIBUTE9",type:"varchar(240)")
column(name:"ATTRIBUTE10",type:"varchar(240)")
column(name:"ATTRIBUTE11",type:"varchar(240)")
column(name:"ATTRIBUTE12",type:"varchar(240)")
column(name:"ATTRIBUTE13",type:"varchar(240)")
column(name:"ATTRIBUTE14",type:"varchar(240)")
column(name:"ATTRIBUTE15",type:"varchar(240)")
}
}
}
5.fnd_business_rule_test_b表的groovy文件
参考上面示例以及fnd_business_rule_b表,来创建fnd_business_rule_test_b表的groovy文件.
6.执行groovy文件
(1)先执行 mvn clean install 进行打包。
(2)打包完成之后,在项目根目录(panda-parent
)执行如下命令即可(请先将数据库信息修改成正确的):
mvn process-resources -D skipLiquibaseRun=false -D db.driver=org.postgresql.Driver -D db.url=jdbc:postgresql://192.168.100.90:90/haha_dev -D db.user=hahga_dev -D db.password=hahadev
三、注册资源
所有要用到的链接都要注册成资源
我们参考权限规则功能,得到需要注册的资源如下:
1.HTML页面
如上图,两处页面的链接都需要注册成资源。于是我们注册两条资源:
只需要注册权限规则页面即可,不需要注册明细页面的资源。(存疑
)
参考权限规则功能的资源管理,创建一条HTML页面资源如下:
fnd/FND502/fndBusinessRuleTest.screen
2.URL服务
对于Controller中的请求url,我们也需要将其注册为资源。
fnd/businessRuleTest/query
fnd/businessRuleTest/submit
fnd/businessRuleTest/remove
四、功能维护
参考权限规则的功能维护,维护一条功能。
父级功能为
BPM权限
入口页面为 前面注册的HTML页面
五、功能分配
去功能分配下面参考我们的功能是否被勾选中。
六、参考资料
1.HAP参考手册