246 lines
8.7 KiB
Plaintext
246 lines
8.7 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_create_json_final(
|
|
IN p_uuid VARCHAR(100),
|
|
IN p_FunctionTag VARCHAR(100),
|
|
IN p_code_id VARCHAR(100), -- Wizard Template Id
|
|
IN p_is_extend VARCHAR(100),
|
|
IN p_pk VARCHAR(100),
|
|
IN p_is_bpm VARCHAR(1),
|
|
IN p_FunctionTag_org VARCHAR(100)
|
|
)
|
|
/*
|
|
功能 : 最後步驟, 將之前所有寫入暫存表的變數, 寫入 source
|
|
描述: 一次性的 update 到 @temp_code, 並寫入 json db
|
|
建立日期 : 2023/12/22
|
|
|
|
修改歷史
|
|
項目 誰 日期 修改說明
|
|
==== ========== ========== ================================================
|
|
1 Michael 2023/12/22 根據 v1.0 重構
|
|
2 Michael 2024/03/06 擴充 json4 及 json5 2個欄位
|
|
*/
|
|
BEGIN
|
|
DECLARE v_temp_code MEDIUMTEXT;
|
|
DECLARE v_temp_code6 MEDIUMTEXT;
|
|
-- 跟 fields define 相關的部分要專門處理(核心程式)
|
|
DECLARE v_code_insert MEDIUMTEXT;
|
|
DECLARE v_code_update MEDIUMTEXT;
|
|
DECLARE v_code_view MEDIUMTEXT;
|
|
DECLARE v_code_gridview MEDIUMTEXT;
|
|
DECLARE v_code_quickedit MEDIUMTEXT;
|
|
|
|
DECLARE v_json_bh VARCHAR(600);
|
|
DECLARE v_json_gh VARCHAR(600);
|
|
DECLARE v_json_insert MEDIUMTEXT;
|
|
DECLARE v_json_update MEDIUMTEXT;
|
|
DECLARE v_json_quickedit MEDIUMTEXT;
|
|
DECLARE v_json_gridview MEDIUMTEXT;
|
|
DECLARE v_json_view MEDIUMTEXT;
|
|
DECLARE v_json_gf VARCHAR(600);
|
|
DECLARE v_json_bf VARCHAR(600);
|
|
DECLARE v_crlf VARCHAR(2);
|
|
DECLARE v_sep VARCHAR(1);
|
|
DECLARE v_FieldDS VARCHAR(1);
|
|
DECLARE v_FieldSH VARCHAR(1);
|
|
|
|
DECLARE v_ip VARCHAR(100);
|
|
DECLARE v_db VARCHAR(100);
|
|
DECLARE v_tmp1 VARCHAR(100);
|
|
|
|
DECLARE v_imax INT;
|
|
DECLARE v_imin INT;
|
|
DECLARE v_inow INT;
|
|
DECLARE v_pos INT;
|
|
|
|
DECLARE v_zen_key VARCHAR(100);
|
|
DECLARE v_zen_value MEDIUMTEXT;
|
|
|
|
SET v_crlf = CONCAT(CHAR(13), CHAR(10));
|
|
SET v_ip = '${ls:base_ip}';
|
|
SET v_db = '${ls:base_db}';
|
|
|
|
-- Single 類使用相同的樣板, SingleGrid 除外
|
|
IF p_code_id IN ('SingleEntry','SingleTabs','SinglePanels') THEN
|
|
SELECT code_content INTO v_temp_code FROM zen_Wizard_template WHERE code_id = 'SingleEntry';
|
|
-- Master-detail(支援 Tab 和 Panel 2種 UX -- 配合 Single Extend)
|
|
ELSEIF p_code_id IN ('MasterDetailTabs','MasterDetailPanels') THEN
|
|
SELECT code_content INTO v_temp_code FROM zen_Wizard_template WHERE code_id = 'MasterDetail';
|
|
ELSE
|
|
SELECT code_content INTO v_temp_code FROM zen_Wizard_template WHERE code_id = p_code_id;
|
|
END IF;
|
|
|
|
-- 如果是擴充表單, 要手動調整 ${ls:query_id} 的相關內容(較特殊的變數, 暫時仍手動處理)
|
|
IF p_is_extend = 'Y' THEN
|
|
SET v_tmp1 = p_pk;
|
|
SET v_pos = LOCATE(',',p_pk);
|
|
IF v_pos > 0 THEN
|
|
SET v_tmp1 = SUBSTRING(p_pk,1,v_pos-1);
|
|
END IF;
|
|
SET v_temp_code = REPLACE(v_temp_code,'${ls:query_id}',CONCAT('^',v_tmp1,'^${ls:query_id}'));
|
|
END IF;
|
|
|
|
/*
|
|
加入 bpm 表單開始簽核後, 不得編輯的語法, 要記得 template 要先加入 @bpm_edit@
|
|
*/
|
|
IF p_is_bpm = 'Y' THEN
|
|
-- "disabledOn": "${ls:hrsm12@update == null || flow_status != 'N'}", 高手的解答
|
|
SET v_temp_code = REPLACE(v_temp_code,'@bpm_edit@', CONCAT(' || flow_status != ',CHAR(39),'N',CHAR(39),'}'));
|
|
ELSE
|
|
SET v_temp_code = REPLACE(v_temp_code,'@bpm_edit@', '}');
|
|
END IF;
|
|
|
|
/*
|
|
將 zen_wizard_tmp 的變數 replace
|
|
loop 取得所有的變數, 然後 update v_temp_code
|
|
*/
|
|
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_tmp WHERE uuid = p_uuid;
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_tmp WHERE uuid = p_uuid;
|
|
|
|
WHILE v_imin <= v_imax DO
|
|
SELECT zen_key, IFNULL(zen_value,'') INTO v_zen_key, v_zen_value
|
|
FROM zen_wizard_tmp WHERE uuid = p_uuid AND rowid = v_imin;
|
|
|
|
SET v_temp_code = REPLACE(v_temp_code,CONCAT('@',v_zen_key,'@'),v_zen_value);
|
|
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_tmp WHERE uuid = p_uuid AND rowid > v_imin;
|
|
END WHILE;
|
|
|
|
/*
|
|
將 zen_wizard_jsondata 相關的欄位定義組好並更新相關變數
|
|
*/
|
|
SET v_code_insert = '';
|
|
SET v_code_update = '';
|
|
SET v_code_view = '';
|
|
SET v_code_gridview = '';
|
|
SET v_code_quickedit = '';
|
|
|
|
-- FieldSH = 'Y' 的處理
|
|
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata WHERE uuid = p_uuid AND FieldSH = 'Y';
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid AND FieldSH = 'Y';
|
|
|
|
WHILE v_imin <= v_imax DO
|
|
SELECT
|
|
IFNULL(json_bh,''), IFNULL(json_gh,''), FieldSH,
|
|
IFNULL(json_insert,''), IFNULL(json_update,''), IFNULL(json_quickedit,''),
|
|
IFNULL(json_gridview,''), IFNULL(json_view,''),
|
|
IFNULL(json_gf,''), IFNULL(json_bf,'')
|
|
INTO
|
|
v_json_bh, v_json_gh, v_FieldSH,
|
|
v_json_insert, v_json_update, v_json_quickedit,
|
|
v_json_gridview, v_json_view,
|
|
v_json_gf, v_json_bf
|
|
FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid = v_imin;
|
|
|
|
IF v_FieldSH = 'Y' THEN
|
|
IF (v_imin = v_imax) THEN
|
|
SET v_sep = '';
|
|
ELSE
|
|
SET v_sep = ',';
|
|
END IF;
|
|
|
|
IF v_json_insert <> '' THEN
|
|
SET v_code_insert = CONCAT(v_code_insert, v_json_bh, v_json_gh, v_json_insert, v_json_gf, v_json_bf, v_sep, v_crlf);
|
|
END IF;
|
|
|
|
IF v_json_update <> '' THEN
|
|
SET v_code_update = CONCAT(v_code_update, v_json_bh, v_json_gh, v_json_update, v_json_gf, v_json_bf, v_sep, v_crlf);
|
|
END IF;
|
|
|
|
IF v_json_view <> '' THEN
|
|
SET v_code_view = CONCAT(v_code_view, v_json_bh, v_json_gh, v_json_view, v_json_gf, v_json_bf, v_sep, v_crlf);
|
|
END IF;
|
|
END IF;
|
|
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid > v_imin;
|
|
END WHILE;
|
|
|
|
-- FieldDS = 'Y' 的處理
|
|
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata WHERE uuid = p_uuid AND FieldDS = 'Y';
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid AND FieldDS = 'Y';
|
|
|
|
WHILE v_imin <= v_imax DO
|
|
SELECT
|
|
IFNULL(json_bh,''), IFNULL(json_gh,''), FieldDS,
|
|
IFNULL(json_insert,''), IFNULL(json_update,''), IFNULL(json_quickedit,''),
|
|
IFNULL(json_gridview,''), IFNULL(json_view,''),
|
|
IFNULL(json_gf,''), IFNULL(json_bf,'')
|
|
INTO
|
|
v_json_bh, v_json_gh, v_FieldDS,
|
|
v_json_insert, v_json_update, v_json_quickedit,
|
|
v_json_gridview, v_json_view,
|
|
v_json_gf, v_json_bf
|
|
FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid = v_imin;
|
|
|
|
IF v_FieldDS = 'Y' THEN
|
|
IF (v_imin = v_imax) THEN
|
|
SET v_sep = '';
|
|
ELSE
|
|
SET v_sep = ',';
|
|
END IF;
|
|
|
|
IF v_json_gridview <> '' THEN
|
|
SET v_code_gridview = CONCAT(v_code_gridview, v_json_gridview, v_sep, v_crlf);
|
|
END IF;
|
|
|
|
IF v_json_quickedit <> '' THEN
|
|
SET v_code_quickedit = CONCAT(v_code_quickedit, v_json_quickedit, ',', v_crlf);
|
|
END IF;
|
|
END IF;
|
|
|
|
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid > v_imin;
|
|
END WHILE;
|
|
|
|
/*
|
|
新增 bpm 的簽核 button-group, 都新增在 view 的程式段中
|
|
要加入判斷是否為 bpm 表單(在 zenBusiness 中)
|
|
*/
|
|
IF p_is_bpm = 'Y' THEN
|
|
SELECT zen_bpm_define(p_FunctionTag,p_FunctionTag_org,p_pk,v_ip,v_db) INTO v_temp_code6;
|
|
SET v_code_view = CONCAT(v_temp_code6, v_code_view);
|
|
END IF;
|
|
|
|
SET v_temp_code = REPLACE(v_temp_code,'@Fields_by_add@',v_code_insert);
|
|
SET v_temp_code = REPLACE(v_temp_code,'@Fields_By_GridView@',CONCAT(v_code_gridview,','));
|
|
SET v_temp_code = REPLACE(v_temp_code,'@Fields_By_View@',v_code_view);
|
|
SET v_temp_code = REPLACE(v_temp_code,'@Fields_By_Edit@',v_code_update);
|
|
SET v_temp_code = REPLACE(v_temp_code,'@Fields_By_GridView_Edit@',v_code_quickedit);
|
|
|
|
/*
|
|
如果內容有誤, 當然就不要更新到 db
|
|
*/
|
|
IF IFNULL(v_temp_code,'') = '' THEN
|
|
SELECT 9 AS code,'error' AS msg;
|
|
SELECT v_temp_code AS jsoncode;
|
|
ELSE
|
|
-- 統一將 orm_api 改為 v3
|
|
-- SET v_temp_code = REPLACE(v_temp_code,'/v2/','/v3/');
|
|
-- 如果專案是 wizard, 將 db 改為 wizard_db (先 hard code, 目前暫時不想再加欄位)
|
|
IF SUBSTRING(p_FunctionTag,1,3) = 'zen' THEN
|
|
SET v_temp_code = REPLACE(v_temp_code,'${ls:base_db}','${ls:wizard_db}');
|
|
END IF;
|
|
|
|
-- 因為有長度的限制, 所以試著將程式依大小(40000) 切割 -- Cancel
|
|
|
|
/*
|
|
for ViewForm / CreateForm
|
|
*/
|
|
SET p_FunctionTag = p_FunctionTag_org;
|
|
|
|
-- Insert into
|
|
SELECT COUNT(*) INTO v_inow FROM zen_jsoncode WHERE FunctionTag = p_FunctionTag AND version = 'beta';
|
|
IF v_inow > 0 THEN
|
|
UPDATE zen_jsoncode
|
|
SET jsonCode = v_temp_code
|
|
WHERE FunctionTag = p_FunctionTag AND version = 'beta';
|
|
ELSE
|
|
INSERT INTO zen_jsoncode (FunctionTag,version,jsonCode)
|
|
VALUES (p_FunctionTag,'beta',v_temp_code);
|
|
END IF;
|
|
|
|
SELECT 0 AS code,'ok' AS msg;
|
|
SELECT v_temp_code AS jsoncode;
|
|
END IF;
|
|
END //
|
|
|
|
DELIMITER ; |