first commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpm_sign_finish (
|
||||
IN p_token VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的 bpm, 取得 [已結案事項清單]
|
||||
Description: 所有曾經簽核過, 且已經結案的 flow
|
||||
Build Date : 2022/11/16
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/16
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
-- token 轉 userid
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
main_block: BEGIN
|
||||
IF v_userid = '' THEN
|
||||
LEAVE main_block; -- 結束程序
|
||||
END IF;
|
||||
|
||||
-- 回傳狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
-- 判斷原單已結案? 沒有 P 應該就是已結案
|
||||
WITH data AS (
|
||||
SELECT flow_id, sourceid, COUNT(*) AS not_end
|
||||
FROM bpm_flow_sign
|
||||
WHERE sign_status = 'P'
|
||||
GROUP BY flow_id, sourceid
|
||||
)
|
||||
SELECT
|
||||
b.functiontag, b.flow_name, a.sourceid, a.sourceid AS billno, a.sign_note,
|
||||
a.sign_status, KV.keyvalue AS sign_status_name, d.departmentcname,
|
||||
a.signerid, p.personcname, a.stepName, cloud_addtime(a.create_date) AS create_date
|
||||
FROM bpm_flow_sign A
|
||||
LEFT JOIN bpm_list B ON A.flow_id = B.flow_id
|
||||
LEFT JOIN basperson P ON A.signerid = P.personid
|
||||
LEFT JOIN basdepartment D ON D.departmentid = P.departmentid
|
||||
LEFT JOIN zen_keyvalue KV ON KV.fieldname = 'sign_status' AND KV.keyid = A.sign_status
|
||||
LEFT JOIN data X ON X.flow_id = A.flow_id AND X.sourceid = A.sourceid
|
||||
WHERE 1=1
|
||||
AND IFNULL(x.not_end, 0) = 0
|
||||
AND a.signerid = v_userid;
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,44 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpm_sign_history (
|
||||
IN p_token VARCHAR(100),
|
||||
IN p_functiontag VARCHAR(100), -- 來源單別
|
||||
IN p_sourceid VARCHAR(100) -- 原單單號
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的 bpm, 取得 [某表單的簽核歷程]
|
||||
Description:
|
||||
Build Date : 2022/11/23
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/23
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
-- token 轉 userid
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
main_block: BEGIN
|
||||
IF v_userid = '' THEN
|
||||
LEAVE main_block; -- 結束程序
|
||||
END IF;
|
||||
|
||||
-- 回傳狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
SELECT
|
||||
A.id, A.sourceid, A.signerid, P.personcname,
|
||||
A.sign_status, KV.keyvalue AS sign_status_name, A.sign_note,
|
||||
cloud_addtime(A.create_date) AS create_date
|
||||
FROM bpm_flow_sign_log A
|
||||
LEFT JOIN bpm_list B ON A.flow_id = B.flow_id
|
||||
LEFT JOIN basperson P ON P.personid = A.signerid
|
||||
LEFT JOIN zen_keyvalue KV ON KV.fieldname = 'sign_status' AND KV.keyid = A.sign_status
|
||||
WHERE B.functiontag = p_functiontag AND sourceid = p_sourceid;
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,63 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpm_sign_pass (
|
||||
IN p_token VARCHAR(100),
|
||||
IN p_functiontag VARCHAR(100), -- 單別(* 表示全部)
|
||||
IN p_sdate VARCHAR(10), -- 日期區間(* 表示全部)
|
||||
IN p_edate VARCHAR(10)
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的 bpm, 取得 [經辦事項清單]
|
||||
Description: 所有曾經簽核過, 但是尚未結案的 flow
|
||||
Build Date : 2022/11/16
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/16
|
||||
2 Michael 2022/12/04 新增 @functiontag 的 where filter
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
-- token 轉 userid
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
main_block: BEGIN
|
||||
IF v_userid = '' THEN
|
||||
LEAVE main_block; -- 結束程序
|
||||
END IF;
|
||||
|
||||
-- 處理參數(TDB)
|
||||
IF IFNULL(p_functiontag, '') = '' THEN
|
||||
SET p_functiontag = '*';
|
||||
END IF;
|
||||
|
||||
-- 回傳狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
-- 判斷原單已結案? 沒有 P 應該就是已結案
|
||||
WITH data AS (
|
||||
SELECT flow_id, sourceid, COUNT(*) AS not_end
|
||||
FROM bpm_flow_sign
|
||||
WHERE sign_status = 'P'
|
||||
GROUP BY flow_id, sourceid
|
||||
)
|
||||
SELECT
|
||||
b.functiontag, b.flow_name, a.sourceid, a.sourceid AS billno, a.sign_note,
|
||||
a.sign_status, KV.keyvalue AS sign_status_name, d.departmentcname,
|
||||
a.signerid, p.personcname, a.stepName, cloud_addtime(a.create_date) AS create_date
|
||||
FROM bpm_flow_sign A
|
||||
LEFT JOIN bpm_list B ON A.flow_id = B.flow_id
|
||||
LEFT JOIN basperson P ON A.signerid = P.personid
|
||||
LEFT JOIN basdepartment D ON D.departmentid = P.departmentid
|
||||
LEFT JOIN zen_keyvalue KV ON KV.fieldname = 'sign_status' AND KV.keyid = A.sign_status
|
||||
LEFT JOIN data X ON X.flow_id = A.flow_id AND X.sourceid = A.sourceid
|
||||
WHERE FIND_IN_SET(a.sign_status, 'A,R,C') > 0 -- 已簽核過, 但尚未結案
|
||||
AND CASE WHEN p_functiontag = '*' THEN p_functiontag ELSE b.functiontag END = p_functiontag
|
||||
AND IFNULL(x.not_end, 0) > 0
|
||||
AND a.signerid = v_userid;
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,44 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpm_sign_signers (
|
||||
IN p_token VARCHAR(100),
|
||||
IN p_functiontag VARCHAR(100), -- 來源單別
|
||||
IN p_sourceid VARCHAR(100) -- 原單單號
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的 bpm, 取得 [某表單的後續簽核人]
|
||||
Description:
|
||||
Build Date : 2022/11/23
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/23
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
-- token 轉 userid
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
main_block: BEGIN
|
||||
IF v_userid = '' THEN
|
||||
LEAVE main_block; -- 結束程序
|
||||
END IF;
|
||||
|
||||
-- 回傳狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
SELECT
|
||||
A.id, A.sourceid, A.stepName, A.flow_level, A.signerid, P.personcname,
|
||||
A.sign_status, KV.keyvalue AS sign_status_name, A.sign_note,
|
||||
cloud_addtime(A.create_date) AS create_date
|
||||
FROM bpm_flow_sign A
|
||||
LEFT JOIN bpm_list B ON A.flow_id = B.flow_id
|
||||
LEFT JOIN basperson P ON P.personid = A.signerid
|
||||
LEFT JOIN zen_keyvalue KV ON KV.fieldname = 'sign_status' AND KV.keyid = A.sign_status
|
||||
WHERE B.functiontag = p_functiontag AND sourceid = p_sourceid;
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,48 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpm_sign_todo (
|
||||
IN p_token VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的 bpm, 取得 [待辦事項清單]
|
||||
Description: 所有目前正在等待 user 簽核的 flow
|
||||
Build Date : 2022/11/16
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/16
|
||||
2 Michael 2022/11/28 新增 assign_to 的指派條件
|
||||
|
||||
*/
|
||||
BEGIN
|
||||
-- token 轉 userid
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
SELECT checktoken(p_token) INTO v_userid;
|
||||
|
||||
main_block: BEGIN
|
||||
IF v_userid = '' THEN
|
||||
LEAVE main_block; -- 結束程序
|
||||
END IF;
|
||||
|
||||
-- 回傳狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
SELECT
|
||||
b.functiontag, b.flow_name, a.sourceid, a.sourceid AS billno,
|
||||
a.sign_note, d.departmentcname, a.signerid, p.personcname,
|
||||
a.stepName, cloud_addtime(a.create_date) AS create_date, a.flow_level
|
||||
FROM bpm_flow_sign A
|
||||
LEFT JOIN bpm_list B ON A.flow_id = B.flow_id
|
||||
LEFT JOIN basperson P ON A.signerid = P.personid
|
||||
LEFT JOIN basdepartment D ON D.departmentid = P.departmentid
|
||||
WHERE a.sign_status = 'P' -- 目前簽核關卡
|
||||
AND IFNULL(a.assign_to, '') = 'Y' -- 解決同一關多人時的指派機制
|
||||
AND a.signerid = v_userid;
|
||||
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,30 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm01_crud(
|
||||
IN p_uuid VARCHAR(100),
|
||||
IN p_bpm TEXT,
|
||||
IN p_bpm_org TEXT
|
||||
)
|
||||
BEGIN
|
||||
/*
|
||||
功能說明 : 配合 vue + jsplumb 的 BPM,將 flow 的 JSON 寫入 bpm_list
|
||||
特別說明 : 因為一定會先手工新增一筆 bpm_list,所以這裡一定是 UPDATE
|
||||
建立日期 : 2022/10/30
|
||||
|
||||
修改紀錄
|
||||
項次 修改人 日期 說明
|
||||
==== ========= ========== ========================================
|
||||
1 michael 2022-10-30 測試
|
||||
*/
|
||||
|
||||
-- 更新流程資料
|
||||
UPDATE bpm_list
|
||||
SET flow_json = p_bpm,
|
||||
flow_json_org = p_bpm_org
|
||||
WHERE flow_id = p_uuid;
|
||||
|
||||
-- 回傳狀態碼與訊息
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,26 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm01_get(
|
||||
IN p_uuid VARCHAR(100)
|
||||
)
|
||||
BEGIN
|
||||
/*
|
||||
功能說明 : 配合 vue + jsplumb 的 BPM,取得存在 bpm_list 的 JSON 內容
|
||||
建立日期 : 2022/10/30
|
||||
|
||||
修改紀錄
|
||||
項次 修改人 日期 說明
|
||||
==== ========= ========== ========================================
|
||||
1 michael 2022-10-30 測試
|
||||
*/
|
||||
|
||||
-- 回傳狀態碼與訊息
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
-- 回傳流程 JSON 原始資料
|
||||
SELECT flow_json_org AS jsoncode
|
||||
FROM bpm_list
|
||||
WHERE flow_id = p_uuid;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,249 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm01_spread (
|
||||
IN p_uuid VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
功能 : 配合 vue+jsplumb 的 bpm, 將 flow 的 json 轉為可用的 table 內容
|
||||
描述 : 本程式可能會在 bpm_list 的 update Trugger 被呼叫(TBD)
|
||||
建立日期 : 2022/10/30
|
||||
|
||||
修改歷史
|
||||
項目 誰 日期 修改說明
|
||||
==== ========== ========== ================================================
|
||||
1 michael 2022-10-30 測試
|
||||
2 Michael 2022-11-01 新增 stepName 欄位
|
||||
3 Michael 2022-12-03 刪除已經存在的前次內容(防錯, 並可於修改 flow 後重新產生)
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_json LONGTEXT;
|
||||
DECLARE v_col LONGTEXT;
|
||||
DECLARE v_type VARCHAR(10);
|
||||
DECLARE v_count INT;
|
||||
DECLARE v_group1 INT;
|
||||
DECLARE v_now INT;
|
||||
DECLARE v_pos INT;
|
||||
DECLARE v_rowid INT;
|
||||
DECLARE v_loop INT;
|
||||
|
||||
DECLARE v_flow_id VARCHAR(100);
|
||||
DECLARE v_elementId VARCHAR(100);
|
||||
DECLARE v_stepId VARCHAR(100);
|
||||
DECLARE v_filterSet VARCHAR(1000);
|
||||
DECLARE v_nextStep VARCHAR(1000);
|
||||
DECLARE v_nextStep2 VARCHAR(1000);
|
||||
DECLARE v_nextStep_false VARCHAR(100);
|
||||
DECLARE v_switchStep VARCHAR(1000);
|
||||
DECLARE v_stepName VARCHAR(100);
|
||||
DECLARE v_typeName VARCHAR(100);
|
||||
DECLARE v_roleName VARCHAR(100);
|
||||
|
||||
DECLARE v_max INT;
|
||||
DECLARE v_currid INT;
|
||||
DECLARE v_done INT DEFAULT FALSE;
|
||||
|
||||
-- 臨時表用於存儲解析的JSON數據
|
||||
DROP TEMPORARY TABLE IF EXISTS temp_data;
|
||||
CREATE TEMPORARY TABLE temp_data (
|
||||
rowid INT AUTO_INCREMENT PRIMARY KEY,
|
||||
col LONGTEXT,
|
||||
group1 INT DEFAULT NULL
|
||||
);
|
||||
|
||||
-- 獲取流程JSON
|
||||
SELECT flow_json INTO v_json FROM bpm_list WHERE flow_id = p_uuid;
|
||||
|
||||
-- 防止重複寫入
|
||||
DELETE FROM bpm_setup WHERE flow_id = p_uuid;
|
||||
|
||||
-- 分割JSON字串並存入臨時表
|
||||
SET @sql = CONCAT('INSERT INTO temp_data (col) VALUES ',
|
||||
REPLACE(REPLACE(REPLACE(v_json, CHAR(10), CONCAT('''),(', '''')), '\\', '\\\\'), '\"', '\\\"'), ');');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 計算總行數
|
||||
SELECT COUNT(*) INTO v_max FROM temp_data;
|
||||
SET v_currid = 1;
|
||||
|
||||
-- 標記elementId所在的行組
|
||||
SET v_type = '';
|
||||
SET v_count = 1;
|
||||
WHILE (v_currid <= v_max) DO
|
||||
SELECT col INTO v_col FROM temp_data WHERE rowid = v_currid;
|
||||
|
||||
IF LOCATE('"elementId"', v_col) > 0 THEN
|
||||
UPDATE temp_data SET group1 = v_count WHERE rowid = v_currid;
|
||||
SET v_count = v_count + 1;
|
||||
END IF;
|
||||
|
||||
SET v_currid = v_currid + 1;
|
||||
END WHILE;
|
||||
|
||||
-- 填充組標記
|
||||
SET v_now = 0;
|
||||
SET v_currid = 1;
|
||||
WHILE (v_currid <= v_max) DO
|
||||
SELECT IFNULL(group1, 0) INTO v_group1 FROM temp_data WHERE rowid = v_currid;
|
||||
|
||||
IF v_group1 = 0 AND v_now > 0 THEN
|
||||
UPDATE temp_data SET group1 = v_now WHERE rowid = v_currid;
|
||||
ELSE
|
||||
SET v_now = v_group1;
|
||||
END IF;
|
||||
|
||||
SET v_currid = v_currid + 1;
|
||||
END WHILE;
|
||||
|
||||
-- 處理每個組
|
||||
SET v_currid = 1;
|
||||
WHILE (v_currid <= v_now) DO
|
||||
-- 識別節點類型
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('elementId', col) > 0;
|
||||
|
||||
IF LOCATE('startNode', v_col) > 0 THEN
|
||||
SET v_elementId = 'startNode';
|
||||
ELSEIF LOCATE('nodeNode', v_col) > 0 THEN
|
||||
SET v_elementId = 'nodeNode';
|
||||
ELSEIF LOCATE('conditionNode', v_col) > 0 THEN
|
||||
SET v_elementId = 'conditionNode';
|
||||
ELSEIF LOCATE('switchNode', v_col) > 0 THEN
|
||||
SET v_elementId = 'switchNode';
|
||||
ELSEIF LOCATE('stopNode', v_col) > 0 THEN
|
||||
SET v_elementId = 'stopNode';
|
||||
END IF;
|
||||
|
||||
-- 提取stepId
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('stepId', col) > 0;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_stepId = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_stepId);
|
||||
SET v_stepId = SUBSTRING(v_stepId, 1, v_pos-1);
|
||||
|
||||
-- 提取nextStep
|
||||
IF v_elementId <> 'stopNode' THEN
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('nextStep', col) > 0;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_nextStep = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_nextStep);
|
||||
SET v_nextStep = SUBSTRING(v_nextStep, 1, v_pos-1);
|
||||
END IF;
|
||||
|
||||
-- 處理條件節點的過濾器和分支
|
||||
IF v_elementId = 'conditionNode' THEN
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('filterSet', col) > 0;
|
||||
IF v_col IS NOT NULL THEN
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_filterSet = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_filterSet);
|
||||
SET v_filterSet = SUBSTRING(v_filterSet, 1, v_pos-1);
|
||||
|
||||
-- 提取"是"分支的下一步
|
||||
SELECT rowid INTO v_rowid FROM temp_data WHERE group1 = v_currid AND LOCATE('"name": "是"', col) > 0;
|
||||
SELECT col INTO v_col FROM temp_data WHERE rowid = v_rowid - 1;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_nextStep = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_nextStep);
|
||||
SET v_nextStep = SUBSTRING(v_nextStep, 1, v_pos-1);
|
||||
|
||||
-- 提取"否"分支的下一步
|
||||
SELECT rowid INTO v_rowid FROM temp_data WHERE group1 = v_currid AND LOCATE('"name": "否"', col) > 0;
|
||||
SELECT col INTO v_col FROM temp_data WHERE rowid = v_rowid - 1;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_nextStep_false = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_nextStep_false);
|
||||
SET v_nextStep_false = SUBSTRING(v_nextStep_false, 1, v_pos-1);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- 處理switch節點的多分支
|
||||
IF v_elementId = 'switchNode' THEN
|
||||
SET v_loop = 1;
|
||||
SET v_switchStep = '';
|
||||
|
||||
WHILE (v_loop <= 10) DO
|
||||
SELECT rowid, col INTO v_rowid, v_col FROM temp_data
|
||||
WHERE group1 = v_currid AND LOCATE(CONCAT('"name": "', v_loop, '"'), col) > 0;
|
||||
|
||||
IF v_col IS NOT NULL THEN
|
||||
SELECT col INTO v_col FROM temp_data WHERE rowid = v_rowid - 1;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_nextStep2 = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_nextStep2);
|
||||
SET v_nextStep2 = SUBSTRING(v_nextStep2, 1, v_pos-1);
|
||||
|
||||
SET v_switchStep = CONCAT(v_switchStep, v_nextStep2, '^');
|
||||
ELSE
|
||||
SET v_loop = 100; -- 退出循環
|
||||
END IF;
|
||||
|
||||
SET v_loop = v_loop + 1;
|
||||
END WHILE;
|
||||
|
||||
IF LENGTH(v_switchStep) > 0 THEN
|
||||
SET v_switchStep = SUBSTRING(v_switchStep, 1, LENGTH(v_switchStep)-1);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- 提取其他節點屬性
|
||||
IF v_elementId NOT IN ('stopNode', 'startNode') THEN
|
||||
-- stepName
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('stepName', col) > 0;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_stepName = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_stepName);
|
||||
SET v_stepName = SUBSTRING(v_stepName, 1, v_pos-1);
|
||||
|
||||
-- typeName
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('typeName', col) > 0;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_typeName = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_typeName);
|
||||
SET v_typeName = SUBSTRING(v_typeName, 1, v_pos-1);
|
||||
|
||||
-- roleName
|
||||
SELECT col INTO v_col FROM temp_data WHERE group1 = v_currid AND LOCATE('roleName', col) > 0;
|
||||
SET v_pos = LOCATE(':', v_col);
|
||||
SET v_roleName = SUBSTRING(v_col, v_pos+3, LENGTH(v_col));
|
||||
SET v_pos = LOCATE('"', v_roleName);
|
||||
SET v_roleName = SUBSTRING(v_roleName, 1, v_pos-1);
|
||||
END IF;
|
||||
|
||||
-- 根據節點類型設置預設值
|
||||
IF v_elementId = 'startNode' THEN
|
||||
SET v_filterSet = '';
|
||||
SET v_nextStep_false = '';
|
||||
SET v_stepName = '';
|
||||
SET v_typeName = '';
|
||||
SET v_roleName = '';
|
||||
ELSEIF v_elementId = 'stopNode' THEN
|
||||
SET v_filterSet = '';
|
||||
SET v_nextStep = '';
|
||||
SET v_nextStep_false = '';
|
||||
SET v_stepName = '';
|
||||
SET v_typeName = '';
|
||||
SET v_roleName = '';
|
||||
ELSEIF v_elementId = 'switchNode' THEN
|
||||
SET v_filterSet = '';
|
||||
SET v_nextStep = v_switchStep;
|
||||
SET v_nextStep_false = '';
|
||||
ELSEIF v_elementId = 'conditionNode' THEN
|
||||
SET v_typeName = '';
|
||||
ELSEIF v_elementId = 'nodeNode' THEN
|
||||
SET v_filterSet = '';
|
||||
SET v_nextStep_false = '';
|
||||
END IF;
|
||||
|
||||
-- 插入結果到bpm_setup表
|
||||
INSERT INTO bpm_setup (flow_id, elementId, stepId, filterSet, nextStep, nextStep_false, stepName, typeName, roleName)
|
||||
VALUES (p_uuid, v_elementId, v_stepId, v_filterSet, v_nextStep, v_nextStep_false, v_stepName, v_typeName, v_roleName);
|
||||
|
||||
SET v_currid = v_currid + 1;
|
||||
END WHILE;
|
||||
|
||||
-- 清理臨時表
|
||||
DROP TEMPORARY TABLE IF EXISTS temp_data;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,202 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm02_sign_active (
|
||||
IN p_token VARCHAR(100), -- 可轉為 userid
|
||||
IN p_sign_type VARCHAR(1), -- A:同意 R:拒絕 C:作廢
|
||||
IN p_uuid VARCHAR(100), -- 也可以傳入 functiontag
|
||||
IN p_source_pk_value VARCHAR(100), -- 單號
|
||||
IN p_sign_note NVARCHAR(600), -- 簽核意見
|
||||
IN p_next_signer VARCHAR(20) -- 下一關簽核人(New)
|
||||
)
|
||||
/*
|
||||
功能 : 本程式主要管理簽核時的 同意/拒絕/作廢 等核心控制,並負責回寫原單的相關資料
|
||||
描述 :
|
||||
範例 : CALL bpmm02_sign_active('token123','A','hrsm11','221030-001','gm ok', '')
|
||||
建立日期 : 2022/11/11
|
||||
|
||||
修改歷史
|
||||
項目 誰 日期 修改說明
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022-11-11 Init
|
||||
2 Michael 2022-11-16 改為 token, 加強安全性
|
||||
3 Michael 2022-11-28 加入指定簽核人 assign_to 的設定(解決多人指定派工的 issue)
|
||||
4 Michale 2023-04-14 配合 Node 機制, 加入 bpm 發送 mail 的通用機制
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_sql LONGTEXT;
|
||||
DECLARE v_tablename VARCHAR(100);
|
||||
DECLARE v_source_pk VARCHAR(100);
|
||||
DECLARE v_flow_status VARCHAR(1);
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
DECLARE v_id INT; -- 當前 id
|
||||
DECLARE v_id_next INT; -- 另一筆 id
|
||||
DECLARE v_flow_level INT; -- 當前 id 的 flow_level
|
||||
DECLARE v_all_signers VARCHAR(200);
|
||||
DECLARE v_done INT DEFAULT FALSE;
|
||||
DECLARE v_has_error INT DEFAULT 0;
|
||||
|
||||
-- 根據傳入的 token 取得 userid
|
||||
proc_label: BEGIN
|
||||
SELECT checktoken(p_token) INTO v_userid;
|
||||
IF v_userid = '' THEN
|
||||
LEAVE proc_label;
|
||||
END IF;
|
||||
|
||||
-- 以請假單為例(由 tag 轉 uuid)
|
||||
IF LENGTH(p_uuid) < 20 THEN
|
||||
SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid;
|
||||
END IF;
|
||||
|
||||
-- 取得當前待簽核的 id, 及前一或後一步驟的 id
|
||||
SELECT id, flow_level INTO v_id, v_flow_level FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND signerid = v_userid AND sign_status = 'P';
|
||||
|
||||
-- 如果不符合條件, 就直接離開
|
||||
IF v_id IS NULL THEN
|
||||
LEAVE proc_label;
|
||||
END IF;
|
||||
|
||||
-- api 參數不能為空, 所以會傳 *
|
||||
IF p_next_signer = '*' OR p_next_signer IS NULL OR p_next_signer = '' THEN
|
||||
SET p_next_signer = '';
|
||||
END IF;
|
||||
|
||||
-- 開始交易
|
||||
/*
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
SET v_has_error = 1;
|
||||
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE,
|
||||
@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
|
||||
SET @error_message = CONCAT('Error occurred: ', @errno, ' (', @sqlstate, '): ', @text);
|
||||
ROLLBACK;
|
||||
END;
|
||||
*/
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
/*
|
||||
step 1: 要變更2筆記錄
|
||||
目前這一筆
|
||||
前或後一筆(Reject or Agree)
|
||||
*/
|
||||
-- update bpm_flow_sign
|
||||
UPDATE bpm_flow_sign SET sign_status = p_sign_type
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND id = v_id;
|
||||
|
||||
SET v_flow_status = 'P';
|
||||
SET v_id_next = 0;
|
||||
|
||||
IF p_sign_type = 'A' THEN
|
||||
-- 同意, 下一關
|
||||
SELECT id INTO v_id_next FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = v_flow_level + 1;
|
||||
|
||||
-- 如果是同意, 且是最後一關, 就結案
|
||||
IF v_id_next IS NULL THEN
|
||||
SET v_flow_status = 'Z';
|
||||
ELSE
|
||||
SET v_flow_status = 'P';
|
||||
END IF;
|
||||
ELSEIF p_sign_type = 'R' THEN
|
||||
-- 駁回, 前一關(改為可以往前任意指派)
|
||||
-- 若不指定, 就自動往前一關(已簽核過的人)
|
||||
IF p_next_signer = '' THEN
|
||||
SELECT id INTO v_id_next FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = v_flow_level - 1;
|
||||
ELSE
|
||||
-- 注意防錯, 如果同一人多次出現在已簽核中, 取最近的一筆
|
||||
SELECT id INTO v_id_next FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level < v_flow_level AND signerid = p_next_signer
|
||||
ORDER BY flow_level DESC
|
||||
LIMIT 1;
|
||||
END IF;
|
||||
|
||||
SET v_flow_status = 'P';
|
||||
ELSEIF p_sign_type = 'C' THEN
|
||||
SET v_flow_status = 'C';
|
||||
END IF;
|
||||
|
||||
-- 作廢就不必看下一步
|
||||
-- 加入 mail 機制, 使用的是 Node.js 的 Schedule mail 機制
|
||||
IF p_sign_type <> 'C' AND v_id_next IS NOT NULL THEN
|
||||
-- update bpm_flow_sign
|
||||
UPDATE bpm_flow_sign SET sign_status = 'P'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND id = v_id_next;
|
||||
|
||||
/*
|
||||
寫入發送 mail 的統一管控檔(use zenclouddb)
|
||||
使用 sys_users.user_extend1 = Y 判斷是否要送 mail
|
||||
*/
|
||||
INSERT INTO zenclouddb.zen_mail_list (corp_db, recipient, mail_subject, content, mail_status, create_date)
|
||||
SELECT
|
||||
p.pvalue, u.email, CONCAT('簽核通知:【', s.flow_name, '】', bs.sign_note),
|
||||
CONCAT('Hi ', u.username, ',\n',
|
||||
'您有一個待簽核的電子表單,請登入簽核系統後,速審速核,感謝您的配合 !!\n',
|
||||
'送達時間:', DATE_FORMAT(bs.create_date, '%Y-%m-%d %H:%i:%s'), '\n',
|
||||
'主旨:', bs.sign_note, '\n',
|
||||
'簽核步驟:', bs.stepname),
|
||||
0, NOW()
|
||||
FROM bpm_flow_sign bs
|
||||
LEFT JOIN sys_users u ON bs.signerid = u.userid
|
||||
LEFT JOIN sys_parameter p ON p.pid = 'corpid'
|
||||
LEFT JOIN bpm_list s ON s.flow_id = bs.flow_id
|
||||
WHERE bs.flow_id = p_uuid AND bs.sourceid = p_source_pk_value AND bs.id = v_id_next
|
||||
AND IFNULL(u.user_extend1, '') = 'Y';
|
||||
|
||||
-- 如果 next_signer 不為空, 且存在下一關, assign_to=Y(TBD), 相關 sp 要一併檢查並修正
|
||||
-- 先將之前的設定重置, 再重設
|
||||
UPDATE bpm_flow_sign SET assign_to = 'N'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND id = v_id_next;
|
||||
|
||||
IF p_next_signer <> '' THEN
|
||||
UPDATE bpm_flow_sign SET assign_to = 'Y'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND id = v_id_next AND signerid = p_next_signer;
|
||||
ELSE
|
||||
-- 如果沒有指定, 就要全部都設為 Y
|
||||
UPDATE bpm_flow_sign SET assign_to = 'Y'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND id = v_id_next;
|
||||
END IF;
|
||||
|
||||
-- 取得下一關的人(多人用逗號分隔)
|
||||
SELECT bpmm02_udf_next_signer(p_uuid, p_source_pk_value, 1) INTO v_all_signers;
|
||||
IF v_all_signers IS NULL THEN
|
||||
SET v_all_signers = ''; -- 防錯
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
/*
|
||||
step 2: 要寫入 log
|
||||
*/
|
||||
-- insert bpm_flow_sign_log
|
||||
INSERT INTO bpm_flow_sign_log (flow_id, sourceid, signerid, sign_status, sign_note, create_date)
|
||||
VALUES (p_uuid, p_source_pk_value, v_userid, p_sign_type, p_sign_note, NOW());
|
||||
|
||||
/*
|
||||
step 3: 寫回原單的 flow_status
|
||||
N:待簽核 P:簽核中 Z:結案 C:作廢
|
||||
*/
|
||||
-- update 原單(hrs_leave), flow_level 及 flowstatus
|
||||
SELECT source_table, source_pk INTO v_tablename, v_source_pk FROM bpm_list WHERE flow_id = p_uuid;
|
||||
|
||||
-- 動態SQL更新原表
|
||||
SET v_sql = CONCAT(
|
||||
'UPDATE ', v_tablename, ' SET flow_status = ''', v_flow_status,
|
||||
''', flow_signer = ''', IFNULL(v_all_signers, ''),
|
||||
''' WHERE ', v_source_pk, ' = ''', p_source_pk_value, '''');
|
||||
|
||||
-- 執行動態SQL
|
||||
SET @dynamic_sql = v_sql;
|
||||
PREPARE stmt FROM @dynamic_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 沒問題就確認交易完成
|
||||
IF v_has_error = 0 THEN
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,68 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm02_sign_assign (
|
||||
IN p_token VARCHAR(100), -- 可轉為 userid
|
||||
IN p_sign_type VARCHAR(1), -- A(gree)/R(eject)
|
||||
IN p_uuid VARCHAR(100), -- 也可以傳入 functiontag
|
||||
IN p_source_pk_value VARCHAR(100) -- 單號
|
||||
)
|
||||
/*
|
||||
功能 : 配合 vue+jsplumb 的 bpm, 配合簽核同意, 駁回時的 [指定簽核人] select 元件所需內容
|
||||
描述 : 本程式用於 [指定簽核人]
|
||||
建立日期 : 2022/11/27
|
||||
|
||||
修改歷史
|
||||
項目 誰 日期 修改說明
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022-11-27 Init
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_userid VARCHAR(20);
|
||||
DECLARE v_id INT; -- 當前 id
|
||||
DECLARE v_flow_level INT; -- 當前 id 的 flow_level
|
||||
|
||||
-- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白)
|
||||
proc_label: BEGIN
|
||||
SELECT checktoken(p_token) INTO v_userid;
|
||||
IF v_userid = '' THEN
|
||||
LEAVE proc_label;
|
||||
END IF;
|
||||
|
||||
-- 以請假單為例(由 tag 轉 uuid)
|
||||
IF LENGTH(p_uuid) < 20 THEN
|
||||
SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid;
|
||||
END IF;
|
||||
|
||||
-- 取得當前待簽核的 id, 及前一或後一步驟的 id
|
||||
SELECT id, flow_level INTO v_id, v_flow_level FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND signerid = v_userid AND sign_status = 'P';
|
||||
|
||||
-- 如果不符合條件, 就直接離開
|
||||
IF v_id IS NULL THEN
|
||||
LEAVE proc_label;
|
||||
END IF;
|
||||
|
||||
-- 返回基本狀態
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
IF p_sign_type = 'A' THEN
|
||||
-- 同意, 下一關
|
||||
SELECT '*' AS value, '不指派' AS label
|
||||
UNION
|
||||
SELECT s.signerid AS value, p.personcname AS label FROM bpm_flow_sign s
|
||||
LEFT JOIN basperson p ON s.signerid = p.personid
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = v_flow_level + 1;
|
||||
|
||||
ELSEIF p_sign_type = 'R' THEN
|
||||
-- 駁回, 前一關(駁回可以回之前任何一關), 但是必須 assign_to=Y(之前有簽過的人)
|
||||
SELECT '*' AS value, '不指派' AS label
|
||||
UNION
|
||||
SELECT s.signerid AS value, p.personcname AS label FROM bpm_flow_sign s
|
||||
LEFT JOIN basperson p ON s.signerid = p.personid
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level < v_flow_level AND assign_to = 'Y';
|
||||
END IF;
|
||||
|
||||
END;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,190 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE bpmm02_spread (
|
||||
IN p_uuid VARCHAR(100), -- 也可以傳入 functiontag
|
||||
IN p_personid VARCHAR(20), -- 起單人
|
||||
IN p_source_pk_value VARCHAR(100) -- 單號
|
||||
)
|
||||
/*
|
||||
功能 : 配合 vue+jsplumb 的 bpm, 將 bpm_setup 的設定, 展開為實際的簽核步驟
|
||||
描述 : 本程式可能會在單據按 [上呈] 時呼叫
|
||||
可能要寫在 View Form, 包含 [上呈] [同意] [駁回] 等都是
|
||||
CALL bpmm02_spread('d9930b1c-26a9-4000-a7ba-0f0292601000','120912','221030-001')
|
||||
建立日期 : 2022/10/31
|
||||
|
||||
修改歷史
|
||||
項目 誰 日期 修改說明
|
||||
==== ========== ========== ================================================
|
||||
1 michael 2022-10-31 測試
|
||||
2 Michael 2022-11-05 初版完成基本功能
|
||||
3 Michael 2022-11-29 新增 update assign_to
|
||||
4 Michale 2023-04-14 配合 Node 機制, 加入 bpm 發送 mail 的通用機制
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_elementId VARCHAR(100);
|
||||
DECLARE v_stepId VARCHAR(100);
|
||||
DECLARE v_filterSet VARCHAR(1000);
|
||||
DECLARE v_nextStep VARCHAR(1000);
|
||||
DECLARE v_nextStep2 VARCHAR(1000);
|
||||
DECLARE v_nextStep_false VARCHAR(100);
|
||||
DECLARE v_switchStep VARCHAR(1000);
|
||||
DECLARE v_stepName VARCHAR(100);
|
||||
DECLARE v_typeName VARCHAR(100);
|
||||
DECLARE v_nodeName VARCHAR(100);
|
||||
DECLARE v_roleName VARCHAR(100);
|
||||
DECLARE v_userid VARCHAR(100);
|
||||
DECLARE v_tablename VARCHAR(100);
|
||||
DECLARE v_source_pk VARCHAR(100);
|
||||
|
||||
DECLARE v_sql_cmd LONGTEXT;
|
||||
DECLARE v_now_elementId VARCHAR(100);
|
||||
DECLARE v_nowStep VARCHAR(100);
|
||||
DECLARE v_step INT;
|
||||
DECLARE v_crlf VARCHAR(2);
|
||||
|
||||
DECLARE v_all_signers VARCHAR(200);
|
||||
DECLARE v_done INT DEFAULT FALSE;
|
||||
DECLARE v_cnt INT;
|
||||
|
||||
SET v_crlf = CHAR(10);
|
||||
|
||||
-- 以請假單為例(由 tag 轉 uuid)
|
||||
IF LENGTH(p_uuid) < 20 THEN
|
||||
SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid;
|
||||
END IF;
|
||||
|
||||
-- 取得 startNode 的 nextStep
|
||||
SELECT nextStep INTO v_nextStep FROM bpm_setup WHERE flow_id = p_uuid AND elementId = 'startNode';
|
||||
|
||||
/*
|
||||
寫入申請人的上呈資料(固定第一筆)
|
||||
*/
|
||||
INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)
|
||||
VALUES (p_uuid, p_source_pk_value, '上呈', 0, p_personid, 'N', NOW(), '');
|
||||
|
||||
-- 取得第一個 node
|
||||
SELECT
|
||||
s.elementId, s.stepId, s.nextStep, s.filterSet,
|
||||
s.nextStep_false, s.typeName, s.roleName
|
||||
INTO
|
||||
v_elementId, v_stepId, v_nextStep, v_filterSet,
|
||||
v_nextStep_false, v_typeName, v_roleName
|
||||
FROM bpm_list l
|
||||
LEFT JOIN bpm_setup s ON l.flow_id = s.flow_id
|
||||
WHERE l.flow_id = p_uuid AND stepId = v_nextStep;
|
||||
|
||||
-- 刪除超過 7 天的 log 資料
|
||||
DELETE FROM bpm_flow_spread_log WHERE create_date < DATE_SUB(NOW(), INTERVAL 7 DAY);
|
||||
|
||||
-- 往下展開, 一直到 stop
|
||||
SET v_nowStep = v_nextStep;
|
||||
SET v_now_elementId = v_elementId;
|
||||
SET v_step = 1;
|
||||
|
||||
WHILE v_now_elementId <> 'stopNode' DO
|
||||
-- 先判斷 condition true/false
|
||||
IF v_elementId = 'conditionNode' THEN
|
||||
SELECT source_table, source_pk INTO v_tablename, v_source_pk FROM bpm_list WHERE flow_id = p_uuid;
|
||||
SELECT roleName, stepName INTO v_roleName, v_stepName FROM bpm_setup WHERE flow_id = p_uuid AND stepId = v_stepId;
|
||||
|
||||
DELETE FROM bpm_flow_spread_log WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND stepId = v_stepId;
|
||||
|
||||
-- 使用預備語句執行動態SQL
|
||||
SET @sql = CONCAT('SELECT COUNT(*) INTO @cnt FROM ', v_tablename,
|
||||
' WHERE ', v_source_pk, ' = ''', p_source_pk_value,
|
||||
''' AND ', v_filterSet);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 根據條件結果插入不同的nextStep
|
||||
IF @cnt > 0 THEN
|
||||
INSERT INTO bpm_flow_spread_log (flow_id, sourceid, stepId, nextStep, create_date)
|
||||
VALUES (p_uuid, p_source_pk_value, v_stepId, v_nextStep, NOW());
|
||||
ELSE
|
||||
INSERT INTO bpm_flow_spread_log (flow_id, sourceid, stepId, nextStep, create_date)
|
||||
VALUES (p_uuid, p_source_pk_value, v_stepId, v_nextStep_false, NOW());
|
||||
END IF;
|
||||
|
||||
SET v_step = v_step - 1;
|
||||
SELECT nextStep INTO v_nextStep FROM bpm_flow_spread_log
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND stepId = v_stepId;
|
||||
ELSEIF v_elementId = 'switchNode' THEN
|
||||
-- 取得所有會簽的名單(我不建議支援此功能, 並不合理, 但程式段暫時保留)
|
||||
SELECT 'hello';
|
||||
ELSE
|
||||
-- 調用用戶定義函數獲取簽核人
|
||||
SELECT bpmm02_udf_spread_signer(p_uuid, p_personid, p_source_pk_value, v_stepId, v_typeName, v_elementId, v_filterSet, v_step) INTO v_sql_cmd;
|
||||
SET @dynamic_sql = v_sql_cmd;
|
||||
PREPARE stmt FROM @dynamic_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
|
||||
-- 取得下一個 node
|
||||
SELECT
|
||||
elementId, stepId, nextStep, filterSet, nextStep_false, typeName, roleName
|
||||
INTO
|
||||
v_elementId, v_stepId, v_nextStep, v_filterSet, v_nextStep_false, v_typeName, v_roleName
|
||||
FROM bpm_setup WHERE flow_id = p_uuid AND stepId = v_nextStep;
|
||||
|
||||
SET v_step = v_step + 1;
|
||||
SET v_nowStep = v_nextStep;
|
||||
SET v_now_elementId = v_elementId;
|
||||
END WHILE;
|
||||
|
||||
-- 先填入 assign_to 的預設值
|
||||
UPDATE bpm_flow_sign SET assign_to = 'N'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value;
|
||||
|
||||
-- update bpm_flow_sign
|
||||
UPDATE bpm_flow_sign SET sign_status = 'A', assign_to = 'Y'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = 0;
|
||||
|
||||
-- update bpm_flow_sign 的指派, 此處如果第一關就有多人, 都會被設為 Y(暫時無解)
|
||||
UPDATE bpm_flow_sign SET assign_to = 'Y'
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = 1;
|
||||
|
||||
/*
|
||||
寫入發送 mail 的統一管控檔(use zenclouddb)
|
||||
使用 sys_users.user_extend1 = Y 判斷是否要送 mail
|
||||
*/
|
||||
INSERT INTO zenclouddb.zen_mail_list (corp_db, recipient, mail_subject, content, mail_status, create_date)
|
||||
SELECT
|
||||
p.pvalue, u.email, CONCAT('簽核通知:【', s.flow_name, '】', bs.sign_note),
|
||||
CONCAT('Hi ', u.username, ',', CHAR(10),
|
||||
'您有一個待簽核的電子表單,請登入簽核系統後,速審速核,感謝您的配合 !!', CHAR(10),
|
||||
'送達時間:', DATE_FORMAT(bs.create_date, '%Y-%m-%d %H:%i:%s'), CHAR(10),
|
||||
'主旨:', bs.sign_note, CHAR(10),
|
||||
'簽核步驟:', bs.stepname),
|
||||
0, NOW()
|
||||
FROM bpm_flow_sign bs
|
||||
LEFT JOIN sys_users u ON bs.signerid = u.userid
|
||||
LEFT JOIN sys_parameter p ON p.pid = 'corpid'
|
||||
LEFT JOIN bpm_list s ON s.flow_id = bs.flow_id
|
||||
WHERE bs.flow_id = p_uuid AND bs.flow_level = 1 AND bs.sourceid = p_source_pk_value AND assign_to = 'Y';
|
||||
|
||||
-- 下一關的簽核人
|
||||
SELECT bpmm02_udf_next_signer(p_uuid, p_source_pk_value, 1) INTO v_all_signers;
|
||||
|
||||
-- 更新原單狀態
|
||||
/*
|
||||
step 3: 寫回原單的 flow_status
|
||||
N:待簽核 P:簽核中 Z:結案 C:作廢
|
||||
*/
|
||||
-- update 原單(hrs_leave), flow_level 及 flowstatus
|
||||
SELECT source_table, source_pk INTO v_tablename, v_source_pk FROM bpm_list WHERE flow_id = p_uuid;
|
||||
|
||||
-- 動態更新原表
|
||||
SET @sql = CONCAT(
|
||||
'UPDATE ', v_tablename, ' SET flow_status = ''P''',
|
||||
', flow_signer = ''', IFNULL(v_all_signers, ''), '''',
|
||||
' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''''
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,68 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE FUNCTION bpmm02_udf_next_signer(
|
||||
p_uuid VARCHAR(100),
|
||||
p_source_pk_value VARCHAR(100), -- 原單單號
|
||||
p_id_next INT
|
||||
)
|
||||
/*
|
||||
Function : 取得下一關的人員列表
|
||||
Description:
|
||||
Build Date : 2022/11/27
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/11/27 Init
|
||||
*/
|
||||
RETURNS TEXT
|
||||
BEGIN
|
||||
DECLARE v_imax INT;
|
||||
DECLARE v_imin INT;
|
||||
DECLARE v_inow INT;
|
||||
DECLARE v_signerid VARCHAR(20);
|
||||
DECLARE v_all_signers TEXT;
|
||||
DECLARE v_lastsep VARCHAR(1);
|
||||
DECLARE v_rowid INT;
|
||||
|
||||
-- 臨時表用於存儲簽核人
|
||||
DROP TEMPORARY TABLE IF EXISTS temp_signers;
|
||||
CREATE TEMPORARY TABLE temp_signers (
|
||||
signerid VARCHAR(100),
|
||||
rowid INT AUTO_INCREMENT PRIMARY KEY
|
||||
);
|
||||
|
||||
-- 以請假單為例(由 tag 轉 uuid)
|
||||
IF LENGTH(p_uuid) < 20 THEN
|
||||
SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid;
|
||||
END IF;
|
||||
|
||||
-- 取得下一關的人
|
||||
INSERT INTO temp_signers (signerid)
|
||||
SELECT signerid FROM bpm_flow_sign
|
||||
WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = p_id_next;
|
||||
|
||||
SELECT MAX(rowid), MIN(rowid) INTO v_imax, v_imin FROM temp_signers;
|
||||
SET v_signerid = '';
|
||||
SET v_all_signers = '';
|
||||
|
||||
WHILE v_imin <= v_imax DO
|
||||
SELECT signerid INTO v_signerid FROM temp_signers WHERE rowid = v_imin;
|
||||
IF v_imin = v_imax THEN
|
||||
SET v_lastsep = '';
|
||||
ELSE
|
||||
SET v_lastsep = ',';
|
||||
END IF;
|
||||
|
||||
SET v_all_signers = CONCAT(v_all_signers, v_signerid, v_lastsep);
|
||||
|
||||
SELECT MIN(rowid) INTO v_imin FROM temp_signers WHERE rowid > v_imin;
|
||||
END WHILE;
|
||||
|
||||
-- 清理臨時表
|
||||
DROP TEMPORARY TABLE IF EXISTS temp_signers;
|
||||
|
||||
RETURN v_all_signers;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,95 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE FUNCTION bpmm02_udf_spread_signer(
|
||||
p_uuid VARCHAR(100),
|
||||
p_personid VARCHAR(20), -- 起單人
|
||||
p_source_pk_value VARCHAR(100), -- 單號
|
||||
p_stepId VARCHAR(100),
|
||||
p_typeName VARCHAR(20),
|
||||
p_nodeName VARCHAR(20),
|
||||
p_filterSet TEXT,
|
||||
p_step INT
|
||||
)
|
||||
/*
|
||||
Function : bpmm02_spread 產生簽核人 SQL script for insert bpm_flow_sign
|
||||
Description:
|
||||
Build Date : 2022/11/04
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== =================================================
|
||||
1 Michael 2022/11/04 Init
|
||||
*/
|
||||
RETURNS TEXT
|
||||
BEGIN
|
||||
DECLARE v_sql TEXT;
|
||||
DECLARE v_tablename VARCHAR(100);
|
||||
DECLARE v_source_pk VARCHAR(100);
|
||||
DECLARE v_stepName VARCHAR(100);
|
||||
DECLARE v_roleName VARCHAR(100);
|
||||
DECLARE v_source_note VARCHAR(100);
|
||||
DECLARE v_userid VARCHAR(100);
|
||||
DECLARE v_role_users TEXT;
|
||||
DECLARE v_notes VARCHAR(600);
|
||||
DECLARE v_crlf VARCHAR(2);
|
||||
|
||||
SET v_crlf = CHAR(10);
|
||||
|
||||
IF p_nodeName = 'nodeNode' THEN
|
||||
-- 獲取基本資訊
|
||||
SELECT source_table, source_pk, source_note
|
||||
INTO v_tablename, v_source_pk, v_source_note
|
||||
FROM bpm_list WHERE flow_id = p_uuid;
|
||||
|
||||
SELECT roleName, stepName
|
||||
INTO v_roleName, v_stepName
|
||||
FROM bpm_setup WHERE flow_id = p_uuid AND stepId = p_stepId;
|
||||
|
||||
-- 根據類型生成不同的SQL
|
||||
IF p_typeName = 'fields' THEN
|
||||
SET v_sql = CONCAT(
|
||||
'SELECT @userid:=', v_roleName, ', @notes:=', v_source_note,
|
||||
' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf,
|
||||
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf,
|
||||
'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', @userid, ''',
|
||||
CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes);'
|
||||
);
|
||||
ELSEIF p_typeName = 'roles' THEN
|
||||
-- 處理角色類型
|
||||
IF v_roleName = 'manager' THEN
|
||||
SELECT bossid INTO v_userid FROM sys_users WHERE userid = p_personid;
|
||||
SET v_role_users = CONCAT(
|
||||
'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ''',
|
||||
IFNULL(v_userid, '4734'), ''', ''',
|
||||
CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes)'
|
||||
);
|
||||
ELSE
|
||||
SET v_role_users = CONCAT(
|
||||
'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step,
|
||||
', userid, ''', CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes ',
|
||||
'FROM sys_userroles WHERE roleid = ''', v_roleName, ''''
|
||||
);
|
||||
END IF;
|
||||
|
||||
SET v_sql = CONCAT(
|
||||
'SELECT @notes:=', v_source_note, ' FROM ', v_tablename,
|
||||
' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf,
|
||||
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf,
|
||||
v_role_users, ';'
|
||||
);
|
||||
ELSEIF p_typeName = 'users' THEN
|
||||
-- 處理用戶類型
|
||||
SET v_sql = CONCAT(
|
||||
'SELECT @notes:=', v_source_note, ' FROM ', v_tablename,
|
||||
' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf,
|
||||
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf,
|
||||
'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step,
|
||||
', ''', v_roleName, ''', NOW(), @notes);'
|
||||
);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
RETURN v_sql;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,38 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE FUNCTION cloud_addtime(
|
||||
p_date_utc DATETIME
|
||||
)
|
||||
/*
|
||||
Function : 因為所有的雲端主機, 都是存 UTC, 要 -8 換為 Taipei 時間
|
||||
Description: 1.如果有多國的來源, 這個方法並不徹底, 目前先暫用
|
||||
2.目前測試 -8 看起來就正常
|
||||
3.這個 udf 只是單純地在 select xx日期 時, 將時間 -8 hrs, 並不會異動資料庫的內容
|
||||
純粹是配合 Azure Cloud 主機的運作而已
|
||||
SELECT cloud_addtime(NOW())
|
||||
Build Date : 2022/12/03
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/12/03 Init
|
||||
*/
|
||||
RETURNS DATETIME
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
DECLARE v_date_taipei DATETIME;
|
||||
DECLARE v_diff SMALLINT;
|
||||
|
||||
-- 從系統參數取得時差,預設為8小時
|
||||
SELECT pvalue INTO v_diff FROM sys_parameter WHERE systemid = 'sys' AND pid = 'diff_hours';
|
||||
IF v_diff IS NULL THEN
|
||||
SET v_diff = 8;
|
||||
END IF;
|
||||
|
||||
-- 將UTC時間轉換為台北時間
|
||||
SET v_date_taipei = DATE_SUB(p_date_utc, INTERVAL v_diff HOUR);
|
||||
|
||||
RETURN v_date_taipei;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,201 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE FUNCTION zen_bpm_define(
|
||||
p_FunctionTag VARCHAR(100),
|
||||
p_FunctionTag_org VARCHAR(100),
|
||||
p_pk VARCHAR(100),
|
||||
p_ip VARCHAR(100),
|
||||
p_db VARCHAR(100)
|
||||
)
|
||||
RETURNS TEXT
|
||||
BEGIN
|
||||
/*
|
||||
function : 子程序, 回傳 bpm 表單所需的設定 json 內容, call by zen_create_json
|
||||
description: 呼叫範例 select dbo.zen_bpm_define()
|
||||
build date : 2022/11/14
|
||||
|
||||
modify history
|
||||
item who date modify docs
|
||||
==== ========== ========== ================================================
|
||||
1 michael 2022/11/14 新增
|
||||
2 Michael 2023-02-01 為了更加彈性, @ip 及 @db 這2個欄位改傳入 ${ls:xxxx}, 測試可行(程式要調整前端呼叫的程式)
|
||||
3 Michael 2024-02-04 將 hard code 的 ip 及 db 改為 local store, 版本也改為 v2
|
||||
4 Michael 2024-03-02 amis 之前改版, 命名時不能使用 bpm-xxx 否則會無法識別, 一次修正
|
||||
*/
|
||||
|
||||
DECLARE v_rets TEXT;
|
||||
DECLARE v_crlf CHAR(2);
|
||||
DECLARE v_type CHAR(1); -- 是否為簽核用 view
|
||||
|
||||
SET v_crlf = CONCAT(CHAR(13), CHAR(10));
|
||||
IF LOCATE('_', p_FunctionTag_org) > 0 THEN
|
||||
SET v_type = 'Y';
|
||||
ELSE
|
||||
SET v_type = 'N';
|
||||
END IF;
|
||||
|
||||
SET v_rets = CONCAT(
|
||||
' {', v_crlf,
|
||||
' "type": "button-toolbar",', v_crlf,
|
||||
' "buttons": [', v_crlf,
|
||||
CASE WHEN v_type = 'N' THEN
|
||||
CONCAT(
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "上呈",', v_crlf,
|
||||
' "actionType": "ajax",', v_crlf,
|
||||
' "confirmText": "確定要上呈表單?",', v_crlf, -- 如果要手動修改, 連續輸入2個單引號即可存檔
|
||||
' "disabledOn": "${flow_status != ''N''}",', v_crlf,
|
||||
' "api": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:base_db}/bpmm02_spread/1/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "', p_FunctionTag, '",', v_crlf,
|
||||
-- 上呈人暫時先 hard code(慢慢想辦法), 目前是定義在 bpm_list.source_applicant (跨 db)
|
||||
' "para02": "${personid}",', v_crlf,
|
||||
' "para03": "${', p_pk, '}"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "level": "primary"', v_crlf,
|
||||
' },', v_crlf
|
||||
)
|
||||
ELSE
|
||||
-- 同意
|
||||
CONCAT(
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "同意",', v_crlf,
|
||||
' "actionType": "dialog",', v_crlf,
|
||||
' "level": "success",', v_crlf,
|
||||
' "disabledOn": "${ls:bpm_signable == 0}",', v_crlf,
|
||||
' "dialog": {', v_crlf,
|
||||
' "title": "同意",', v_crlf,
|
||||
' "size": "lg",', v_crlf,
|
||||
' "body": {', v_crlf,
|
||||
' "type": "service",', v_crlf,
|
||||
' "schemaApi": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:wizard_db}/zen_showsource/0/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "bpmm11_i",', v_crlf,
|
||||
' "para02": "beta@${', p_pk, '}"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form"', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' },', v_crlf,
|
||||
-- 駁回
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "駁回",', v_crlf,
|
||||
' "actionType": "dialog",', v_crlf,
|
||||
' "level": "danger",', v_crlf,
|
||||
' "disabledOn": "${ls:bpm_signable == 0}",', v_crlf,
|
||||
' "dialog": {', v_crlf,
|
||||
' "title": "駁回",', v_crlf,
|
||||
' "size": "lg",', v_crlf,
|
||||
' "body": {', v_crlf,
|
||||
' "type": "service",', v_crlf,
|
||||
' "schemaApi": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:wizard_db}/zen_showsource/0/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "bpmm12_i",', v_crlf,
|
||||
' "para02": "beta@${', p_pk, '}"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form"', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' },', v_crlf,
|
||||
-- 作廢
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "作廢",', v_crlf,
|
||||
' "actionType": "dialog",', v_crlf,
|
||||
' "level": "dark",', v_crlf,
|
||||
' "disabledOn": "${ls:bpm_cancelable > 0}",', v_crlf,
|
||||
' "dialog": {', v_crlf,
|
||||
' "title": "作廢",', v_crlf,
|
||||
' "size": "lg",', v_crlf,
|
||||
' "body": {', v_crlf,
|
||||
' "type": "service",', v_crlf,
|
||||
' "schemaApi": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:wizard_db}/zen_showsource/0/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "bpmm13_i",', v_crlf,
|
||||
' "para02": "beta@${', p_pk, '}"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form"', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' },', v_crlf
|
||||
)
|
||||
END,
|
||||
-- 簽核歷程
|
||||
CONCAT(
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "簽核歷程",', v_crlf,
|
||||
' "actionType": "dialog",', v_crlf,
|
||||
' "level": "warning",', v_crlf,
|
||||
' "dialog": {', v_crlf,
|
||||
' "title": "簽核歷程",', v_crlf,
|
||||
' "size": "lg",', v_crlf,
|
||||
' "body": {', v_crlf,
|
||||
' "type": "service",', v_crlf,
|
||||
' "schemaApi": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:wizard_db}/zen_showsource/0/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "bpmq11",', v_crlf,
|
||||
' "para02": "beta@${', p_pk, '}",', v_crlf,
|
||||
' "_tag": "', p_FunctionTag, '"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form",', v_crlf,
|
||||
' "requestAdaptor": "local_set_params(51, api.data._tag); return { ...api, data: { ...api.data }};"', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' },', v_crlf,
|
||||
-- 檢視後續簽核人
|
||||
' {', v_crlf,
|
||||
' "type": "button",', v_crlf,
|
||||
' "label": "檢視流程簽核人",', v_crlf,
|
||||
' "actionType": "dialog",', v_crlf,
|
||||
' "level": "secondary",', v_crlf,
|
||||
' "dialog": {', v_crlf,
|
||||
' "title": "檢視流程簽核人",', v_crlf,
|
||||
' "size": "lg",', v_crlf,
|
||||
' "body": {', v_crlf,
|
||||
' "type": "service",', v_crlf,
|
||||
' "schemaApi": {', v_crlf,
|
||||
' "method": "post",', v_crlf,
|
||||
' "url": "${ls:base_ip}/xapi/v2/${ls:wizard_db}/zen_showsource/0/",', v_crlf,
|
||||
' "data": {', v_crlf,
|
||||
' "para01": "bpmq12",', v_crlf,
|
||||
' "para02": "beta@${', p_pk, '}",', v_crlf,
|
||||
' "_tag": "', p_FunctionTag, '"', v_crlf,
|
||||
' },', v_crlf,
|
||||
' "dataType": "form",', v_crlf,
|
||||
' "requestAdaptor": "local_set_params(51, api.data._tag); return { ...api, data: { ...api.data }};"', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' }', v_crlf,
|
||||
' ]', v_crlf,
|
||||
' },', v_crlf,
|
||||
' {', v_crlf,
|
||||
' "type": "divider"', v_crlf,
|
||||
' },', v_crlf
|
||||
)
|
||||
);
|
||||
|
||||
RETURN v_rets;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user