1. 程式人生 > >Panda_05_單表功能開發(二)_建表及功能管理

Panda_05_單表功能開發(二)_建表及功能管理

一、前言

在上一部分中,我們參考了許可權規則功能,得到了我們的需求,知道要建立哪些表以及檔案。

這一部分,我們來看下進行功能模組開發時,準備階段需要做的事:

  1. 建表
  2. 註冊資源
  3. 維護功能
  4. 分配功能

二、建表

以下內容主要講述如何使用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參考手冊