PowerBuilder 提供了最基本的信息盒,但如果都在代碼裏面直接使用的話,那就難以支持多語言、沒彈性、用字也不易統一,因為不同程式員會有不同的習慣,可能 A 程式員用「請問需要儲存嗎?」,B 程式員卻問「是否要保存?」,這讓用戶體驗不好,後續也難以維護。
為了改良以上的問題,我們可以在調用 MessageBox() 前多加點功夫。過程中需要:
- 一個 PB function
- 信息設定表
- 日誌表
用原來的 PB messagebox() 要這麼寫:
messagebox('問題','確定要把 Q1712220028 的狀態由「正在裝貨」返回到「可裝貨」?', Question!, YesNo!, 2)
在新 PB function 只要這麼寫,這裏為方便理解,本來該從數據庫另外取的「正在裝貨, 可裝貨」我就先直接寫出來了:
f_msg('01', '052', 'Q1712220028 ', '正在裝貨', '可裝貨')
- 「01」是語言編碼
- 「052」是信息編碼,與「01」加起來就可以找到預設信息:確定要把 % 的狀態由「%」返回到「%」?
- 把「%」按順序替換,信息內容就變成了:確定要把 Q1712220028 的狀態由「正在裝貨」返回到「可裝貨」?
- 加上設定表中的圖示、按鈕、默認按等就可以調用 MessageBox() 了
- 再按日誌標誌(msg_log)去判定是否需要寫日誌,以下圖為例,在什麼時候彈出信息給誰看,而當時用戶(HLH)點下哪個按鈕(1 - YES) 作回應都記錄下來,以防奧客事後耍賴
另外信息編碼也有定位的作用,你可以憑編碼到 PowerBuilder 裏面 Search ,把所有用到這信息的地方都列出來,以作 Debug 之用。要是用戶能提供屏幕截圖,你更可以在指定窗體找到是哪裏彈出的信息呢。
CREATE TABLE t_msg_mst(
msg_code varchar(50) NOT NULL, -- 信息編碼
lang_code varchar(50) NOT NULL, -- 語言編碼
msg_hdr varchar(255) NULL, -- 信息標題
msg_text varchar(255) NULL, -- 信息內容,「%」為將要換成變量的位置
icon varchar(50) NOT NULL, -- 圖示
button varchar(50) NOT NULL, -- 按鈕
set_button int NOT NULL, -- 默認按鈕
create_by varchar(50) NULL, -- 創建人
update_by varchar(50) NULL, -- 更新人
time_create datetime NULL, -- 創建時間
time_update datetime NULL, -- 更新時間
msg_log char(1) NULL) -- 是否寫日誌
CREATE TABLE t_log_msg(
id int IDENTITY(1,1) NOT NULL, -- 主鍵
msg_code varchar(50) NOT NULL, -- 信息編碼
lang_code varchar(50) NULL, -- 語言編碼
msg_hdr varchar(255) NULL, -- 信息標題
msg_text varchar(255) NULL, -- 信息內容
prompt_to varchar(50) NULL, -- 用戶編碼
feedback varchar(10) NULL, -- 用戶回應,點了哪個按鈕
time_create datetime NOT NULL) -- 創建時間