文檔中心

全面的 SQLVantage 使用文檔和指南

序言

SQLVantage 報表系統使用說明(繁體中文)

適用版本:v1.0.2(2026-07-15 發佈) 本文檔是 SQLVantage 的完整使用手冊,分為「安裝部署」「設定說明」「管理員指南」「報表設計指南」「普通使用者指南」五大篇章,管理員與普通使用者可各取所需。


1. 系統概述

1.1 這是什麼

SQLVantage 是一套 Web 報表系統。系統由「管理員」維護報表定義,「普通使用者」透過網頁選擇報表、填寫查詢條件、非同步取得結果並匯出 Excel / HTML / JSON / TEXT。

1.2 技術棧

本系統為純 Web 架構:瀏覽器端無須安裝任何用戶端或外掛程式,使用現代瀏覽器即可存取;伺服器端僅需可執行程式及其配套設定目錄即可執行,部署簡單。

1.3 核心概念

概念 說明
報表(Report) 一個報表 = SQL + FORM + HTML 三部分程式碼 + 三份格式 JSON(SqlFormat / FormFormat / HtmlFormat),歸屬於某個「職責」
職責(Responsibility) 報表的分類目錄,對應 Oracle EBS 中的職責,用於把報表按模組分組展示給使用者
參數(Parameter) FORM 中定義的查詢條件(如日期、客戶、組織等),提交後作為命名參數綁定到 SQL
請求(Request) 普通使用者一次具體的報表執行任務,系統後台非同步執行並產生結果檔案
授權(License) 控制報表數量與使用期限的授權檔案 conf/license.dat

1.4 使用者角色

角色 入口 權限
管理員(admin) /admin/login 使用者管理、職責管理、報表管理、授權匯入、系統設定、全部請求監控
普通使用者(normal) /login 選擇報表、填寫參數、提交請求、檢視自己的請求、下載結果、修改密碼

1.5 目錄結構

發佈包解壓後的主要檔案:

SQLVantage/
├── SQLVantage.exe / sqlvantage   # 主程式(Windows / Linux)
├── conf/
│   ├── app.conf        # 系統設定檔(連接埠/語言/Oracle 等)
│   ├── data.dat        # 業務資料庫(使用者/職責/報表/請求)
│   ├── license.dat     # 授權檔案
│   └── locale/         # 語言包
├── data/               # 執行時期產生:<請求ID>.xlsx / <請求ID>.json
├── docs/               # 使用文件(多語言,含 images/)
└── tmp/                # 暫存檔(工作階段、任務)

2. 安裝部署(Windows / Linux)

2.1 環境需求

  • 作業系統:Windows 7+ / 64 位元 Linux(x86_64)
  • 執行方式(建議):直接使用發佈好的可執行程式(SQLVantage.exe 或 Linux 二進位檔),無需安裝任何執行環境
  • Oracle 資料庫:報表執行需要能連線 Oracle(本系統預設連線 Oracle EBS),請提前確認網路與帳號
  • 磁碟/目錄權限:程式執行目錄需要可寫權限,因為執行時期會產生 data/tmp/ 目錄並讀寫 conf/ 下的檔案

2.2 Windows 平台安裝

  1. 解壓縮:將發佈包(zip)解壓縮到任意目錄,例如 D:\SQLVantage\。解壓縮後確認以下關鍵檔案存在:

    D:\SQLVantage\
    ├── SQLVantage.exe      # 主程式
    ├── conf\app.conf       # 設定檔
    ├── conf\data.dat       # 資料庫(隨包附帶的空庫)
    └── conf\locale\        # 語言包
    
  2. (選用)修改設定:用記事本開啟 conf\app.conf,按 第 3 章 修改監聽位址、連接埠、Oracle 連線等。

  3. 啟動程式:雙擊 SQLVantage.exe,或在命令列中執行:

    cd D:\SQLVantage
    SQLVantage.exe
    

    啟動成功後主控台會列印版本資訊、授權狀態,並進入監聽狀態。

  4. 存取系統:瀏覽器開啟 http://127.0.0.1:8080(預設位址,可在 app.conf 中修改)。

  5. 防火牆設定:若需區域網路/遠端存取,請在 Windows 防火牆中放行對應連接埠(如 8080):

    netsh advfirewall firewall add rule name="SQLVantage" dir=in action=allow protocol=TCP localport=8080
    

2.3 Linux 平台安裝

  1. 解壓縮:將發佈包(tar.gz 或 zip)解壓縮到目標目錄,例如 /opt/sqlvantage

    mkdir -p /opt/sqlvantage
    tar -xzf sqlvantage-linux-amd64.tar.gz -C /opt/sqlvantage
    cd /opt/sqlvantage
    
  2. 賦予執行權限

    chmod +x sqlvantage
    
  3. (選用)修改設定:編輯 conf/app.conf(同 Windows)。

  4. 前景啟動測試

    ./sqlvantage
    

    看到版本資訊和監聽日誌即啟動成功,按 Ctrl+C 停止。

  5. 背景執行(建議用 systemd 或 nohup)

    方式 A:nohup

    cd /opt/sqlvantage
    nohup ./sqlvantage > sqlvantage.log 2>&1 &
    

    方式 B:systemd(建立 /etc/systemd/system/sqlvantage.service):

    [Unit]
    Description=SQLVantage Report System
    After=network.target
    
    [Service]
    WorkingDirectory=/opt/sqlvantage
    ExecStart=/opt/sqlvantage/sqlvantage
    Restart=always
    RestartSec=5
    User=sqlvantage
    
    [Install]
    WantedBy=multi-user.target
    

    然後執行:

    systemctl daemon-reload
    systemctl enable sqlvantage
    systemctl start sqlvantage
    systemctl status sqlvantage
    
  6. 防火牆 / 安全群組:放行連接埠(如 8080):

    firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload
    

2.4 從原始碼編譯(選用)

僅對獲得原始碼的使用者開放:在原始碼目錄執行 go build 即可編譯產出目前平台的可執行檔。正式部署環境建議直接使用官方發佈的可執行程式。

2.5 首次啟動

首次啟動時系統會自動完成以下初始化:

  1. 檢查資料檔案:讀取 conf/data.dat(隨包附帶;若遺失會提示 "conf/data.dat is not found" 並退出,請勿刪除該檔案)。
  2. 自動建表userresponsibilityreportrequest 四張表自動建立。
  3. 自動建立管理員帳號:首次存取 /admin/login 時,若不存在使用者 root,系統自動建立:
    • 使用者名稱:root
    • 初始密碼:SQLVantage
    • 角色:admin(管理員)
    • 安全提醒:首次登入後請立即修改該密碼(管理員可在「使用者管理」中修改)。
  4. 檢查授權檔案:若 conf/license.dat 遺失或無效,主控台列印警告,系統仍可執行,但受 4.7 節授權限制 約束。

3. 設定說明

3.1 設定檔位置

設定檔為 conf/app.conf(INI 格式)。有兩種修改方式:

  • 方式一(建議,介面操作):管理員登入後前往「系統設定」(/admin/setting),填寫後儲存,系統自動寫回 app.conf
  • 方式二(直接編輯檔案):用文字編輯器修改 conf/app.conf 後重新啟動程式。

3.2 參數說明表

參數 預設值 說明
appname SQLVantage 應用程式名稱
httpaddr 127.0.0.1 監聽 IP 位址;0.0.0.0 表示監聽所有網卡(區域網路可存取)
httpport 8080 監聽連接埠,建議 8080~8099
runmode dev 執行模式:dev(開發,顯示詳細錯誤)/ prod(生產,隱藏錯誤細節)
language en-US 預設介面語言(優先順序低於 URL 參數 / Cookie / 瀏覽器語言)
sessiongcmaxlifetime 3600 Session 過期時間(秒),預設 1 小時
max_execution_time 30 報表任務最大執行時間(分鐘),逾時任務自動標記為 Terminated
oracle_server 192.168.10.13 Oracle 資料庫伺服器 IP/主機名稱
oracle_port 1521 Oracle 監聽連接埠
oracle_database test Oracle 服務名稱(SERVICE_NAME)
oracle_username apps Oracle 連線使用者名稱
oracle_password oracle123 Oracle 連線密碼

3.3 修改後生效

  • sessiongcmaxlifetime:儲存後立即生效。
  • 其餘參數(連接埠、Oracle 等):修改後需重新啟動程式才生效。

3.4 語言切換

  • 系統內建 12 種語言:zh-CN、zh-TW、en-US、ja-JP、ko-KR、fr-FR、de-DE、es-ES、th-TH、vi-VN、ru-RU、pt-PT。
  • 切換方式:URL 加 ?lang=zh-CN(如 /?lang=zh-CN),或透過管理後台右上角語言選單切換;選擇後寫入 Cookie,有效期 1 年。

4. 管理員指南

4.1 管理員登入

  1. 瀏覽器前往 http://<伺服器位址>:<連接埠>/admin/login
  2. 使用管理員帳號登入(首次為 root / SQLVantage)。
  3. 登入成功進入管理後台(/admin),左側選單包含:報表管理、職責管理、使用者管理、請求管理、授權管理、系統設定、儀表板、關於

