Files
Omni_bpm.db/bpmm02_udf_next_signer.txt
T
2026-02-06 14:35:36 +08:00

68 lines
1.8 KiB
Plaintext

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 ;