【開發實戰】建立第一個自訂 Window:從 Table 到 Menu 全流程實作

建立第一個自訂 Window:從 Table 到 Menu 全流程實作

想在 iDempiere 中建立自己的功能模組?本文以「圖書借閱系統」為例,帶你一步步完成從 Table 定義到 Menu 上線的完整流程。這是 iDempiere 開發的基礎功,學會後就能自由擴充系統功能。

一、需求情境

我們要建立一個簡單的圖書借閱系統 Z_BookLoan,包含:

  • 書名 (Name)
  • 是否已借出 (IsBorrow)
  • 借出日期 (LoanDate)
  • 借閱人 (AD_User_ID)

二、Step 1:建立 Table

路徑:Application Dictionary → Table and Column

必要欄位(系統自動處理)

欄位 類型 說明
Z_BookLoan_ID ID 主鍵
AD_Client_ID Table Direct 租戶
AD_Org_ID Table Direct 組織
IsActive Yes-No 啟用
Created / Updated DateTime 建立/更新時間
CreatedBy / UpdatedBy Table 建立/更新者

自訂欄位

欄位 類型 Reference
Name String(100)
IsBorrow Yes-No
LoanDate Date
AD_User_ID Table Direct AD_User

建立 Table SQL

CREATE TABLE Z_BookLoan (
    Z_BookLoan_ID NUMERIC(10) NOT NULL,
    AD_Client_ID NUMERIC(10) NOT NULL,
    AD_Org_ID NUMERIC(10) NOT NULL,
    IsActive CHAR(1) DEFAULT 'Y',
    Created TIMESTAMP DEFAULT NOW(),
    CreatedBy NUMERIC(10),
    Updated TIMESTAMP DEFAULT NOW(),
    UpdatedBy NUMERIC(10),
    Name VARCHAR(100),
    IsBorrow CHAR(1) DEFAULT 'N',
    LoanDate DATE,
    AD_User_ID NUMERIC(10),
    PRIMARY KEY (Z_BookLoan_ID)
);

三、Step 2:在 AD 註冊 Table

Table and Column 視窗:

  1. 新增記錄,輸入 Table Name: Z_BookLoan
  2. 勾選 Create Columns from DB
  3. 執行 Synchronize Column 按鈕

系統會自動從資料庫讀取欄位並建立 AD_Column 記錄。

四、Step 3:建立 Window

路徑:Application Dictionary → Window, Tab & Field

  1. 新增 Window,Name: Book Loan
  2. Window Type: Maintain
  3. 儲存

五、Step 4:建立 Tab

在剛建立的 Window 下:

  1. 新增 Tab,Name: Book Loan
  2. Table: 選擇 Z_BookLoan
  3. Tab Level: 0(主表)
  4. 勾選 Single Row Layout(單筆顯示)
  5. 儲存後執行 Create Fields

六、Step 5:調整 Field

在 Tab 下的 Field 子頁籤:

  • Sequence:調整欄位顯示順序
  • Displayed:是否顯示
  • Read Only:唯讀
  • Mandatory:必填(會影響 UI 驗證)

七、Step 6:建立 Menu

路徑:Application Dictionary → Menu

  1. 新增 Menu,Name: Book Loan
  2. Action: Window
  3. Window: 選擇剛建的 Book Loan
  4. Parent Menu: 選擇要放的位置
  5. 儲存

八、Step 7:設定權限

路徑:Role 視窗

  1. 選擇目標 Role
  2. Window Access 子頁籤加入新 Window
  3. 設定 Read/Write 權限

九、測試與驗證

  1. 登出再登入(或清除 Cache)
  2. 在選單找到 Book Loan
  3. 測試新增、修改、刪除功能

十、常見錯誤排解

問題 解決方案
選單看不到 檢查 Role 的 Window Access 權限
欄位沒顯示 檢查 Field 的 Displayed 是否勾選
存檔失敗 檢查必填欄位、資料庫 constraint
Create Fields 沒反應 確認 Tab 有選對 Table

常見問題 FAQ

Q1: 自訂 Table 命名規則是什麼?

建議使用 Z_XX_ 前綴,避免與系統表衝突。主鍵欄位命名為 TableName_ID

Q2: 如何建立主從表關係?

在子表加入父表的 ID 欄位(如 Z_BookLoan_ID),建立 Tab 時設定 Parent Column 和 Link Column。

Q3: 可以用 UI 建立 Table 嗎?

可以!在 Table and Column 視窗建立 Table 和 Column 後,執行 Synchronize Column 會自動在資料庫建立表。

Q4: 如何讓欄位顯示下拉選單?

設定 Column 的 Reference 為 TableTable Direct,並指定參照的表。

Q5: 修改後要重啟 iDempiere 嗎?

大部分情況不用,執行 Role → Reset Cache 或重新登入即可。但修改核心設定可能需要重啟。

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *