first commit

This commit is contained in:
DATAEXPRESS\4734
2026-02-06 14:44:08 +08:00
commit 3b3e190726
42 changed files with 5385 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
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 ;