189 lines
6.0 KiB
Plaintext
189 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
|
|
|
|
|
|
/*
|
|
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
|
|
|
|
*/
|