/* 準備要重構 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 */