Files
Omni_wizard.db/readme.txt
T
2026-03-16 00:40:10 +08:00

190 lines
6.0 KiB
Plaintext

/*
準備要重構 Wizard 程式
基本上每一支程式都不應該超過 150 行(最多不應超過 200 行), 否則日後的維護會非常麻煩, 會改不動
所有程式都要加上 xxxx_v2
想法是把原程式中一堆的變數, 仍沿用原邏輯, 但是都寫入 zen_wizard_tmp, 最後再開始 replace 變數內容
處理變數的過程會變成 update 暫存變數欄位內容的過程
一邊搬 code 一邊讚嘆我自己, 怎麼寫得出這麼複雜的 Wizard, 重構起來真要人命啊
Michael 2023/12/19
除了 zen_create_json_v2, 繼續往下重構, 看起來還有
dbo.zen_get_detail_data
zen_create_query_json_v2
2024/01/03 我真是自找麻煩阿
*/
1.因為邏輯很複雜, 變數一大堆, 我想要設定一個暫存表紀錄, 方便再細分的 proc 或 func 中直接取用, 否則傳參會傳到瘋掉, 也方便 debug
CREATE TABLE zen_wizard_tmp (
uuid VARCHAR(100),
zen_key VARCHAR(100),
zen_value LONGTEXT, -- Using LONGTEXT instead of NVARCHAR(MAX) for large content
create_date DATETIME DEFAULT CURRENT_TIMESTAMP,
rowid INT AUTO_INCREMENT PRIMARY KEY,
INDEX IDX_zen_wizard_tmp (uuid)
);
/*
set @temp_code = replace(@temp_code,'@Fields_by_add@',@ret1);
set @temp_code = replace(@temp_code,'@Fields_By_GridView@',@ret2+',');
set @temp_code = replace(@temp_code,'@Fields_By_View@',@ret3);
set @temp_code = replace(@temp_code,'@Fields_By_Edit@',@ret7); -- 原先是 @ret1(Add/Update 不分)
set @temp_code = replace(@temp_code,'@Fields_By_GridView_Edit@',@ret4);
*/
-- 用以替代程式中的 @jsondata
CREATE TABLE zen_wizard_jsondata (
uuid VARCHAR(100),
FieldName VARCHAR(100),
FieldCN VARCHAR(100),
FieldWidth INT,
FieldObject VARCHAR(100),
FieldCheckNull VARCHAR(10),
picker_tag VARCHAR(100),
fielddefault VARCHAR(200),
fieldro VARCHAR(1),
fieldfm VARCHAR(20),
FieldBlock SMALLINT,
FieldDS VARCHAR(10),
FieldSH VARCHAR(10),
CELLNO SMALLINT,
CELLX SMALLINT,
CELLY SMALLINT,
CELLLINE SMALLINT,
iscolumnmatch CHAR(1),
visibleOn VARCHAR(100),
_group VARCHAR(10),
_block VARCHAR(10),
rowid INT,
-- JSON data fields
json_bh LONGTEXT, -- block header
json_gh LONGTEXT, -- group header
json_insert LONGTEXT, -- 將這個元件要組出來的新增設定暫存起來
json_update LONGTEXT, -- 將這個元件要組出來的修改設定暫存起來
json_quickedit LONGTEXT, -- 將這個元件要組出來的 Quick Edit 設定暫存起來
json_gridview LONGTEXT, -- 將這個元件要組出來的 GridView 設定暫存起來
json_view LONGTEXT, -- 將這個元件要組出來的 grid 查詢設定暫存起來
json_gf LONGTEXT, -- group footer
json_bf LONGTEXT, -- block footer
--
create_date DATE DEFAULT CURRENT_DATE,
INDEX IDX_zen_zen_wizard_jsondata (uuid)
);
/*
zen_fields 新增欄位(Server 已更新)
visibleOn 給 picker 設定一某欄某值是否顯示用
*/
alter table zen_fields add visibleOn varchar(100);
update zen_fields set visibleOn = 'cal_level,Personal' where functiontag='eipm02' and fieldname = 'personid';
update zen_fields set visibleOn = 'cal_level,Department' where functiontag='eipm02' and fieldname = 'departmentid';
update zen_fields set visibleOn = 'cal_level,Project' where functiontag='eipm02' and fieldname = 'projectid';
--
update zen_fields set visibleOn = 'cal_repeated_flag,none' where functiontag='eipm02' and fieldname = 'cal_repeated_sdate';
update zen_fields set visibleOn = 'cal_repeated_flag,none' where functiontag='eipm02' and fieldname = 'cal_repeated_edate';
alter table zen_jsoncode add jsonCode4 varchar(max);
alter table zen_jsoncode add jsonCode5 varchar(max);
/*
重構後的程式架構如下
*/
zen_create_json_v2
+ zen_create_json_reset_codeid
+ zen_create_json_prepare_ds
+ zen_create_json_prepare
+ zen_get_ext_button (new add)
+ zen_create_json_prepare_aside
+ zen_create_json_prepare_detaildata
+ 原本會呼叫 dbo.zen_get_detail_data, 重構後不再呼叫
+ zen_create_json_prepare_gridquery
*** main loop ***
+ zen_create_json_kernel
+ zen_create_json_comps_block
+ zen_create_json_comps_others
+ udf_create_json_comps_blob
+ zen_get_keyvalue (new add)
+ zen_create_json_comps_others_gridview
+ zen_create_json_comps_others_quickedit
+ zen_create_json_comps_others_view
+ zen_create_json_comps_picker
+ zen_picker (new add)
+ zen_create_json_comps_formula
+ zen_create_json_comps_cycles
+ zen_create_json_comps_transfer
*** final ***
+ zen_create_json_final
+ zen_bpm_define ** 應該是專門處理 bpm code
/*
test sql
select * from zen_jsoncode where functiontag = 'crmm02'
*/
delete from zen_wizard_tmp;
delete from zen_wizard_jsondata;
-- 如果是 MySQL/Maiadb 要改為 call zen_xxx
-- exec zen_create_json_v2 'basm63','SingleGrid';
-- exec zen_create_json_v2 'basm67','SinglePanels';
-- exec zen_create_json_v2 'basm51','SingleTabs';
-- exec zen_create_json_v2 'pmsm11','MasterDetail-New';
-- exec zen_create_json_v2 'crmm02','MasterDetail-New'; -- 會報錯
-- exec zen_create_json_v2 'crmm09','MasterDetail-New'; -- 會報錯
-- exec zen_create_json_v2 'eipm11','MasterDetail-Log'; -- 會報錯
exec zen_create_json_v2 'eipm02','SingleEntry'; -- 會報錯
select * from zen_wizard_tmp;
select * from zen_wizard_jsondata;
/*
*/
zen_create_query_json_v2
+ step 1: prepare
+ step 2: sp_para_filter
+ step 3: query_fields
+ step 4: button
+ step 5: query UX
+ step 6: final
/*
更版注意事項
*/
1.更新本文檔紀錄的新增 Tables 及 sp
2.更新 Template (MasterDetail-New)
3.更新 Wizard 中的 genCode 改呼叫 orm_api_v2 及 zen_create_json_v2
query 暫時先不更新
/*
eipm02, eipm19 的 zen_fields 的資料內容修改如下
也有修改 zen_picker, 主要是要配合顯示 picker
下列欄位不用
cal_holiday
cal_holiday_country
cal_repeated_time
新增下面4個欄位
s_date
s_time
e_date
e_time
並將 start_time 及 end_time 設為 formula
查詢欄位(公式)設為
start_time = s_date + CHAR(32) + s_time
end_time = e_date + CHAR(32) + e_time
*/