first commit
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE zen_create_json_v2(
|
||||
IN p_FunctionTag VARCHAR(100),
|
||||
IN p_code_id VARCHAR(100) -- Wizard Template Id
|
||||
)
|
||||
/*
|
||||
function : amis Wizard 產生程式的核心程式(Single / Master-Detail)
|
||||
description:
|
||||
測試時發現還是有長度的限制, 大約超過 1500 行左右, 就會因為長度被截掉的問題而報錯(這是 SQL 本身的問題(寫入 db時會被截掉), 和 amis 無關)
|
||||
長度問題暫時無解, 目前先改為寫到 3個欄位(40000 字左右為一欄), 只能用原始的 json 存放程式, menu 要多一個外部 json 設定
|
||||
隨著支援的功能愈來越多, 超過 40000 字應該會是常態, 所以外部 json 應該會是常態(menu 多一個 isLocalMenu 的欄位設定, 測試 ok)
|
||||
build date : 2023-12-19
|
||||
|
||||
call sample:
|
||||
CALL zen_create_json_v2('crmm02','MasterDetailTabs');
|
||||
CALL zen_create_json_v2('basm63','SingleGrid');
|
||||
-- 單據明細查詢表單
|
||||
CALL zen_create_json_v2('crmm02_v','MasterDetail-View');
|
||||
CALL zen_create_json_v2('basm67_i','SingleEntry-Insert');
|
||||
|
||||
modify history
|
||||
item who date modify docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2023-12-19 開始重構為 v2.0(先 copy v1 完整 source from 20231215)
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_uuid CHAR(36);
|
||||
DECLARE v_FunctionTag_org VARCHAR(100);
|
||||
DECLARE v_funcName VARCHAR(100);
|
||||
DECLARE v_tblName VARCHAR(100);
|
||||
DECLARE v_pk VARCHAR(100);
|
||||
DECLARE v_database VARCHAR(100);
|
||||
DECLARE v_detail_table VARCHAR(100);
|
||||
DECLARE v_detail_key VARCHAR(100);
|
||||
DECLARE v_isautoinc VARCHAR(1);
|
||||
DECLARE v_aside_setup VARCHAR(100);
|
||||
DECLARE v_aside_field VARCHAR(100);
|
||||
DECLARE v_query_type VARCHAR(1);
|
||||
DECLARE v_op_width INT;
|
||||
DECLARE v_is_bpm VARCHAR(1);
|
||||
DECLARE v_is_extend VARCHAR(1);
|
||||
DECLARE v_detail_sort_fieldname VARCHAR(20);
|
||||
|
||||
SET v_uuid = UUID();
|
||||
|
||||
-- v2: 欲處理資料, 變數寫入 zen_wizard_tmp 暫存表
|
||||
DELETE FROM zen_wizard_tmp WHERE create_date < DATE_SUB(NOW(), INTERVAL 1 DAY);
|
||||
DELETE FROM zen_wizard_jsondata WHERE create_date < DATE_SUB(NOW(), INTERVAL 1 DAY);
|
||||
|
||||
-- v2: 重新設定
|
||||
/*
|
||||
配合 Wizard 有一併支援 view only, insert only 等不完全程式
|
||||
p_FunctionTag = crmm02 產生查詢專用的 ViewForm
|
||||
v_FunctionTag_org = crmm02_V
|
||||
p_code_id =
|
||||
*/
|
||||
SET v_FunctionTag_org = p_FunctionTag; -- 保留原代號
|
||||
CALL zen_create_json_reset_codeid(v_uuid, p_FunctionTag, p_code_id, v_query_type);
|
||||
|
||||
-- 重新讀出變數值
|
||||
SELECT zen_value INTO p_FunctionTag FROM zen_wizard_tmp WHERE uuid = v_uuid AND zen_key = 'FunctionTag';
|
||||
SELECT zen_value INTO p_code_id FROM zen_wizard_tmp WHERE uuid = v_uuid AND zen_key = 'code_id';
|
||||
|
||||
-- get data from zen_function
|
||||
SELECT
|
||||
fn.FunctionName, fn.MainTable, fn.MainKey, pm.api_DBName, fn.detail_table,
|
||||
fn.detail_key, fn.isautoinc, fn.aside_setup, fn.aside_field,
|
||||
fn.query_type, fn.op_width, fn.is_bpm, fn.is_extend, fn.detail_sort_fieldname
|
||||
INTO
|
||||
v_funcName, v_tblName, v_pk, v_database, v_detail_table,
|
||||
v_detail_key, v_isautoinc, v_aside_setup, v_aside_field,
|
||||
v_query_type, v_op_width, v_is_bpm, v_is_extend, v_detail_sort_fieldname
|
||||
FROM zen_function fn
|
||||
LEFT JOIN zen_project pm ON fn.projectid = pm.projectid
|
||||
WHERE fn.FunctionTag = p_FunctionTag;
|
||||
|
||||
-- v2: 將主要的 dataset 整理後寫入
|
||||
CALL zen_create_json_prepare_ds('M', v_uuid, p_FunctionTag);
|
||||
|
||||
-- v2: 資料預處理
|
||||
CALL zen_create_json_prepare(v_uuid, p_FunctionTag, p_code_id, v_is_extend, v_query_type,
|
||||
v_funcName, v_tblName, v_pk, v_database, v_op_width);
|
||||
|
||||
-- 如果 PK 是 identity, 則強制設為 readonly
|
||||
IF IFNULL(v_isautoinc, 'N') = 'Y' THEN
|
||||
UPDATE zen_fields SET fieldro = 'Y'
|
||||
WHERE FunctionTag = p_FunctionTag AND tablename = v_tblName AND fieldname = v_pk;
|
||||
END IF;
|
||||
|
||||
-- v2: aside
|
||||
CALL zen_create_json_prepare_aside(v_uuid, v_aside_setup);
|
||||
|
||||
-- v2: 關於 master-detail 的相關設定(TBD)
|
||||
CALL zen_create_json_prepare_detaildata(v_uuid, p_FunctionTag, p_code_id, v_detail_table,
|
||||
v_detail_key, v_detail_sort_fieldname, v_query_type);
|
||||
|
||||
-- v2: Grid Header 處理(Fields loops)
|
||||
CALL zen_create_json_prepare_gridquery(v_uuid, v_query_type);
|
||||
|
||||
/*
|
||||
以下是核心, 主要是準備 gen code 的前置作業
|
||||
*/
|
||||
-- v2: kernel compoment
|
||||
CALL zen_create_json_kernel(v_uuid, p_FunctionTag, v_tblName, v_pk, v_query_type, p_code_id);
|
||||
|
||||
-- v2: 將暫存資料整理並寫入
|
||||
CALL zen_create_json_final(v_uuid, p_FunctionTag, p_code_id, v_is_extend, v_pk, v_is_bpm, v_FunctionTag_org);
|
||||
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user