說明:管理員帳號必須滿足 角色 = admin狀態 = active,否則無法登入後台。

4.2 儀表板與頂部導覽

  • 頂部導覽可快速跳轉:儀表板(/admin)、報表執行(/request,新視窗)、入口首頁(/)。
  • 右上角可切換語言、登出(/admin/logout)。

4.3 使用者管理

入口:/admin/user(左側選單「使用者管理」)。

使用者欄位說明

欄位 說明
使用者名稱 UserName 登入帳號,建立後不可修改(唯讀)
信箱 Email 選填
角色 Role normal(普通使用者)/ admin(管理員)
狀態 Status active(在職,可登入)/ inactive(離職,禁止登入)
密碼 建立時必須填寫;加密儲存,介面不回顯

操作

  • 新增:點「新增」按鈕 → 填寫使用者名稱/信箱/角色/狀態/密碼/確認密碼 → 提交。
  • 編輯:點列內「編輯」→ 可改信箱、角色、狀態;密碼留空表示不修改。
  • 刪除:點列內「刪除」。注意:
    • root 帳號禁止刪除;
    • 名下掛有報表的使用者禁止刪除(需先刪除/轉移其報表)。

管理重點

  • 普通使用者登入入口為 /login(首頁),管理員登入入口為 /admin/login,兩者互不相同。
  • 給普通使用者設 inactive 狀態即可禁止其登入,無需刪除帳號。
  • 使用者清單自動隱藏 root

4.4 職責管理

入口:/admin/responsibility(左側選單「職責管理」)。

職責欄位說明

欄位 說明
職責 ID(RespId) Oracle EBS 中的職責 ID
職責 Key(RespKey) Oracle EBS 中的職責鍵
職責名稱(Name) 顯示名稱,也是普通使用者端報表選單的分組名稱
簡稱(ShortName) 選填

操作

  • 新增:點「新增」→ 從下拉選擇某使用者的職責(資料來自 Oracle EBS 查詢介面 /api/user/responsibilities/),選中後自動填入 RespId / RespKey / Name;也可手動填寫 → 提交。
  • 編輯 / 刪除:列內按鈕操作。注意:已被報表引用的職責不能刪除

用途:報表必須歸屬於某個職責;普通使用者端「報表選單」按職責分組展示(未歸屬職責的報表歸入「未分類」組)。

4.5 報表管理

入口:/admin/report(左側選單「報表管理」)。

報表欄位

欄位 說明
ID 系統自動編號
職責(Responsibility) 報表歸屬的分類
名稱(Name) 報表名稱,普通使用者可見
描述(Description) 選填
狀態(Status) Draft(草稿)/ Release(已發佈)/ Discard(廢棄)
建立/更新時間 系統自動記錄

報表生命週期(重要)

Draft(草稿,設計階段)──▶ Release(已發佈,使用者可見)
       │                        │
       │                        └──▶ 不可直接刪除,需先改為 Draft/Discard
       └──▶ Discard(廢棄,使用者不可見)
  • 只有狀態為 Release 的報表才會出現在普通使用者端的報表選單中。
  • 已發佈(Release)的報表禁止刪除,需先在清單中把狀態改為 Draft 或 Discard 再刪除。
  • 清單中的「名稱」「描述」「狀態」欄支援雙擊儲存格直接編輯(自動儲存)。

操作

按鈕 說明
新增 彈出表單:選擇職責、填名稱/描述/狀態 → 提交
程式碼(紫色) 開啟報表設計器(詳見第 5 章,本系統最核心功能)
編輯(藍色) 開啟基本資訊表單修改
刪除(紅色) 刪除報表(Release 狀態禁止刪除)

4.6 請求管理(管理員視角)

入口:/admin/request(左側選單「請求管理」)。

管理員可查看所有使用者的報表請求(普通使用者只能看自己的),支援:

  • 依報表名/狀態/階段檢視;
  • 檢視參數、提交人、IP 位址、建立/完成時間;
  • 「輸出」下拉可直接下載該請求的 Excel / HTML / JSON / TEXT 結果;
  • 單選刪除或勾選後「批次刪除」。

請求狀態含義見 第 7 章

4.7 授權管理(License)

入口:/admin/license(左側選單「授權管理」)。

4.7.1 授權檔案是什麼

授權檔案為 conf/license.dat,由供應商簽發的一小段文字,包含以下授權資訊:

