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), -- 建議由外部傳入或設定預設值,MariaDB 參數不支援直接用變數當預設值 p_db VARCHAR(100) ) RETURNS LONGTEXT LANGUAGE SQL DETERMINISTIC BEGIN DECLARE v_rets LONGTEXT; DECLARE v_crlf CHAR(1); DECLARE v_type CHAR(1); -- 設定換行符號 [cite: 3, 4] SET v_crlf = CHAR(10); -- 判斷是否為簽核用 view IF INSTR(p_FunctionTag_org, '_') > 0 THEN SET v_type = 'Y'; ELSE SET v_type = 'N'; END IF; -- 開始組合 JSON 字串 [cite: 5] SET v_rets = CONCAT( ' {', v_crlf, ' "type": "button-toolbar",', v_crlf, ' "buttons": [', v_crlf ); -- 根據 @type 決定按鈕內容 [cite: 5] IF v_type = 'N' THEN -- 上呈按鈕 [cite: 5, 6] SET v_rets = CONCAT(v_rets, ' {', v_crlf, ' "type": "button",', v_crlf, ' "label": "上呈",', v_crlf, ' "actionType": "ajax",', v_crlf, ' "confirmText": "確定要上呈表單?",', v_crlf, ' "disabledOn": "${flow_status != ''N''}",', v_crlf, ' "api": {', v_crlf, ' "method": "post",', v_crlf, ' "url": "${ls:base_ip}/xapi/v3/${ls:base_db}/bpmm02_spread/1/",', v_crlf, ' "data": {', v_crlf, ' "para01": "', p_FunctionTag, '",', v_crlf, ' "para02": "${personid}",', v_crlf, ' "para03": "${', p_pk, '}"', v_crlf, ' },', v_crlf, ' "dataType": "form"', v_crlf, ' },', v_crlf, ' "level": "primary"', v_crlf, ' },', v_crlf ); ELSE -- 同意、駁回、作廢按鈕 (簽核模式) [cite: 10, 15, 20] SET v_rets = CONCAT(v_rets, -- 同意 [cite: 11, 12] ' {', v_crlf, ' "type": "button", "label": "同意", "actionType": "dialog", "level": "success",', v_crlf, ' "disabledOn": "${ls:bpm_signable == 0}",', v_crlf, ' "dialog": { "title": "同意", "size": "lg", "body": { "type": "service", "schemaApi": {', v_crlf, ' "method": "post", "url": "${ls:base_ip}/xapi/v3/${ls:wizard_db}/zen_showsource/0/",', v_crlf, ' "data": { "para01": "bpmm11_i", "para02": "beta@${', p_pk, '}" }, "dataType": "form"', v_crlf, ' } } }', v_crlf, ' },', v_crlf, -- 駁回 [cite: 15, 16, 17] ' {', v_crlf, ' "type": "button", "label": "駁回", "actionType": "dialog", "level": "danger",', v_crlf, ' "disabledOn": "${ls:bpm_signable == 0}",', v_crlf, ' "dialog": { "title": "駁回", "size": "lg", "body": { "type": "service", "schemaApi": {', v_crlf, ' "method": "post", "url": "${ls:base_ip}/xapi/v3/${ls:wizard_db}/zen_showsource/0/",', v_crlf, ' "data": { "para01": "bpmm12_i", "para02": "beta@${', p_pk, '}" }, "dataType": "form"', v_crlf, ' } } }', v_crlf, ' },', v_crlf, -- 作廢 [cite: 20, 21, 22] ' {', v_crlf, ' "type": "button", "label": "作廢", "actionType": "dialog", "level": "dark",', v_crlf, ' "disabledOn": "${ls:bpm_cancelable > 0}",', v_crlf, ' "dialog": { "title": "作廢", "size": "lg", "body": { "type": "service", "schemaApi": {', v_crlf, ' "method": "post", "url": "${ls:base_ip}/xapi/v3/${ls:wizard_db}/zen_showsource/0/",', v_crlf, ' "data": { "para01": "bpmm13_i", "para02": "beta@${', p_pk, '}" }, "dataType": "form"', v_crlf, ' } } }', v_crlf, ' },', v_crlf ); END IF; -- 簽核歷程 [cite: 25, 26, 27] SET v_rets = CONCAT(v_rets, ' {', v_crlf, ' "type": "button", "label": "簽核歷程", "actionType": "dialog", "level": "warning",', v_crlf, ' "dialog": { "title": "簽核歷程", "size": "lg", "body": { "type": "service", "schemaApi": {', v_crlf, ' "method": "post", "url": "${ls:base_ip}/xapi/v3/${ls:wizard_db}/zen_showsource/0/",', v_crlf, ' "data": { "para01": "bpmq11", "para02": "beta@${', p_pk, '}", "_tag": "', p_FunctionTag, '" },', v_crlf, ' "dataType": "form", "requestAdaptor": "local_set_params(51, api.data._tag); return { ...api, data: { ...api.data }};"', v_crlf, ' } } }', v_crlf, ' },', v_crlf ); -- 檢視流程簽核人 [cite: 30, 31, 32] SET v_rets = CONCAT(v_rets, ' {', v_crlf, ' "type": "button", "label": "檢視流程簽核人", "actionType": "dialog", "level": "secondary",', v_crlf, ' "dialog": { "title": "檢視流程簽核人", "size": "lg", "body": { "type": "service", "schemaApi": {', v_crlf, ' "method": "post", "url": "${ls:base_ip}/xapi/v3/${ls:wizard_db}/zen_showsource/0/",', v_crlf, ' "data": { "para01": "bpmq12", "para02": "beta@${', p_pk, '}", "_tag": "', p_FunctionTag, '" },', v_crlf, ' "dataType": "form", "requestAdaptor": "local_set_params(51, api.data._tag); return { ...api, data: { ...api.data }};"', v_crlf, ' } } }', v_crlf, ' }', v_crlf, ' ]', v_crlf, ' },', v_crlf, ' { "type": "divider" },', v_crlf ); RETURN v_rets; END // DELIMITER ;