68 lines
1.8 KiB
Plaintext
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 VARCHAR(1000)
|
|
BEGIN
|
|
DECLARE v_imax INT;
|
|
DECLARE v_imin INT;
|
|
DECLARE v_inow INT;
|
|
DECLARE v_signerid VARCHAR(20);
|
|
DECLARE v_all_signers VARCHAR(1000);
|
|
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 ; |