111 lines
4.9 KiB
Plaintext
111 lines
4.9 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_showsource (
|
|
IN p_functiontag VARCHAR(100),
|
|
IN p_version VARCHAR(100),
|
|
IN p_ip varchar(100)
|
|
)
|
|
/*
|
|
function : 配合 amis 的 Service 元件, 取回 jsoncode, 動態產生程式的核心程式
|
|
description: 開啟表單時通常會有預設條件, 這是一個很接近 hard-code 的機制, 但是因為 amis 限制太多, 只好硬開洞解決
|
|
1.原程式的 crud 若有 ${ls:query_id} ==> 固定變數設定(如下)
|
|
"_$_query_filter": "1^10^functiontag,celly,seqno^*^^^functiontag,report_type,report_orderby^${ls:query_id}"
|
|
2.sp 的 @version 內容如果有傳入 @, 那 @ 後的內容就是要 replace 的內容
|
|
3.就把 ${ls:query_id} replace 掉, 用這種方式解決動態載入程式, 並能限制資料內容
|
|
4.目前是針對 zen12(如上設定), 呼叫 zen14 先測試使用, 如果沒問題可以考慮變成標準機制
|
|
|
|
如果 @version 內容中沒有 @, 那就是一般程式, @_W_ 表示是為可編輯 Source 狀態
|
|
build date : 2021/10/17
|
|
|
|
call sample:
|
|
CALL zen_showsource('zen14','beta@crmr02','https://api.gex.com.tw:5443')
|
|
|
|
modify history
|
|
item who date modify docs
|
|
==== ========== ========== ================================================
|
|
1 michael 2021-10-17 新增
|
|
2 Michael 2021-10-18 amis 的 crud grid 傳入的 id 似乎是前一筆, 這個 bug 已經有人提, 等改版(已修正)
|
|
3 Michael 2022-02-05 加入防錯
|
|
4 Michael 2022-07-14 加入 IP Router 新機制(仍維持向上相容)
|
|
5 Michael 2022-11-26 加入例外機制, bpmq11, q12
|
|
6 Michael 2023-01-25 新增 @values=_W_ 的判斷, 非 _W_ 為 Read Only, 只有在 Source 編輯狀態下, 才會傳入 _W_
|
|
7 Michael 2023-02-01 為了更加彈性, @ip 這個欄位改傳入 ${ls:base_ip}
|
|
8 Michael 2023-04-04 改依參數檔設定的程式版本別
|
|
9 Michael 2023-05-20 size=full, 改為 size=xl, 因 amis 3.0 改版
|
|
10 Michael 2024-02-12 重構程式後, 重新想清楚邏輯後調整 code
|
|
11 Michael 2024/03/06 擴充 json4 及 json5 2個欄位
|
|
*/
|
|
BEGIN
|
|
-- @version 最終會是版本別, 目前應該只會是 beta 或 prod
|
|
-- @value 則是表單傳值, 要限制開窗表單的資料內容, 若無, 應該要空白
|
|
DECLARE v_version_org VARCHAR(100);
|
|
DECLARE v_values VARCHAR(100);
|
|
DECLARE v_pvalue VARCHAR(100);
|
|
DECLARE v_ipos SMALLINT;
|
|
DECLARE v_rets LONGTEXT;
|
|
DECLARE v_isNew INT;
|
|
DECLARE v_final_version VARCHAR(100);
|
|
|
|
/*
|
|
傳入時 @version 可能會有下列內容
|
|
1.只要含 _W_ 就表示是編輯 source, 直接顯示原內容, 不要有任何 replace
|
|
2.{ls:query_id}
|
|
3.beta@A001
|
|
*/
|
|
SET v_version_org = p_version;
|
|
SET v_values = '';
|
|
SET v_ipos = INSTR(p_version, '@');
|
|
SET v_final_version = IFNULL(p_version, 'beta');
|
|
|
|
IF v_ipos > 0 THEN
|
|
-- _W_: Writeables(編輯 Source Code 的狀態)
|
|
SET v_values = SUBSTRING(p_version, v_ipos+1);
|
|
SET v_final_version = SUBSTRING(p_version, 1, v_ipos-1);
|
|
END IF;
|
|
|
|
-- 依設定的程式版本別設定變數 2023/04/04, @version 一定要有值
|
|
IF (SELECT COUNT(*) FROM information_schema.TABLES
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_parameter') > 0 THEN
|
|
SELECT pvalue INTO v_pvalue FROM sys_parameter
|
|
WHERE systemid = 'base' AND pid = 'ver_type' LIMIT 1;
|
|
|
|
IF v_pvalue IS NOT NULL AND v_pvalue <> '' THEN
|
|
SET v_final_version = v_pvalue;
|
|
END IF;
|
|
END IF;
|
|
|
|
-- 取得 JSON 代碼(擴充欄位)
|
|
-- SELECT CONCAT(IFNULL(jsoncode,''), IFNULL(jsoncode2,''), IFNULL(jsoncode3,''),
|
|
-- IFNULL(jsoncode4,''), IFNULL(jsoncode5,'')) INTO v_rets
|
|
|
|
SELECT jsoncode INTO v_rets
|
|
FROM zen_jsoncode
|
|
WHERE functiontag = p_functiontag AND version = v_final_version;
|
|
|
|
-- 只要有 _W_ 就表示不動 code, 完全顯示原本的內容
|
|
IF INSTR(v_version_org, '_W_') <= 0 THEN
|
|
-- 主要的核心程式, 替換掉 ls 的內容
|
|
IF v_values <> '' THEN
|
|
SET v_rets = REPLACE(v_rets, '${ls:query_id}', v_values);
|
|
END IF;
|
|
|
|
/*
|
|
這個地方的原寫法是錯的, 本意是當 localStorage 如果未設定值, 執行時會報錯
|
|
但是會造成只要先讀再寫, ${ls:query_id} 就會被從 json 設定(source code) 中移除, 那就會造成這個設定不見了
|
|
正確的作法是要確保 ls 一定會在被呼叫前清除, 再傳入 ls 當作參數
|
|
Michael 2023/1/25
|
|
*/
|
|
-- 防錯, 若有多餘的設定要防錯 2022-2-5, 加上除外機制
|
|
IF INSTR(v_rets, '${ls:query_id}') > 0 AND (p_functiontag NOT IN ('bpmq11','bpmq12')) THEN
|
|
SET v_rets = REPLACE(v_rets, '${ls:query_id}', '');
|
|
END IF;
|
|
ELSE
|
|
SET v_rets = REPLACE(v_rets, '_W_', '');
|
|
END IF;
|
|
|
|
-- 返回結果
|
|
SELECT 0 AS code, 'OK' AS msg;
|
|
SELECT v_rets AS jsoncode;
|
|
END//
|
|
|
|
DELIMITER ; |