DELIMITER // CREATE OR REPLACE PROCEDURE zen_create_json_detail( IN p_uuid VARCHAR(100), IN p_uuid_m VARCHAR(100), IN p_FunctionTag VARCHAR(100), IN p_code_id VARCHAR(100), -- Wizard Template Id IN p_pk VARCHAR(100) ) /* 功能 : 針對 Master-Detail 的 Detail, 原本是呼叫 dbo.zen_get_detail_data, 重構後就不必呼叫該 udf, 改為本 sp 下方的寫法 描述: 主要是由 zen_create_json_prepare_detaildata 呼叫使用 主要是計算並替換下面3個變數的內容(寫入暫存檔) @Detail_By_add@ @Detail_By_view@ @Detail_By_Edit@ 建立日期 : 2024/1/8 修改歷史 項目 誰 日期 修改說明 ==== ========== ========== ================================================ 1 Michael 2024/1/8 根據 v1.0 重構 */ BEGIN -- 跟 fields define 相關的部分要專門處理(核心程式) DECLARE v_code_insert TEXT; DECLARE v_code_update TEXT; DECLARE v_code_view TEXT; DECLARE v_code_gridview TEXT; DECLARE v_code_quickedit TEXT; DECLARE v_code_edit_insert TEXT; -- 修改模式下的 insert DECLARE v_json_bh VARCHAR(600); DECLARE v_json_gh VARCHAR(600); DECLARE v_json_insert TEXT; -- input-table 的 in-line editor DECLARE v_json_update TEXT; DECLARE v_json_quickedit TEXT; DECLARE v_json_gridview TEXT; DECLARE v_json_view TEXT; 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_imax INT; DECLARE v_imin INT; DECLARE v_inow INT; DECLARE v_pos INT; DECLARE v_zen_key VARCHAR(100); DECLARE v_zen_value TEXT; SET v_crlf = CONCAT(CHAR(13), CHAR(10)); /* 將 zen_wizard_jsondata 相關的欄位定義組好並更新相關變數 */ SET v_code_insert = ''; SET v_code_update = ''; SET v_code_view = ''; SET v_code_gridview = ''; SET v_code_quickedit = ''; SET v_code_edit_insert = ''; -- 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,''), 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_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_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_insert, v_sep, v_crlf); SET v_code_edit_insert = CONCAT(v_code_edit_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; 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,''), 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_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_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; SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid > v_imin; END WHILE; -- 寫入暫存表 INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid_m,'Detail_By_View',v_code_gridview,NOW()); INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid_m,'Detail_By_Insert',v_code_insert,NOW()); INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid_m,'Detail_By_Edit',v_code_update,NOW()); -- input-table 的 insert INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid_m,'Detail_By_Edit_Insert',v_code_edit_insert,NOW()); END // DELIMITER ;