欄位 說明
reg_id 註冊 ID(客戶唯一識別)
company 註冊公司名稱
expire 有效期限截止日期(格式 YYYY-MM-DD,如 2026-12-31

系統在啟動與匯入時會自動校驗授權檔案的合法性,任何竄改(修改註冊資訊或到期日)都會導致授權無效。

4.7.2 購買流程

  1. 聯絡 SQLVantage 供應商/開發商,提供以下資訊:
    • 單位/公司名稱(company);
    • 需要授權的伺服器註冊 ID(reg_id,由供應商分配);
    • 期望的授權期限。
  2. 供應商使用授權產生工具產生授權檔案(一段文字),交付給客戶。
  3. 客戶拿到檔案後按 4.7.3 匯入即可。

4.7.3 匯入授權

  1. 管理員登入 → 授權管理(/admin/license)。
  2. 頁面顯示目前授權狀態(註冊 ID / 公司 / 到期日;無效或缺失時顯示紅色提示)。
  3. 點「選擇檔案」選中收到的授權檔案(可任意命名,如 license.dat)→ 點「匯入」。
  4. 匯入成功後系統自動校驗並重新整理頁面,顯示有效授權資訊。

也可以手動放置:將授權檔案內容儲存為 conf/license.dat 後重新啟動程式。

4.7.4 無授權 / 授權過期的限制

限制項 說明
報表數量 未授權(或已過期)時,最多只能存在 3 個報表;超過後建立報表會被拒絕(提示「授權已達上限」)
請求提交 未授權且報表數 ≥ 3 時,普通使用者提交請求會被拒絕
授權到期 到期後不影響已登入操作,但新增報表/提交請求會受限

4.8 系統設定

入口:/admin/setting(左側選單「系統設定」),視覺化編輯 conf/app.conf

  • 應用程式設定:監聽位址、連接埠、執行模式、預設語言、最大執行時間;
  • 工作階段設定:Session 過期時間(秒);
  • Oracle 資料庫設定:伺服器、連接埠、服務名稱、使用者名稱、密碼(帶明文/密文切換按鈕)。

儲存後部分參數立即生效,連接埠等參數需重新啟動程式。

4.9 關於

入口:/admin/aboutus,檢視系統版本、發佈資訊等。


5. 報表設計指南(核心章節)

這是 SQLVantage 最重要的功能。一個報表由三部分組成:

  • SQL:定義查詢哪些資料(資料來源 SQL + 欄元資料設定)
  • FORM:定義使用者填寫哪些查詢條件(參數表單)
  • HTML:定義結果如何展示(表格 / 圖表 / 指標卡佈局)

三者各自有「程式碼」與「格式 JSON」兩份資料,最終儲存到報表記錄中。

5.1 設計器工作台

5.1.1 進入設計器

  1. 管理員登入 → 報表管理(/admin/report)。
  2. 找到目標報表,點「程式碼」按鈕(紫色)。
  3. 彈出大尺寸設計器視窗(佔螢幕約 98%),介面分左右兩欄:
┌────────────────────────────────────────────────────────┐
│ [下拉:SQL設計 | FORM設計 | HTML設計]   [儲存全部]        │
├───────────────────────────────┬────────────────────────┤
│ 左側:程式碼編輯器              │ 右側:動態設計面板       │
│ (SQL 程式碼 / FORM 程式碼 /    │ (隨左側模式切換)      │
│  HTML 程式碼共用一個編輯器)    │   · SQL: 欄元資料設定表  │
│                               │   · FORM: 參數設定表    │
│                               │   · HTML: 佈局塊設定表  │
└───────────────────────────────┴────────────────────────┘

5.1.2 三個模式

頂部下拉框切換設計模式,切換時左側編輯器與右側面板同步切換:

模式 編輯器內容 右側面板
SQL 設計 報表查詢 SQL(Oracle 語法) 欄元資料設定表(影響 Excel 匯出/頁面欄頭)
FORM 設計 參數表單 HTML 程式碼(表單) 參數設定表 + 即時預覽 + 表單程式碼草稿
HTML 設計 結果展示 HTML 程式碼(範本片段) 佈局塊設定表 + 佈局預覽 + HTML 程式碼草稿

5.1.3 儲存

  • 設計過程中:右側面板的變更會自動寫回隱藏欄位(sql_code/sql_format/form_code/form_format/html_code/html_format)。
  • 正式儲存:點左上角「儲存全部」按鈕,一次性把六份資料提交到 /admin/report/code/ 儲存到資料庫。

記住:編輯完 SQL / FORM / HTML 後務必點「儲存全部」,否則關閉視窗會遺失。

5.2 SQL 模組(設計報表資料來源)

5.2.1 編寫查詢 SQL

  • SQL 為 Oracle 語法,直接寫 SELECT 語句(可包含 FROM/JOIN/WHERE/GROUP BY 等)。

  • 查詢條件使用 命名參數佔位符 :參數名,參數名需與 FORM 模組中定義的 field 一致。例如 FORM 中定義參數 P_OU_ID,SQL 中寫:

    SELECT company_name, ou_id, amount
      FROM fnd_ou_tl
     WHERE ou_id = :P_OU_ID
    
  • SQL 中所有 SELECT 出來的欄名,就是 Excel 匯出和 HTML 頁面表格的欄位識別(建議統一用大寫,如 COMPANY_NAME)。

5.2.2 欄元資料設定表(重點:Excel 匯出)

右側「SQL 欄元資料設定」表格,每一行對應 SQL 輸出的一欄:

說明 範例
欄位名 field SQL 輸出的欄名(輸入時自動轉大寫 AMOUNT
表頭標題 title 顯示標題,Excel 匯出的表頭、頁面表格的欄頭 金額
資料型別 type text / number / percent / date / month / time / datetime number
精度 precision 數值保留小數位數(預設 2) 2
格式 format Excel 自訂數字/日期格式 #,##0.00
對齊 align left / center / right right

操作:點「新增行」新增欄 → 雙擊儲存格填寫 → 自動產生 JSON 快照(右側黑色程式碼預覽區),並即時寫回 sql_format

5.2.3 SQL 欄設定與 Excel 匯出的對應關係

系統後台按以下對應規則產生 Excel(xlsx)檔案:

欄設定 Excel 輸出行為
field 與查詢結果的欄名比對,決定該欄設定作用到哪一欄
title 寫入第 1 列表頭儲存格,即 Excel 表頭標題
type = text 值作為文字寫入儲存格
type = number 值按數字寫入,小數位數 = precision;若設定了 format 則按自訂數字格式輸出,如 #,##0.00
type = percent 值按百分比格式輸出,format 可覆蓋,如 0.00%
type = date 值按日期輸出,format 可作為日期格式,如 yyyy-mm-dd
align 儲存格水平對齊:left / center / right
precision 數值精度(預設 2)

也就是說:SQL 欄設定表 = Excel 匯出的「表頭 + 欄型別 + 數字格式 + 對齊」的完整定義。即使不做任何設定,Excel 也能匯出(預設文字型別、左對齊、表頭用原始欄名),但設定後匯出的 Excel 更專業。

5.2.4 一個完整的 SQL 設計範例

假設要做一個「部門費用報表」:

  1. SQL 程式碼(編輯器):

    SELECT DEPT_NAME, MONTH, TOTAL_AMOUNT, RATE
      FROM DEPT_COST_V
     WHERE MONTH = :P_MONTH
     ORDER BY DEPT_NAME
    
  2. 欄元資料設定

    field title type precision format align
    DEPT_NAME 部門名稱 text left
    MONTH 月份 date yyyy-mm center
    TOTAL_AMOUNT 費用總額 number 2 #,##0.00 right
    RATE 費用佔比 percent 2 0.00% right
  3. 匯出的 Excel 效果:表頭為「部門名稱 / 月份 / 費用總額 / 費用佔比」,金額右對齊、千分位、2 位小數,佔比顯示為百分比。

5.3 FORM 模組(設計查詢參數表單)

5.3.1 參數設定表

右側「參數設定表」每一行定義一個查詢參數:

說明 範例
參數名 field 參數識別,需與 SQL 中的 :參數名 一致 P_OU_ID
顯示標籤 label 表單中顯示的標籤文字 業務實體
元件型別 type 見下方元件型別表 select
預設值 value 選填,初始值 101
校驗 verify 校驗規則(如 required required
靜態選項 static_options 下拉/單選靜態選項,格式 鍵:值,鍵:值 101:上海,102:北京
API URL api_url 動態選項介面位址,可帶 {變數名} 佔位符 /api/query?ou={P_OU_ID}
查詢 SQL query_sql 動態選項查詢 SQL,可帶 {變數名} 佔位符,回傳兩欄(值/文字) SELECT id, name FROM tab WHERE ou = {P_OU_ID}

元件型別表

型別 說明
text 單行文字方塊
number 數字輸入框
select 下拉框(選項來自靜態選項 或 動態 API/SQL)
radio 單選組(選項來自靜態選項)
date 日期選擇器(YYYY-MM-DD)
year 年份選擇器
month 月份選擇器
time 時間選擇器
datetime 日期時間選擇器
hidden 隱藏欄位(不顯示,仍隨表單提交)
temp 暫時隱藏值(不提交)

5.3.2 參數聯動(依賴篩選)

  • api_url / query_sql 支援 {變數名} 佔位符:使用者改變上游參數(如選擇組織)時,系統自動把佔位符替換為目前表單的實際值,動態請求下游下拉選項。
  • 若上游參數未填寫,下游下拉框顯示「請先完善上方篩選條件」並清空選項,避免髒資料。
  • 靜態下拉(static_options)與動態下拉(api_url / query_sql)二選一即可。

下拉動態選項的資料格式要求:介面/SQL 回傳的每一筆記錄包含 val(值)與 txt(顯示文字)兩個欄位。

5.3.3 即時預覽與程式碼產生

  • 表格下方是「即時預覽區」:隨著參數設定即時渲染出表單(含日期控制項、聯動下拉等)。
  • 底部「表單程式碼草稿」文字方塊即時產生完整的 FORM HTML 程式碼。
  • 點「複製並套用」按鈕:將草稿程式碼寫入編輯器(FORM 模式),並同步到 form_code / form_format

也可以不透過右側面板,直接在左側編輯器手寫 FORM HTML(表單語法),儲存時同樣生效。

5.3.4 執行時期行為

普通使用者提交表單後,系統將表單資料作為命名參數與 SQL 綁定執行;同時把參數記錄到請求中,供結果頁/匯出檔案回顯查詢條件。

5.4 HTML 模組(設計結果展示)

5.4.1 佈局塊設定表

右側「HTML 視圖元件設定」每一行定義一個展示塊:

說明 範例
容器 ID block_id 塊的唯一 ID(產生 DOM id 前置) chart_zone
標題 title 塊標題 費用趨勢
柵格寬度 grid_md 柵格寬度 1~12(12 佔整行) 8
元件型別 component table(表格)/ chart(圖表)/ card(指標卡)/ custom(自訂容器) chart
小計 subtotal Y(表格啟用合計列)/ N N
圖表型別 chart_type line(折線)/ bar(柱狀) line
X 軸欄位 x_field 圖表橫軸欄位(來自 SQL 輸出欄) MONTH
Y 軸欄位 y_fields 圖表縱軸欄位,多個用英文逗號分隔 TOTAL_AMOUNT

元件說明

元件 展示效果 執行時期技術
table 資料表格,分頁、排序、欄頭取欄元資料 title;subtotal=Y 時數值欄顯示合計列 table
chart 圖表(line/bar),X/Y 軸欄位來自設定 chart
card 指標卡(KPI 卡),顯示關鍵數值 自訂渲染
custom 自訂內容容器 HTML

5.4.2 佈局預覽與程式碼產生

  • 「即時佈局預覽」區即時展示各塊的高仿真骨架(標題 + 塊型別 + 寬度)。
  • 「Html Code 草稿」即時產生完整 HTML 程式碼(含 data-componentdata-subtotaldata-charttypedata-xfielddata-yfields 等執行時期屬性)。
  • 點「複製並套用」寫入編輯器並同步 html_code / html_format

也可以在左側編輯器直接手寫 HTML 範本片段(支援常用範本語法)。執行時期渲染時範本可用的資料物件見 5.4.3。

5.4.3 結果頁渲染機制

普通使用者下載/檢視 HTML 結果時(/request/output?ext=html),系統把報表 HTML 程式碼與查詢結果 JSON、欄設定等一起渲染:

範本變數 說明
data 查詢結果 JSON 陣列(執行時期注入,配合 {{.data}} 輸出為 JS 資料)
params 本次請求的查詢參數(鍵值對)
colsConfig SQL 欄元資料(供表格欄頭/圖表系列名稱使用)
reportName / reportDate / status 報表名稱、產生時間、狀態

頁面自動把 data-component="table" 的容器渲染為表格、chart 渲染為圖表、card 渲染為指標卡。

5.5 報表發佈流程(管理員操作建議)

1. 報表管理 → 新增報表(選擇職責、填名稱、狀態選 Draft)
2. 點「程式碼」進入設計器
3. SQL 設計:寫查詢 SQL + 設定欄元資料(Excel 匯出依據)
4. FORM 設計:設定查詢參數(與 SQL 參數一一對應)
5. HTML 設計:設定展示佈局(表格/圖表/指標卡)
6. 點「儲存全部」→ 關閉設計器
7. 回到報表清單,把狀態改為 Release(發佈)
8. 普通使用者登入即可在報表選單中看到該報表並執行

5.6 設計注意事項

  • SQL 與 FORM 參數名必須完全一致(SQL 用 :參數名,FORM 用 field)。
  • SQL 欄名建議用大寫;欄元資料設定表會自動把 field 轉大寫。
  • 報表 SQL 必須能被 Oracle 預編譯(db.Prepare),語法錯誤會導致請求執行失敗(狀態 Error)。
  • 無授權時報表數量上限 3 個,設計前請確認授權狀態。
  • 儲存後可在「請求管理」或普通使用者端執行一次請求,驗證 SQL 與展示是否正確。

6. 普通使用者指南

6.1 登入

瀏覽器存取系統首頁(預設 http://<伺服器位址>:<連接埠>/),點「使用者登入」卡片進入登入頁 /login。登入頁提供兩種登入方式(標籤切換):

方式一:ERP 驗證(Oracle EBS 單點)

  1. 切到「ERP 驗證」標籤。
  2. 輸入 EBS 使用者名稱(如 APPS),點「驗證登入」。
  3. 系統透過 Oracle 檢查該使用者在 EBS 的 icx_sessions 工作階段是否有效(30 分鐘有效視窗),有效則直接進入系統。
  4. 特點:無需本機密碼;登入身分為使用者在 EBS 中的身分。

方式二:本機帳號

  1. 切到「本機帳號」標籤。
  2. 輸入管理員分配的使用者名稱密碼,點「登入」。
  3. 特點:帳號由管理員在「使用者管理」中建立。

注意:帳號被管理員設為 inactive(離職)後無法登入。

6.2 入口首頁

登入成功後進入入口首頁(/),包含:

  • 頂部:歡迎語(使用者名稱)、修改密碼入口。
  • 導覽卡片:
    • 新增報表請求(進入報表執行頁面 /request);
    • 我的請求(檢視歷史請求與結果);
    • 管理員登入、系統設定、授權管理、關於等卡片(普通使用者無需使用,點入會跳轉管理員登入頁)。
  • 右上角可切換介面語言。

6.3 新增報表請求

  1. 入口首頁點「新增報表請求」卡片,或直接存取 /request
  2. 在請求清單頁點「新增」按鈕。
  3. 彈出「報表選單」視窗:報表依職責(模組)分組展示,只顯示已發佈(Release)的報表;也可在頂部下拉框依名稱搜尋。
  4. 點擊某個報表,右側載入該報表的參數表單。
  5. 填寫查詢條件(日期/下拉/文字等),點「提交」。
  6. 提交成功後在請求清單中看到新記錄,狀態為 Queued(排隊中)。

6.4 我的請求清單

入口:/request(頂部也可從入口卡片進入)。

說明
ID 請求編號
報表名稱 執行的報表
階段 Phase Pending(排隊)/ Running(執行中)/ Completed(完成)
狀態 Status Queued(排隊)/ Processing(處理中)/ Success(成功)/ Error(失敗)/ Terminated(逾時終止)
輸出 Output 下載結果的下拉選單
訊息 Message 執行資訊(如 SQL 錯誤)
參數 Parameters 本次提交的查詢條件
建立/完成時間 記錄時間

操作:點某行「輸出」下拉,選擇 Excel / HTML / JSON / TEXT,在新視窗開啟或下載對應格式的結果檔案。

6.5 修改密碼

  1. 入口首頁頂部點「修改密碼」。
  2. 填寫目前密碼、新密碼、確認新密碼(新密碼至少 6 位)。
  3. 提交成功即可用新密碼登入(僅本機帳號登入有效;ERP 驗證方式與 EBS 密碼無關)。

7. 請求執行與輸出結果

7.1 執行流程(非同步)

使用者提交請求
   │
   ▼
寫入 request 表(Phase=Pending, Status=Queued)
   │
   ▼
背景輪詢協程(每 3 秒)拉取排隊任務(每批最多 5 個,並發最多 3 個)
   │
   ▼
樂觀鎖搶佔任務 → Phase=Running, Status=Processing
   │
   ▼
解析參數 → 讀取報表 SQL → Oracle 預編譯執行
   │
   ├── 失敗 → Status=Error(記錄錯誤訊息)
   │
   ▼
產生結果檔案:data/<請求ID>.xlsx 與 data/<請求ID>.json
   │
   ▼
Phase=Completed, Status=Success
  • 逾時保護:執行超過 max_execution_time(預設 30 分鐘)的任務自動標記為 Terminated。
  • 結果檔案依請求 ID 儲存在 data/ 目錄,不會互相覆蓋。

7.2 輸出格式

格式 說明
Excel xlsx 檔案,表頭/欄型別/格式/對齊由 SQL 欄元資料決定(見 5.2.3),檔名格式:<報表名>_<時間戳>.xlsx
HTML 在瀏覽器中渲染報表 HTML 佈局(表格/圖表/指標卡)+ 查詢條件回顯
JSON 原始查詢結果 JSON(便於二次開發/介面對接)
TEXT 純文字頁面展示資料

7.3 權限控制

  • 普通使用者只能看到自己提交的請求(依建立人過濾)。
  • 管理員在「請求管理」可檢視所有使用者的請求。
  • ERP 登入使用者提交時,若表單包含 P_OU_ID / P_ORG_ID 等組織權限參數,系統會校驗該值是否在使用者 EBS 擁有的 OU/ORG 範圍內,越權會被拒絕。

8. 常見問題 FAQ

Q1:啟動時提示 "conf/data.dat is not found"? 資料庫檔案缺失。請確認解壓完整,conf/data.dat 存在;不要用空檔案取代,需使用隨發佈包提供的資料庫檔案。

Q2:瀏覽器打不開頁面? 確認程式已啟動;確認 httpaddr/httpport 設定正確(預設 127.0.0.1:8080,本機存取 OK、其他機器存取需改為 0.0.0.0 並放行防火牆連接埠)。

Q3:登入提示帳號或密碼錯誤?

  • 本機帳號:確認使用者名稱/密碼正確、狀態為 active。
  • 管理員:確認角色為 admin。
  • 忘記密碼:聯絡管理員在「使用者管理」中重設。

Q4:提交報表請求後狀態一直 Error? 多為 SQL 語法錯誤或 Oracle 連線問題。檢視請求「訊息」欄的報錯資訊:Prepare statement failed 表示 SQL 預編譯失敗;Oracle connection failed 表示資料庫連線設定錯誤(檢查 app.conf 的 oracle_* 參數)。

Q5:報表在普通使用者選單中看不到? 確認報表狀態為 Release(只有已發佈報表可見)。

Q6:請求長時間 Running? 執行時間超過 max_execution_time 分鐘會被自動終止。可適當調大該參數後重新啟動。

Q7:建立報表提示授權已達上限? 未匯入有效授權檔案(或已過期),未授權時最多 3 個報表。請依 4.7 節 匯入授權。

Q8:Excel 匯出表頭是英文欄名? SQL 欄元資料設定中未填 title,或未對應到 SQL 輸出欄名。請在「SQL 設計」的欄設定表中把 field 填成與 SQL 輸出欄一致、並填寫 title。

Q9:Oracle 密碼修改後系統還用舊密碼連線? 修改 conf/app.conforacle_password 後需重新啟動程式

Q10:修改連接埠後不生效? app.conf 修改後需重新啟動;也可在「系統設定」頁面修改(同樣需重新啟動生效)。


9. 附錄:資料儲存與備份遷移

9.1 資料儲存位置

資料 位置 說明
系統資料(使用者/職責/報表/請求) conf/data.dat 本機資料庫(隨包附帶)
授權資訊 conf/license.dat 授權檔案
系統設定 conf/app.conf 設定檔
請求結果檔案 data/<請求ID>.xlsxdata/<請求ID>.json 執行時期產生
暫存檔 tmp/ 執行時期暫存檔
日誌 主控台 / 執行目錄日誌 程式日誌

9.2 備份建議

  • 最小備份集conf/(app.conf + data.dat + license.dat)+ 選用 data/(歷史結果)。
  • 完整備份:整個程式目錄(含 conf/data/)。

9.3 遷移到新伺服器

  1. 在目標機器依 第 2 章 部署相同版本程式。
  2. 停止舊程式 → 複製 conf/(app.conf、data.dat、license.dat)到新機器對應位置。
  3. 如需歷史結果,一併複製 data/
  4. 啟動新程式,檢查設定(Oracle 位址、連接埠等)是否適用新環境。

9.4 本文檔(多語言版)的遷移與線上閱讀

  • 本說明文件存放於程式目錄 docs/ 下,依語言命名:zh-CN.mdzh-TW.mden-US.mdja-JP.mdko-KR.mdfr-FR.mdde-DE.mdes-ES.mdth-TH.mdvi-VN.mdru-RU.mdpt-PT.md
  • 圖片統一存放於 docs/images/ 目錄,文件內使用本機相對路徑引用(如 ![示意圖](images/xxx.png)),無任何第三方遠端圖片連結。遷移文件時請連同 docs/images/ 目錄一起複製,圖片即隨文件走。
  • 線上閱讀:所有 .md 檔案為純 Markdown,可直接在 Gitea / GitHub / GitLab / Gitee 等平台的文件倉庫中線上渲染閱讀,無需額外工具。
  • 各語言版本內容一致,入口見 docs/README.md 索引。