DELIMITER // CREATE OR REPLACE FUNCTION udf_create_json_comps_blob( p_FieldObject VARCHAR(200), p_tblName VARCHAR(100), p_FieldName VARCHAR(100) ) RETURNS TEXT /* function : zen_create_json_comps_others 的 kernel udf, 處理一段共用元件的基本設定 description: build date : 2023/12/22 modified : 2025/08/09 (轉換為 MariaDB 版本) modify history item who date modify docs ==== ========== ========== ================================================ 1 michael 2023/12/22 根據 v1.0 重構 2 assistant 2025/08/09 轉換為 MariaDB 版本 */ BEGIN DECLARE v_blob_data TEXT; DECLARE v_accept_type VARCHAR(200); DECLARE v_u_type VARCHAR(200); DECLARE v_ip VARCHAR(200); DECLARE v_db VARCHAR(200); DECLARE v_crlf VARCHAR(2); SET v_crlf = CONCAT(CHAR(13), CHAR(10)); SET v_ip = '${ls:base_ip}'; SET v_db = '${ls:base_db}'; -- Input-image 和 file 會多一些 properties -- input-file 有 "multiple": true, 但是測試有問題, 所以暫不支援 SET v_blob_data = ''; IF p_FieldObject = 'input-file' OR p_FieldObject = 'input-image' THEN IF p_FieldObject = 'input-file' THEN SET v_accept_type = '.pdf,.doc,.docx,.xls,.xlsx,.txt,.csv'; SET v_u_type = 'files'; ELSE SET v_accept_type = '.jpg,.png,.jpeg'; SET v_u_type = 'images'; END IF; SET v_blob_data = CONCAT( ' "accept": "', v_accept_type, '",', v_crlf, ' "//multiple": true,', v_crlf, ' "receiver": "', v_ip, '/upload/', v_db, '/', v_u_type, '/",', v_crlf ); ELSEIF p_FieldObject = 'textarea' THEN SET v_blob_data = CONCAT( ' "showCounter": true,', v_crlf ); ELSEIF p_FieldObject = 'select' THEN -- select 要分為2種, 一種是固定內容(直接產生 options), 另一種是動態讀取資料庫(select from source 如下) SET v_blob_data = CONCAT( ' "source": {', v_crlf, ' "method": "post",', v_crlf, ' "url": "', v_ip, '/xapi/v2/', v_db, '/get_keyvalue/8/",', v_crlf, ' "data": {', v_crlf, ' "para01": "', p_tblName, '",', v_crlf, ' "para02": "', p_FieldName, '"', v_crlf, ' },', v_crlf, ' "dataType": "form"', v_crlf, ' },', v_crlf ); ELSEIF p_FieldObject IN ('options', 'options-add', 'mapping') THEN -- 新增 options-add, 可以臨時新增前端選項(不會存起來) 2022-10-01 -- 取得 key-value SET v_blob_data = zen_get_keyvalue(p_tblName, p_FieldName); IF p_FieldObject = 'options-add' THEN SET v_blob_data = CONCAT( ' "creatable": true,', v_crlf, ' "addControls": [', v_crlf, ' {', v_crlf, ' "type": "text",', v_crlf, ' "name": "label",', v_crlf, ' "label": "選項標題"', v_crlf, ' },', v_crlf, ' {', v_crlf, ' "type": "text",', v_crlf, ' "name": "value",', v_crlf, ' "label": "選項值"', v_crlf, ' }', v_crlf, ' ],', v_crlf, v_blob_data ); END IF; ELSEIF p_FieldObject = 'radios' THEN -- 取得 key-value SET v_blob_data = zen_get_keyvalue(p_tblName, p_FieldName); ELSEIF p_FieldObject IN ('switch', 'checkbox') THEN SET v_blob_data = CONCAT( ' "trueValue": "Y",', v_crlf, ' "falseValue": "N",', v_crlf ); END IF; RETURN IFNULL(v_blob_data, ''); END // DELIMITER ;