Panda_05_單表功能開發(二)_建表及功能管理
一、前言
在上一部分中,我們參考了許可權規則功能,得到了我們的需求,知道要建立哪些表以及檔案。
這一部分,我們來看下進行功能模組開發時,準備階段需要做的事:
- 建表
- 註冊資源
- 維護功能
- 分配功能
二、建表
以下內容主要講述如何使用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參考手冊