First commit, 已上架的電子書

This commit is contained in:
DATAEXPRESS\4734
2026-01-19 17:39:31 +08:00
commit 0b2351e4da
1146 changed files with 1442668 additions and 0 deletions
@@ -0,0 +1,60 @@
CREATE PROC DBO.GEXBPM_ADDSIGN
(
@BILLTAG VARCHAR(20), --單別
@BILLNO VARCHAR(20), --簽核單號
@SOURCEBILLNO VARCHAR(30), --原單單號(原單呼叫用, 可空白)
@ADDTYPE SMALLINT,
@PERSONID NVARCHAR(20)
)
AS
/*
Function : FLOW 加簽時的更新資料程序
Description: 加簽事實上就是插行到指定列, @BILLNO 和 @SOURCEBILLNO 只能有一個有值
以 @BILLNO 優先
@ADDTYPE = 0 加入在目前待簽資料之前
3 加入在目前待簽資料之後
Build Date : 2012/11/14
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/07/13 修改新增的加簽欄號錯誤的問題
*/
DECLARE @SEQ1 INT
DECLARE @SEQ2 INT
DECLARE @SEQ3 INT
IF (@BILLNO = '') AND (@SOURCEBILLNO <> '')
BEGIN
SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @SOURCEBILLNO
END
--取得簽核單目前的 [待簽]
IF ISNULL(@BILLNO,'') <> ''
BEGIN
SELECT @SEQ1=SEQNO FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
IF @SEQ1 IS NULL SET @SEQ1 = 1
IF @ADDTYPE = 0
BEGIN
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO < ISNULL(@SEQ1,1)
IF @SEQ2 IS NULL SET @SEQ2 = 0
SET @SEQ3 = @SEQ2 + (@SEQ1-@SEQ2)/2
END
ELSE BEGIN
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > ISNULL(@SEQ1,1)
IF @SEQ2 IS NULL SET @SEQ2 = @SEQ1 + 10
SET @SEQ3 = @SEQ1 + (@SEQ2-@SEQ1)/2
END
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,SIGN_TITLE,SIGNPERSON,AGENTID,SENDMAIL,NOTIFY_ONLY,FLOWSTATUS)
VALUES (@BILLNO,@SEQ3,'動態加簽',@PERSONID,'','Y','N',@ADDTYPE)
--發送 MAIL 通知
EXEC GEX_SEND_FLOWMAIL 'S',@PERSONID, @BILLNO, '動態加簽'
END
@@ -0,0 +1,48 @@
CREATE PROC DBO.GEXBPM_CHECKSETUP
(
@BILLTAG VARCHAR(20)
)
/*
Function : 檢查 FLOW 的設定是否正確
Description: 目前只能手動在 SQL 中執行, 如果要加到程式中, 要請 RD 手寫程式
Build Date : 2013/08/01
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
*/
AS
DECLARE @FILTER NVARCHAR(2000)
DECLARE @SQL2 NVARCHAR(2000)
DECLARE @SOURCETABLE VARCHAR(100)
DECLARE @RETVAL INT --sp 傳參數
DECLARE @SEQNO INT
DECLARE contact_cursor CURSOR FOR
SELECT A.SEQNO,A.FILTER,B.SOURCETABLE FROM BPM_FLOWSETUP_D A
LEFT JOIN BPM_FLOWSETUP_M B ON A.BILLTAG = B.BILLTAG
WHERE B.BILLTAG = @BILLTAG AND ISNULL(A.FILTER,'') <> ''
ORDER BY 1
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @SEQNO,@FILTER,@SOURCETABLE
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETABLE + ' WHERE ' + @FILTER
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
PRINT 'SEQNO: ' + CAST(@SEQNO AS VARCHAR(10)) + ' FILTER: ' + @FILTER
FETCH NEXT FROM contact_cursor
INTO @SEQNO,@FILTER,@SOURCETABLE
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
@@ -0,0 +1,77 @@
CREATE PROC DBO.GEXBPM_DELAYSEND
AS
/*
Function : FLOW 催簽作業的 sp
Description: 簡單的說, 催簽就是當有簽單卡住時, 自動再發送 mail 通知卡單的人快簽
我們的程式當然是撈出逾時的資料, 然後發 mail 如此
自動催簽的方法, 我是擴充 GEX_PREPROCESS_V2 這個 sp
這個 sp 會在 Login 時自動執行, 所以就加在現有的機制中了(每天執行一次)
Build Date : 2012/11/14
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/07/17 新增每一關簽核也要判斷是否逾期
*/
--取得逾期的簽核資料
WITH BPM1
AS
(
SELECT A.BILLNO,MAX(A.BILLDATE) BILLDATE FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
WHERE B.FLOWSTATUS <= 3 --未完成
GROUP BY A.BILLNO
), BPM2
AS
(
SELECT A.BILLNO,A.FLOWINDATE BILLDATE FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
WHERE B.FLOWSTATUS <= 3 --未完成
AND A.SEQNO = 0
), BPM3
AS
(
SELECT A.BILLNO,DATEDIFF(DAY,A.BILLDATE,B.BILLDATE) DIFFDATE,BPM2.EMERGENCYDATE FROM BPM2 A
LEFT JOIN BPM1 B ON A.BILLNO = B.BILLNO
LEFT JOIN BPM_FLOWDATA_M BPM1 ON A.BILLNO = BPM1.BILLNO
LEFT JOIN BPM_FLOWSETUP_M BPM2 ON BPM1.BILLTAG = BPM2.BILLTAG
)
SELECT BILLNO,dbo.GEXFUNC_GETNEXT(BILLNO) SIGNPERSON INTO #DELAY_BPM FROM BPM3 WHERE DIFFDATE > EMERGENCYDATE
--新增每一關簽核也要判斷是否逾期
INSERT INTO #DELAY_BPM (BILLNO,SIGNPERSON)
SELECT A.BILLNO,dbo.GEXFUNC_GETNEXT(A.BILLNO) FROM BPM_FLOWDATA_LOG A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
LEFT JOIN BPM_FLOWSETUP_D X ON X.BILLTAG = B.BILLTAG AND A.SOURCESEQNO = X.SEQNO
WHERE CASE WHEN ISNULL(X.SIGNDAYS,0)=0 THEN 0 ELSE DATEDIFF(DAY,A.FLOWINDATE,GETDATE()) - X.SIGNDAYS END > 0
AND B.FLOWSTATUS <= 3 --未完成
DECLARE @BILLNO VARCHAR(20)
DECLARE @SIGNPERSON VARCHAR(20)
DECLARE contact_cursor CURSOR FOR
SELECT BILLNO,SIGNPERSON FROM #DELAY_BPM
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
--發送 mail
EXEC GEX_SEND_FLOWMAIL 'S',@SIGNPERSON, @BILLNO, '催簽: 簽核過期'
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
DROP TABLE #DELAY_BPM
@@ -0,0 +1,42 @@
CREATE PROC DBO.GEXBPM_GENFLOW1
(
@LOGINID NVARCHAR(30) = '*'
)
AS
/*
Function : 讀 BPM_FLOWSETUP_M, 準備產生 FLOW DATA
Description: 本功能要能依傳入的 LOGINID, 只產生該人員的 FLOW 資料
當然, 也可以傳入 * 表示全部人士的 FLOW 都上呈
利用 SQL 原本的機制, 傳入預設值
Build Date : 2011/10/01
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2012/10/24 新增 LOGINID, 上呈應該只上呈自己的單據較合理
如果是助理代輸入, 還是要請單據上的 PERSONID 上呈較合理
*/
DECLARE @BILLTAG VARCHAR(20)
DECLARE @SQL_DEFINE VARCHAR(2000)
DECLARE contact_cursor CURSOR FOR
SELECT Z.BILLTAG,Z.SQL_DEFINE FROM BPM_FLOWSETUP_M Z
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @BILLTAG,@SQL_DEFINE
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC GEXBPM_GENFLOW2 @BILLTAG,'',@SQL_DEFINE,@LOGINID
FETCH NEXT FROM contact_cursor
INTO @BILLTAG,@SQL_DEFINE
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
@@ -0,0 +1,316 @@
CREATE PROC DBO.GEXBPM_GENFLOW2
(
@BILLTAG VARCHAR(20),
@ASSIGBILL VARCHAR(20), --指定某來源單號(無表示全部)
@SQL_DEFINE NVARCHAR(2000),
@LOGINID NVARCHAR(30)
)
/*
Function : 讀 BPM_FLOWSETUP_M, 產生 FLOW DATA
Description:
Build Date : 2011/10/01
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/10/01 新增
2 Michael 2011/10/04 加入 Where 判斷及 Manager 處理
3 Michael 2011/10/06 新增 Agent 及指定欄位內容為簽核人
4 Michael 2012/10/30 新增有限度的支援條件式簽核(原單 PK 僅支援單一鍵值)
5 Michael 2012/11/22 新增 FLOW_DESC 欄位
6 Michael 2013/07/12 新增若群組內無人則不產生的判斷
7 Michael 2013/07/14 如果連續幾個簽核都是同一個人, 只產生第一筆
8 Michael 2013/07/15 修改 sp 中關於動態 sql 語法傳回值的寫法
9 Michael 2013/07/23 新增上呈時產生簽核明細, 一併產生其主代理人及 mail
10 Michael 2013/07/26 處理 MANAGER 等的簽核過濾條件
11 Michael 2013/08/08 新增部份多階主管的相關設定及展算, 原為 PICK 專案, 但併入標準版
SQL_DEFINE 新增 DEPARTMENTID 的內容, BPM_FLOWDATA_M 新增2個欄位
12 Michael 2013/08/31 新增萬一無人需簽核時, 刪除相關記錄
13 Michael 2013/09/23 新增刪除連續相同人員時, 僅通知不必判斷
*/
AS
--Flow 單號
DECLARE @G_BILLNO VARCHAR(20)
--跑迴圈
DECLARE @BILLDATE DATETIME
DECLARE @BILLNO VARCHAR(20)
DECLARE @PERSONID VARCHAR(20)
DECLARE @KEYDEF NVARCHAR(200)
DECLARE @FLOW_DESC NVARCHAR(600)
DECLARE @SIGNING NVARCHAR(50)
DECLARE @FLOWP CHAR(1)
DECLARE @SOURCETBL VARCHAR(100)
DECLARE @SOURCEPK VARCHAR(100)
--第二層 LOOP 使用的 VAR
DECLARE @SEQNO INT
DECLARE @SEQ INT
DECLARE @SEQ2 INT
DECLARE @CNT INT
DECLARE @SIGNPERSON VARCHAR(100)
DECLARE @PRE_PERSON VARCHAR(100)
DECLARE @ORG_PERSON VARCHAR(100)
DECLARE @BOSS_PERSON VARCHAR(100)
DECLARE @FILTER NVARCHAR(2000)
DECLARE @SQL NVARCHAR(2000)
DECLARE @SQL1 NVARCHAR(2000)
DECLARE @SQL2 NVARCHAR(2000)
DECLARE @SOURCEFLD VARCHAR(2000)
DECLARE @RETVAL INT --sp 傳參數
DECLARE @SIGN_TITLE NVARCHAR(200)
DECLARE @LAVEL VARCHAR(10)
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
--單一單據單一執行時(也算防錯)
IF @SQL_DEFINE = '' OR @SQL_DEFINE IS NULL
BEGIN
SELECT @SQL_DEFINE=SQL_DEFINE FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
END
--將來源資料寫到暫存檔
SET @SQL_DEFINE = 'SELECT G.* INTO ##BPM_TMP1 FROM (' + @SQL_DEFINE + ') G'
EXECUTE SP_EXECUTESQL @SQL_DEFINE
--指定某來源單(例如重新產生)
IF @ASSIGBILL <> ''
BEGIN
DELETE FROM ##BPM_TMP1 WHERE BILLNO <> @ASSIGBILL
END
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
DECLARE contact_cursor2 CURSOR FOR
SELECT Z.BILLDATE,Z.BILLNO,Z.PERSONID,Z.DEPARTMENTID,Z.KEYDEF,Z.FLOW_DESC FROM ##BPM_TMP1 Z
WHERE CASE WHEN @LOGINID = '*' THEN '*' ELSE Z.PERSONID END = @LOGINID
OPEN contact_cursor2
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor2
INTO @BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,@KEYDEF,@FLOW_DESC
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
WAITFOR DELAY '00:00:00.005'
SELECT @G_BILLNO=REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR,GETDATE(),25),'-',''),' ',''),':','')
INSERT INTO BPM_FLOWDATA_M (BILLNO,BILLTAG,SOURCEBILLDATE,SOURCEBILLNO,SOURCEPERSONID,SOURCEDEPARTMENT,FLOWSTATUS,ISEMERGENCY,FLOW_DESC)
SELECT @G_BILLNO,@BILLTAG,@BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,0,'N',@FLOW_DESC
/*
第一筆資料較特殊, 除了標準設定, 要新增 [上呈人員], 就是原單的 PERSONID, SEQNO = 1(固定)
因為通知和退簽都會用到
*/
SELECT @SEQNO=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,FLOWSTATUS,SIGN_TITLE,SIGNPERSON,SENDMAIL,NOTIFY_ONLY,ORG_GROUP)
SELECT @G_BILLNO,0,1,'上呈',@PERSONID,'N','N',''
UNION ALL
SELECT
@G_BILLNO,B.SEQNO,
CASE WHEN B.SEQNO=@SEQNO THEN 0 ELSE 3 END,
B.SIGN_TITLE,
--直屬主管, 原單某欄位值或代理人
CASE WHEN B.SIGNPERSON = 'MANAGER' THEN '@MANAGER'
WHEN B.SIGNPERSON = 'AGENT' THEN '@AGENT'
WHEN B.SIGNPERSON = 'FIELDDEF' THEN '@FIELDDEF'
WHEN SUBSTRING(B.SIGNPERSON,1,7) = 'DEPBOSS' THEN '@'+B.SIGNPERSON
ELSE ISNULL(G.USERID,'') END,
B.SENDMAIL,B.NOTIFY_ONLY,B.SIGNPERSON
FROM BPM_FLOWSETUP_D B
LEFT JOIN USERGROUPS G ON B.SIGNPERSON = G.GROUPID
WHERE B.BILLTAG = @BILLTAG --AND ISNULL(G.USERID,'') <> '' --本條件會連 MANAGER/AGENT 都被檔掉
ORDER BY 2
--寫第一筆資料到 log
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON)
SELECT
@G_BILLNO,@SEQNO,0,GETDATE(),GETDATE(),1,@PERSONID
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
SET @FLOWP = 'P'
SET @SIGNING = 'FLOWSIGNING'
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@SIGNING+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWP+CHAR(39) +
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @BILLNO + CHAR(39)
EXECUTE SP_EXECUTESQL @SQL
--取原單某欄位
SET @SQL2 = 'SELECT G.* INTO ##BPM_TMP3 FROM (SELECT * FROM ##BPM_TMP1 WHERE BILLNO = ' + CHAR(39) + @BILLNO + CHAR(39) + ') G'
EXECUTE SP_EXECUTESQL @SQL2
SELECT @SOURCEFLD=SOURCEFLD FROM ##BPM_TMP3
DROP TABLE ##BPM_TMP3
--再次處理 MANAGER 和條件簽核
DECLARE contact_cursor3 CURSOR FOR
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO ORDER BY SEQNO
OPEN contact_cursor3
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor3
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
SET @ORG_PERSON = @SIGNPERSON
SET @PRE_PERSON = @SIGNPERSON
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
SET @BOSS_PERSON = @SIGNPERSON
IF @SIGNPERSON = '@MANAGER'
BEGIN
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@MANAGER'
END
ELSE IF @SIGNPERSON = '@AGENT'
BEGIN
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@AGENT'
END
ELSE IF @SIGNPERSON = '@FIELDDEF'
BEGIN
--原單某欄位值
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @SOURCEFLD
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@FIELDDEF'
SET @BOSS_PERSON = @SOURCEFLD
END
--以下為專案特殊寫法
ELSE IF SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
BEGIN
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
SET @LAVEL = SUBSTRING(@SIGNPERSON,9,1)
SELECT
@BOSS_PERSON=
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
WHEN @LAVEL = '2' THEN DE2_LEADER
WHEN @LAVEL = '3' THEN DE3_LEADER
WHEN @LAVEL = '4' THEN DE4_LEADER
WHEN @LAVEL = '5' THEN DE5_LEADER
WHEN @LAVEL = '6' THEN DE6_LEADER
ELSE ISNULL(DE1_LEADER,'') END
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
END
/*
以下是條件式判斷的程式邏輯
目前的寫法, 只能處理 PK 是一個欄位(如單號), 暫不支援複合 PK 的表單
*/
SELECT @FILTER=B.FILTER FROM BPM_FLOWSETUP_D B
LEFT JOIN BPM_FLOWSETUP_M A ON A.BILLTAG = B.BILLTAG
WHERE B.BILLTAG = @BILLTAG AND B.SEQNO = @SEQ AND B.SIGN_TITLE = @SIGN_TITLE
IF @FILTER IS NULL SET @FILTER = ''
IF LEN(@FILTER) > 0
BEGIN
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETBL + ' WHERE ' + @SOURCEPK + ' = ' + CHAR(39)+@BILLNO+CHAR(39) + ' AND ' + @FILTER
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
IF @RETVAL <= 0 UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
END
/*
如果連續幾個簽核都是同一個人, 只產生第一筆即可(待測試)
因為要留最末筆, 所有不在此刪, 另起一個 LOOP 處理
*/
--IF @PRE_PERSON = @BOSS_PERSON AND @SEQ > 10
-- UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
SET @PRE_PERSON = @BOSS_PERSON
FETCH NEXT FROM contact_cursor3
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
END
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
--刪除空白人員
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
CLOSE contact_cursor3
DEALLOCATE contact_cursor3
FETCH NEXT FROM contact_cursor2
INTO @BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,@KEYDEF,@FLOW_DESC
END
CLOSE contact_cursor2
DEALLOCATE contact_cursor2
--刪除連續的相同人員(僅通知不必判斷)
DECLARE contact_cursor9 CURSOR FOR
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(NOTIFY_ONLY,'') <> 'Y' ORDER BY SEQNO DESC
OPEN contact_cursor9
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor9
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
SET @PRE_PERSON = ''
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @PRE_PERSON = @SIGNPERSON AND @SEQ > 0
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
SET @PRE_PERSON = @SIGNPERSON
FETCH NEXT FROM contact_cursor9
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
END
CLOSE contact_cursor9
DEALLOCATE contact_cursor9
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
--END OF 刪除連續的相同人員
--設大於0 的第一筆狀況為待簽
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND SEQNO > 0
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ2
--一併產生代理人
UPDATE BPM_FLOWDATA_D SET AGENTID = ISNULL((SELECT TOP 1 AGENTID FROM BASPERSON_AGENT WHERE BASPERSON_AGENT.PERSONID = BPM_FLOWDATA_D.SIGNPERSON AND PRIOITY <= 1),AGENTID)
WHERE BILLNO = @G_BILLNO
--判斷是否要發 mail 通知
DECLARE @ISMAIL CHAR(1)
DECLARE @USERID VARCHAR(30)
DECLARE @AGENTID VARCHAR(30)
SELECT TOP 1 @ISMAIL=SENDMAIL,@USERID=SIGNPERSON,@AGENTID=AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 0 --待簽
IF @ISMAIL = 'Y'
BEGIN
EXEC GEX_SEND_FLOWMAIL 'S',@USERID, @G_BILLNO, '上呈'
IF ISNULL(@AGENTID,'') <> '' EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @G_BILLNO, '上呈(代理人)'
END
--如果本簽核無表身, 表示不需簽核, 刪除 log 及表頭(防錯)
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO
IF @CNT <= 0
BEGIN
DELETE FROM BPM_FLOWDATA_M WHERE BILLNO = @G_BILLNO
DELETE FROM BPM_FLOWDATA_LOG WHERE BILLNO = @G_BILLNO
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
SET @FLOWP = 'Z'
SET @SIGNING = 'NO-SIGN'
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@SIGNING+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWP+CHAR(39) +
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @BILLNO + CHAR(39)
EXECUTE SP_EXECUTESQL @SQL
END
DROP TABLE ##BPM_TMP1
@@ -0,0 +1,242 @@
CREATE PROC DBO.GEXBPM_GENFLOW3
(
@G_BILLNO VARCHAR(20) --簽核單號
)
/*
Function : 重新產生 BPM_FLOWDATA_D
Description: 本作業是當原單已產生 FLOWDATA
但又修改原單, 此時僅需(能)重新產生表身
目前應該是在 BPMMG1 的 [重新載入] 有呼叫
Build Date : 2011/10/06
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/07/26 依新版修正的規格改寫
2 Michael 2013/08/02 已加入判斷, 已開始簽核就不能重新產生
新增 ORG_GROUP, 方便重新產生變動的簽核人用
3 Michael 2013/08/08 新增部份多階主管的相關設定及展算, 原為 PICK 專案, 但併入標準版
4 Michael 2013/09/23 新增刪除連續相同人員時, 僅通知不必判斷
*/
AS
--Flow 單號
DECLARE @BILLTAG VARCHAR(20)
DECLARE @SQL_DEFINE NVARCHAR(800)
DECLARE @SOURCEBILLNO VARCHAR(20)
--原單
DECLARE @BILLDATE DATETIME
DECLARE @BILLNO VARCHAR(20)
DECLARE @PERSONID VARCHAR(20)
DECLARE @KEYDEF NVARCHAR(200)
DECLARE @SOURCETBL VARCHAR(100)
DECLARE @SOURCEPK VARCHAR(100)
--第二層 LOOP 使用的 VAR
DECLARE @SEQNO INT
DECLARE @SEQ INT
DECLARE @SEQ2 INT
DECLARE @CNT INT
DECLARE @SIGNPERSON VARCHAR(100)
DECLARE @PRE_PERSON VARCHAR(100)
DECLARE @ORG_PERSON VARCHAR(100)
DECLARE @BOSS_PERSON VARCHAR(100)
DECLARE @FILTER NVARCHAR(2000)
DECLARE @SQL NVARCHAR(2000)
DECLARE @SQL1 NVARCHAR(2000)
DECLARE @SQL2 NVARCHAR(2000)
DECLARE @SOURCEFLD VARCHAR(200)
DECLARE @RETVAL INT --sp 傳參數
DECLARE @SIGN_TITLE NVARCHAR(200)
DECLARE @LAVEL VARCHAR(10)
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
--如果 log 檔筆數大於 1(已經開始簽核), 就不能重新產生
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @G_BILLNO
IF @CNT > 1 RETURN
--取得 Tag 及 SQLDef
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @G_BILLNO
SELECT @SQL_DEFINE=SQL_DEFINE FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
SELECT @CNT=CHARINDEX('WHERE ',@SQL_DEFINE)
SET @SQL_DEFINE = SUBSTRING(@SQL_DEFINE,1,@CNT-1) + ' WHERE BILLNO = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
--將來源資料寫到暫存檔
SET @SQL_DEFINE = 'SELECT G.* INTO ##BPM_TMP1 FROM (' + @SQL_DEFINE + ' AND BILLNO = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39) + ') G'
EXECUTE SP_EXECUTESQL @SQL_DEFINE
SELECT @BILLDATE=BILLDATE,@BILLNO=BILLNO,@PERSONID=PERSONID,@DEPARTMENTID=DEPARTMENTID,@KEYDEF=KEYDEF FROM ##BPM_TMP1
--刪除並重新產生FLOW DETAIL
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO
SELECT @SEQNO=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,FLOWSTATUS,SIGN_TITLE,SIGNPERSON,SENDMAIL,NOTIFY_ONLY,ORG_GROUP)
SELECT @G_BILLNO,0,1,'上呈',@PERSONID,'N','N',''
UNION ALL
SELECT
@G_BILLNO,B.SEQNO,
CASE WHEN B.SEQNO=@SEQNO THEN 0 ELSE 3 END,
B.SIGN_TITLE,
--直屬主管, 原單某欄位值或代理人
CASE WHEN B.SIGNPERSON = 'MANAGER' THEN '@MANAGER'
WHEN B.SIGNPERSON = 'AGENT' THEN '@AGENT'
WHEN B.SIGNPERSON = 'FIELDDEF' THEN '@FIELDDEF'
WHEN SUBSTRING(B.SIGNPERSON,1,7) = 'DEPBOSS' THEN '@'+B.SIGNPERSON
ELSE ISNULL(G.USERID,'') END,
B.SENDMAIL,B.NOTIFY_ONLY,B.SIGNPERSON
FROM BPM_FLOWSETUP_D B
LEFT JOIN USERGROUPS G ON B.SIGNPERSON = G.GROUPID
WHERE B.BILLTAG = @BILLTAG
ORDER BY 2
--取原單某欄位
SET @SQL2 = 'SELECT G.* INTO ##BPM_TMP3 FROM (SELECT * FROM ##BPM_TMP1 ) G'
EXECUTE SP_EXECUTESQL @SQL2
SELECT @SOURCEFLD=SOURCEFLD FROM ##BPM_TMP3
DROP TABLE ##BPM_TMP3
--再次處理 MANAGER 和條件簽核
DECLARE contact_cursor3 CURSOR FOR
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO ORDER BY SEQNO
OPEN contact_cursor3
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor3
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
SET @ORG_PERSON = @SIGNPERSON
SET @PRE_PERSON = @SIGNPERSON
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
SET @BOSS_PERSON = @SIGNPERSON
IF @SIGNPERSON = '@MANAGER'
BEGIN
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@MANAGER'
END
ELSE IF @SIGNPERSON = '@AGENT'
BEGIN
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@AGENT'
END
ELSE IF @SIGNPERSON = '@FIELDDEF'
BEGIN
--原單某欄位值
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @SOURCEFLD
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@FIELDDEF'
SET @BOSS_PERSON = @SOURCEFLD
END
--以下為專案特殊寫法
ELSE IF SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
BEGIN
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
SET @LAVEL = SUBSTRING(@SIGNPERSON,9,1)
SELECT
@BOSS_PERSON=
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
WHEN @LAVEL = '2' THEN DE2_LEADER
WHEN @LAVEL = '3' THEN DE3_LEADER
WHEN @LAVEL = '4' THEN DE4_LEADER
WHEN @LAVEL = '5' THEN DE5_LEADER
WHEN @LAVEL = '6' THEN DE6_LEADER
ELSE ISNULL(DE1_LEADER,'') END
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
END
/*
以下是條件式判斷的程式邏輯
目前的寫法, 只能處理 PK 是一個欄位(如單號), 暫不支援複合 PK 的表單
*/
SELECT @FILTER=B.FILTER FROM BPM_FLOWSETUP_D B
LEFT JOIN BPM_FLOWSETUP_M A ON A.BILLTAG = B.BILLTAG
WHERE B.BILLTAG = @BILLTAG AND B.SEQNO = @SEQ AND B.SIGN_TITLE = @SIGN_TITLE
IF @FILTER IS NULL SET @FILTER = ''
IF LEN(@FILTER) > 0
BEGIN
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETBL + ' WHERE ' + @SOURCEPK + ' = ' + CHAR(39)+@BILLNO+CHAR(39) + ' AND ' + @FILTER
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
IF @RETVAL <= 0 UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
END
/*
如果連續幾個簽核都是同一個人, 只產生第一筆即可(待測試)
因為要留最末筆, 所有不在此刪, 另起一個 LOOP 處理
*/
--IF @PRE_PERSON = @BOSS_PERSON AND @SEQ > 10
-- UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
SET @PRE_PERSON = @BOSS_PERSON
FETCH NEXT FROM contact_cursor3
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
END
CLOSE contact_cursor3
DEALLOCATE contact_cursor3
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
--刪除空白人員
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
--刪除連續的相同人員(僅通知不必判斷)
DECLARE contact_cursor9 CURSOR FOR
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(NOTIFY_ONLY,'') <> 'Y' ORDER BY SEQNO DESC
OPEN contact_cursor9
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor9
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
SET @PRE_PERSON = ''
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @PRE_PERSON = @SIGNPERSON AND @SEQ > 0
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
SET @PRE_PERSON = @SIGNPERSON
FETCH NEXT FROM contact_cursor9
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
END
CLOSE contact_cursor9
DEALLOCATE contact_cursor9
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
--刪除空白人員
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
--設大於0 的第一筆狀況為待簽
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND SEQNO > 0
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ2
--一併產生代理人
UPDATE BPM_FLOWDATA_D SET AGENTID = ISNULL((SELECT TOP 1 AGENTID FROM BASPERSON_AGENT WHERE BASPERSON_AGENT.PERSONID = BPM_FLOWDATA_D.SIGNPERSON AND PRIOITY <= 1),AGENTID)
WHERE BILLNO = @G_BILLNO
DROP TABLE ##BPM_TMP1
@@ -0,0 +1,106 @@
CREATE PROC DBO.GEXBPM_GENFLOW4
(
@G_BILLNO VARCHAR(20) --簽核單號
)
/*
Function : 重新產生 BPM_FLOWDATA_D
Description: 本作業是當原單已產生 FLOWDATA
但又因群組人員有變動, 要批次更新變更後的群組人員
目前應該是在 BPMMG1 的 [重置人員] 有呼叫
如果傳入單號, 表示單張, 否則就是全重置
Build Date : 2013/08/02
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
*/
AS
--一般群組的重置
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL((SELECT TOP 1 USERID FROM USERGROUPS WHERE USERGROUPS.GROUPID = BPM_FLOWDATA_D.ORG_GROUP),SIGNPERSON)
WHERE ISNULL(ORG_GROUP,'') NOT IN ('MANAGER','AGENT','FIELDDEF','') AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
/*
直屬主管及代理人 的批次變更
*/
DECLARE @BILLNO VARCHAR(100)
DECLARE @PRE_BILLNO VARCHAR(100)
DECLARE @SIGNPERSON VARCHAR(100)
DECLARE @PRE_PERSON VARCHAR(100)
DECLARE @ORG_PERSON VARCHAR(100)
DECLARE @ORG_GROUP VARCHAR(100)
DECLARE @BOSS_PERSON VARCHAR(100)
DECLARE @SEQ INT
DECLARE @LAVEL VARCHAR(10)
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
DECLARE contact_cursor3 CURSOR FOR
SELECT B.BILLNO,A.SEQNO,A.SIGNPERSON,A.ORG_GROUP,B.SOURCEDEPARTMENT FROM BPM_FLOWDATA_D A
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
WHERE (CASE WHEN ISNULL(@G_BILLNO,'')='' THEN @G_BILLNO ELSE B.BILLNO END) = @G_BILLNO AND B.FLOWSTATUS < 4 --未完
ORDER BY B.BILLNO,A.SEQNO
OPEN contact_cursor3
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor3
INTO @BILLNO,@SEQ,@SIGNPERSON,@ORG_GROUP,@DEPARTMENTID
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
SET @ORG_PERSON = @SIGNPERSON
SET @PRE_PERSON = @SIGNPERSON
SET @PRE_BILLNO = @BILLNO
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @PRE_BILLNO <> @BILLNO SET @ORG_PERSON = @SIGNPERSON
SET @BOSS_PERSON = @SIGNPERSON
IF @ORG_GROUP = 'MANAGER'
BEGIN
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND ORG_GROUP = 'MANAGER' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
END
ELSE IF @ORG_GROUP = 'AGENT'
BEGIN
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND ORG_GROUP = 'AGENT' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
END
--以下為專案特殊寫法
ELSE IF SUBSTRING(@ORG_GROUP,1,7) = 'DEPBOSS'
BEGIN
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
SET @LAVEL = SUBSTRING(@ORG_GROUP,8,1)
SELECT
@BOSS_PERSON=
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
WHEN @LAVEL = '2' THEN DE2_LEADER
WHEN @LAVEL = '3' THEN DE3_LEADER
WHEN @LAVEL = '4' THEN DE4_LEADER
WHEN @LAVEL = '5' THEN DE5_LEADER
WHEN @LAVEL = '6' THEN DE6_LEADER
ELSE ISNULL(DE1_LEADER,'') END
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@ORG_GROUP,1,7) = 'DEPBOSS' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
END
SET @PRE_PERSON = @BOSS_PERSON
SET @PRE_BILLNO = @BILLNO
FETCH NEXT FROM contact_cursor3
INTO @BILLNO,@SEQ,@SIGNPERSON,@ORG_GROUP,@DEPARTMENTID
END
CLOSE contact_cursor3
DEALLOCATE contact_cursor3
@@ -0,0 +1,61 @@
CREATE PROC DBO.GEXBPM_REJECT
(
@BILLNO VARCHAR(20), --簽核單號
@LOGINID VARCHAR(30),
@SIGNMEMO NVARCHAR(600)
)
AS
/*
Function : FLOW 拒簽時的更新資料程序(直接否決本單)
Description:
1.在原單或簽核待辦單上, 新增 [簽核拒簽] button (Reject)
寫一筆資料到 log
將 FLOWDATA_M 的 FLOWSTATUS 改為 7 拒簽
2.原單的 FLOWFLAG = X, SIGN_USER = 拒簽
Build Date : 2013/07/08
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/10/12 新增
*/
DECLARE @SQL NVARCHAR(2000)
DECLARE @SOURCETBL VARCHAR(100)
DECLARE @SOURCEPK VARCHAR(100)
DECLARE @BILLTAG VARCHAR(100)
DECLARE @SOURCEBILLNO VARCHAR(100)
DECLARE @PRE_DATE DATETIME
DECLARE @SEQ1 INT
DECLARE @SEQ2 INT
SELECT @SEQ1=MAX(SEQNO)+1,@SEQ2=MIN(SEQNO),@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
DECLARE @FLOW INT
SELECT @FLOW=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
IF @FLOW = 0
BEGIN
--寫 LOG
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
SELECT @BILLNO,@SEQ2,@SEQ1,@PRE_DATE,GETDATE(),7,@LOGINID,@SIGNMEMO
--將 BPM_FLOWDATA_M 狀態改為 [7-拒簽]
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 7 WHERE BILLNO = @BILLNO
--回寫原單 SIGN_USER
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+'拒簽'+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+'R'+CHAR(39) +
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
EXECUTE SP_EXECUTESQL @SQL
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
--SELECT @LOGINID,GETDATE(),@LOGINID,'F',@BILLNO,@SEQ2
--應通知先前有簽核過的人
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'R',@LOGINID, @BILLNO
END
@@ -0,0 +1,45 @@
CREATE PROC DBO.GEXBPM_SENDMAILNOW
AS
/*
Function : FLOW 立刻發 MAIL 給所有待簽的人
Description: 本 SP 修改自 GEXBPM_DELAYSEND(催簽)
本 SP 是立刻再發送 MAIL 給目前待簽的人, 不管是否已逾期
Build Date : 2013/08/22
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
*/
DECLARE @BILLNO VARCHAR(20)
DECLARE @SIGNPERSON VARCHAR(20)
DECLARE @AGENTID VARCHAR(20)
DECLARE @SIGN_TITLE NVARCHAR(100)
DECLARE @STITLE NVARCHAR(100)
DECLARE contact_cursor CURSOR FOR
SELECT BILLNO,SIGNPERSON,SIGN_TITLE,AGENTID FROM BPM_FLOWDATA_D WHERE FLOWSTATUS = 0
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON,@AGENTID,@SIGN_TITLE
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
--發送 mail
SET @STITLE = '(催簽) ' + @SIGN_TITLE
EXEC GEX_SEND_FLOWMAIL 'S',@SIGNPERSON, @BILLNO, @STITLE
SET @STITLE = '(催簽:代理人) ' + @SIGN_TITLE
IF ISNULL(@AGENTID,'') <> '' EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @STITLE
FETCH NEXT FROM contact_cursor
INTO @BILLNO,@SIGNPERSON,@AGENTID,@SIGN_TITLE
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
@@ -0,0 +1,389 @@
CREATE PROCEDURE dbo.GEX_SEND_FLOWMAIL
(
@BPM_TYPE CHAR(1), --S:送簽 B:退簽 A:已簽結 F:作廢 R:拒簽
@SENDUSER VARCHAR(30), --被通知要簽核的人
@BPMBILLNO VARCHAR(30), --簽核單號
@SIGN_TITLE NVARCHAR(30) = ''
)
AS
/*
Function : 利用 sql 發送 FLOW MAIL 的共用程式
Description: 測試時, 連續密集的發送 mail, 會被 gMail 當成垃圾信
Build Date : 2012/10/21
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/07/01 新增 PICK 的專案發送 mail 寫法(依收件人 mail, 決定 mail Server)
2 Michael 2013/07/08 新增 R:拒簽
3 Michael 2013/08/07 PICK 不連回原單
4 Michael 2013/08/14 PICK 的 Mail 格式有修正
5 Michael 2013/09/26 因為發送 mail 一直都亂碼, 修改為變數測試看看
*/
DECLARE @MAIL_PROFILE NVARCHAR(100)
DECLARE @MSG NVARCHAR(1000)
DECLARE @BILLDESC NVARCHAR(200)
DECLARE @FLOWDETAIL NVARCHAR(1000)
DECLARE @DEST_MAIL VARCHAR(100)
DECLARE @TITLE NVARCHAR(200)
DECLARE @WEBSITE VARCHAR(200)
DECLARE @SMTPSRV VARCHAR(200)
DECLARE @CNT INT
DECLARE @POS INT
DECLARE @IS_PICK CHAR(1)
--判斷是否 PICK 專案
SELECT @CNT=Count(*) FROM sysobjects WHERE XTYPE='U' AND NAME='COMPANYTYPE'
IF @CNT > 0 SET @IS_PICK = 'Y' ELSE SET @IS_PICK = 'N'
SELECT @MAIL_PROFILE=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'MAIL_PROFILE'
IF ISNULL(@MAIL_PROFILE,'') = '' SET @MAIL_PROFILE = 'gexMail' --Default
/*
PICK 有特殊的發送 mail 機制
跟據收件人決定發送 mail 的 SMTP Server
程式寫在 exec msdb.dbo.sp_send_dbmail 前
*/
SELECT @WEBSITE=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'WEBSITE'
IF ISNULL(@WEBSITE,'') = '' SET @WEBSITE = 'http://erp.gex.com.tw' --Default(http://erp.gex.com.tw/gEIP/bPMSM13A.aspx?keyvalueparam=4318)
SET @WEBSITE = @WEBSITE + '/gBPM/bBPMMG3.aspx'
SELECT @BILLDESC=ISNULL(B.BILLDESC,''),@TITLE='簽核通知-'+B.BILLDESC+ ' 原單單號: '+A.SOURCEBILLNO FROM BPM_FLOWDATA_M A
LEFT JOIN BPM_FLOWSETUP_M B ON A.BILLTAG = B.BILLTAG
WHERE A.BILLNO = @BPMBILLNO
--
DECLARE @BILLDATE DATETIME
DECLARE @SIGNPERSON NVARCHAR(30)
DECLARE @PERSONCNAME NVARCHAR(30)
DECLARE @ORG_PERSON NVARCHAR(30)
DECLARE @FLOWTYPE NVARCHAR(30)
DECLARE @MEMOCHAR NVARCHAR(200)
SET @FLOWDETAIL = ''
DECLARE @FLDN NVARCHAR(100)
SELECT @FLDN=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'N'
IF @FLDN IS NULL SET @FLDN = '上呈'
SELECT
BILLDATE,
CASE WHEN SEQNO = 0 THEN @FLDN ELSE B.KEYVALUE END FLOWTYPE,
CASE WHEN FLOWSTATUS <> 2 THEN SIGNPERSON ELSE BACKTOPERSON END SIGNPERSON,
CASE WHEN FLOWSTATUS <> 2 THEN MEMOCHAR ELSE BACKMEMOCHAR END MEMOCHAR
INTO #BPM_TMP1 FROM BPM_FLOWDATA_LOG A
LEFT JOIN KEYVALUE B ON B.KEYTAG = 'FLOWSTATUS' AND B.KEYID = A.FLOWSTATUS
WHERE BILLNO = @BPMBILLNO
DECLARE contact_cursor CURSOR FOR
SELECT
A.BILLDATE,A.FLOWTYPE,A.SIGNPERSON,B.PERSONCNAME,A.MEMOCHAR
FROM #BPM_TMP1 A
LEFT JOIN BASPERSON B ON A.SIGNPERSON = B.PERSONID
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @BILLDATE,@FLOWTYPE,@SIGNPERSON,@PERSONCNAME,@MEMOCHAR
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FLOWDETAIL = @FLOWDETAIL +
'<tr>' +
' <td>'+ISNULL(@SIGNPERSON,'')+'</td><td>'+ISNULL(@PERSONCNAME,'')+'</td>' +
' <td>'+ISNULL(@FLOWTYPE,'')+'</td>' +
' <td>'+ISNULL(CONVERT(varchar(12),@BILLDATE,111),'')+'</td><td>'+ISNULL(CONVERT(varchar(12),@BILLDATE,108),'')+'</td>' +
' <td>'+ISNULL(@MEMOCHAR,'')+'</td>' +
'</tr>'
FETCH NEXT FROM contact_cursor
INTO @BILLDATE,@FLOWTYPE,@SIGNPERSON,@PERSONCNAME,@MEMOCHAR
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
--
DROP TABLE #BPM_TMP1
--待簽核人員
SET @ORG_PERSON = @SENDUSER
SELECT @ORG_PERSON=USERID+' ('+USERNAME+')' FROM USERS WHERE USERID = @ORG_PERSON
IF ISNULL(@ORG_PERSON,'') = '' SET @ORG_PERSON = 'NO-DATA'
--**************************************************************************
DECLARE @ORG_BILLNO VARCHAR(100) --原單單號(以下四個欄位是 PICK 專用)
DECLARE @ORD_COMPANY NVARCHAR(100) --公司
DECLARE @ORD_DEPARTMENT NVARCHAR(100) --費用分攤部門
DECLARE @ORG_DETAIL NVARCHAR(600) --表身的品名及數量
DECLARE @BILLTAG VARCHAR(100)
SET @ORD_COMPANY = ''
SET @ORD_DEPARTMENT = ''
SET @ORG_DETAIL = ''
SELECT @ORG_BILLNO=A.SOURCEBILLNO,@BILLTAG=BILLTAG FROM BPM_FLOWDATA_M A WHERE A.BILLNO = @BPMBILLNO
IF @IS_PICK = 'Y'
BEGIN
IF @BILLTAG = 'OPOM11' BEGIN
SELECT
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('OPOORDER4_M',@ORG_BILLNO)
FROM OPOORDER4_M A
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
WHERE BILLNO = @ORG_BILLNO
END
ELSE IF @BILLTAG = 'OPOM12' BEGIN
SELECT
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('OPOORDER3_M',@ORG_BILLNO)
FROM OPOORDER3_M A
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
WHERE BILLNO = @ORG_BILLNO
END
ELSE IF @BILLTAG = 'OPOM13' BEGIN
SELECT
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('QMSIQC_M',@ORG_BILLNO)
FROM QMSIQC_M A
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
WHERE BILLNO = @ORG_BILLNO
END
--ELSE IF @BILLTAG = 'OPOM16' BEGIN
-- SELECT * FROM OPO_BUYSWOT BILLNO = @ORG_BILLNO
--END
END
--**************************************************************************
/*
因為 mail 發送一直會出現亂碼, 所以把所有的中文抬頭都改為變數測試看看
*/
DECLARE @FLD1 NVARCHAR(100)
DECLARE @FLD2 NVARCHAR(100)
DECLARE @FLD3 NVARCHAR(100)
DECLARE @FLD4 NVARCHAR(100)
DECLARE @FLD5 NVARCHAR(100)
DECLARE @FLD6 NVARCHAR(100)
DECLARE @FLD7 NVARCHAR(100)
DECLARE @FLD8 NVARCHAR(100)
DECLARE @FLD9 NVARCHAR(100)
DECLARE @FLDA NVARCHAR(100)
DECLARE @FLDB NVARCHAR(100)
DECLARE @FLDC NVARCHAR(100)
DECLARE @FLDD NVARCHAR(100)
DECLARE @FLDE NVARCHAR(100)
DECLARE @FLDF NVARCHAR(100)
DECLARE @FLDG NVARCHAR(100)
DECLARE @FLDH NVARCHAR(100)
DECLARE @FLDI NVARCHAR(100)
DECLARE @FLDJ NVARCHAR(100)
DECLARE @FLDK NVARCHAR(100)
DECLARE @FLDL NVARCHAR(100)
DECLARE @FLDM NVARCHAR(100)
SELECT @FLD1=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '1'
SELECT @FLD2=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '2'
SELECT @FLD3=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '3'
SELECT @FLD4=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '4'
SELECT @FLD5=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '5'
SELECT @FLD6=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '6'
SELECT @FLD7=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '7'
SELECT @FLD8=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '8'
SELECT @FLD9=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '9'
SELECT @FLDA=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'A'
SELECT @FLDB=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'B'
SELECT @FLDC=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'C'
SELECT @FLDD=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'D'
SELECT @FLDE=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'E'
SELECT @FLDF=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'F'
SELECT @FLDG=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'G'
SELECT @FLDH=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'H'
SELECT @FLDI=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'I'
SELECT @FLDJ=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'J'
SELECT @FLDK=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'K'
SELECT @FLDL=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'L'
SELECT @FLDM=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'M'
IF @FLD1 IS NULL SET @FLD1 = '發送者'
IF @FLD2 IS NULL SET @FLD2 = '原單單號'
IF @FLD3 IS NULL SET @FLD3 = '流程說明'
IF @FLD4 IS NULL SET @FLD4 = '簽核程序'
IF @FLD5 IS NULL SET @FLD5 = '簽核作業'
IF @FLD6 IS NULL SET @FLD6 = '送簽日期'
IF @FLD7 IS NULL SET @FLD7 = '網頁連結'
IF @FLD8 IS NULL SET @FLD8 = '簽核人員'
IF @FLD9 IS NULL SET @FLD9 = '姓名'
IF @FLDA IS NULL SET @FLDA = '簽核別'
IF @FLDB IS NULL SET @FLDB = '簽核日期'
IF @FLDC IS NULL SET @FLDC = '時間'
IF @FLDD IS NULL SET @FLDD = '簽核內容'
IF @FLDE IS NULL SET @FLDE = '出帳公司'
IF @FLDF IS NULL SET @FLDF = '費用分攤單位'
IF @FLDG IS NULL SET @FLDG = '採買品名數量'
IF @FLDH IS NULL SET @FLDH = '按此連結到表單'
IF @FLDI IS NULL SET @FLDI = '送簽'
IF @FLDJ IS NULL SET @FLDJ = '退簽'
IF @FLDK IS NULL SET @FLDK = '作廢通知'
IF @FLDL IS NULL SET @FLDL = '拒簽通知'
IF @FLDM IS NULL SET @FLDM = '已簽結通知'
DECLARE @HYPER NVARCHAR(200)
DECLARE @ACTIVITY NVARCHAR(200)
SET @HYPER = '<a href="'+@WEBSITE+'">'+@FLDH+'</a>'
IF @BPM_TYPE='S' SET @ACTIVITY = @FLDI
ELSE IF @BPM_TYPE='B' SET @ACTIVITY = @FLDJ
ELSE IF @BPM_TYPE='F' SET @ACTIVITY = @FLDK
ELSE IF @BPM_TYPE='R' SET @ACTIVITY = @FLDL
ELSE SET @ACTIVITY = @FLDM
--PICK 要求不要連回原單(格式也有修改)
IF @IS_PICK <> 'Y'
--標準版本
SET @MSG = '<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
' <td style="width:25%">'+@FLD1+'</td><td style="width:75%">'+@ORG_PERSON+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD2+'</td><td>'+@ORG_BILLNO+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD3+'</td><td>'+@BILLDESC+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD4+'</td><td>'+@SIGN_TITLE+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD5+'</td><td>'+@ACTIVITY+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD6+'</td><td>'+CONVERT(varchar(30),GETDATE(),120)+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD7+'</td><td>'+@HYPER+'</td>' +
'</tr>' +
'</table>' +
'<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
' <td>'+@FLD8+'</td><td>'+@FLD9+'</td><td>'+@FLDA+'</td><td>'+@FLDB+'</td><td>'+@FLDC+'</td><td>'+@FLDD+'</td>' +
'</tr>' +
@FLOWDETAIL +
'</table>'
ELSE
--元誠格式
SET @MSG = '<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
' <td style="width:25%">'+@FLD1+'</td><td style="width:75%">'+@ORG_PERSON+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD3+'</td><td>'+@BILLDESC+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD4+'</td><td>'+@SIGN_TITLE+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD5+'</td><td>'+@ACTIVITY+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD8+'</td><td>'+CONVERT(varchar(30),GETDATE(),120)+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLD2+'</td><td>'+@ORG_BILLNO+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLDE+'</td><td>'+@ORD_COMPANY+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLDF+'</td><td>'+@ORD_DEPARTMENT+'</td>' +
'</tr>' +
'<tr>' +
' <td>'+@FLDG+'</td><td>'+@ORG_DETAIL+'</td>' +
'</tr>' +
'</table>' +
'<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
' <td>'+@FLD8+'</td><td>'+@FLD9+'</td><td>'+@FLDA+'</td><td>'+@FLDB+'</td><td>'+@FLDC+'</td><td>'+@FLDD+'</td>' +
'</tr>' +
@FLOWDETAIL +
'</table>'
IF @BPM_TYPE = 'A' OR @BPM_TYPE = 'F'
BEGIN
--本簽核已完成, 要通知所有相關的人
DECLARE @EMAIL VARCHAR(200)
DECLARE @BPM_TMP2 TABLE (EMAIL VARCHAR(200))
IF @BPM_TYPE = 'A'
BEGIN
INSERT INTO @BPM_TMP2
SELECT DISTINCT U.EMAIL FROM BPM_FLOWDATA_D Z
LEFT JOIN USERS U ON U.USERID = Z.SIGNPERSON
WHERE Z.BILLNO = @BPMBILLNO AND ISNULL(U.EMAIL,'') <> '' AND (Z.SEQNO = 0 OR Z.SENDMAIL = 'Y') --原上呈人員也要發通知
END
ELSE BEGIN --曾經簽核過的人
INSERT INTO @BPM_TMP2
SELECT DISTINCT U.EMAIL FROM BPM_FLOWDATA_LOG Z
LEFT JOIN USERS U ON U.USERID = Z.SIGNPERSON
WHERE Z.BILLNO = @BPMBILLNO AND ISNULL(U.EMAIL,'') <> ''
END
DECLARE contact_cursor2 CURSOR FOR
SELECT EMAIL FROM @BPM_TMP2
OPEN contact_cursor2
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor2
INTO @EMAIL
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
--PICK 專案
IF @IS_PICK = 'Y' BEGIN
SET @POS = CHARINDEX('@', @EMAIL)
SET @SMTPSRV = SUBSTRING(@EMAIL,@POS+1,LEN(@EMAIL)-@POS)
SELECT TOP 1 @MAIL_PROFILE=COMPANYID FROM COMPANYTYPE WHERE MAILSERVER = @SMTPSRV
END
exec msdb.dbo.sp_send_dbmail
@recipients = @EMAIL,
@body = @MSG,
@subject = @TITLE,
@profile_name = @MAIL_PROFILE,
@body_format = HTML --也可以使用HTML格式
FETCH NEXT FROM contact_cursor2
INTO @EMAIL
END
CLOSE contact_cursor2
DEALLOCATE contact_cursor2
END
ELSE BEGIN
--也有可能是多人(群組內有多人, 已在 GEXBPM_SIGNOK 跑 loop)
SELECT @DEST_MAIL=EMAIL FROM USERS WHERE USERID = @SENDUSER
--SET @DEST_MAIL = 'genie.michael@gmail.com' --For TEST
IF ISNULL(@DEST_MAIL,'') <> ''
BEGIN
--PICK 專案
IF @IS_PICK = 'Y' BEGIN
SET @POS = CHARINDEX('@', @DEST_MAIL)
SET @SMTPSRV = SUBSTRING(@DEST_MAIL,@POS+1,LEN(@DEST_MAIL)-@POS)
SELECT TOP 1 @MAIL_PROFILE=COMPANYID FROM COMPANYTYPE WHERE MAILSERVER = @SMTPSRV
END
exec msdb.dbo.sp_send_dbmail
@recipients = @DEST_MAIL,
@body = @MSG,
@subject = @TITLE,
@profile_name = @MAIL_PROFILE,
@body_format = HTML --也可以使用HTML格式
END
END
@@ -0,0 +1,81 @@
CREATE PROC DBO.GEXBPM_SIGNBACK
(
@BILLTAG VARCHAR(20), --單別
@BILLNO VARCHAR(20), --簽核單號
@SOURCESEQNO INT, --簽核單序號
@LOGINID VARCHAR(30),
@BACKPERSON VARCHAR(30), --退回給誰
@SIGNMEMO NVARCHAR(600)
)
AS
/*
Function : FLOW 退簽時的更新資料程序
Description: 行動簽核 @SOURCESEQNO = -1
Build Date : 2011/10/05
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2013/08/09 當退簽人員未傳入時, 依參數取得是前一筆或第一筆
本需求是配合行動簽核的需求修改
*/
DECLARE @BACKWHO VARCHAR(10)
DECLARE @PRE_DATE DATETIME
DECLARE @SEQ1 INT
DECLARE @SEQ2 INT
DECLARE @CNT INT
--傳入的是原單號還是簽核單號
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND BILLNO = @BILLNO
IF @CNT <= 0 SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @BILLNO
SELECT @SEQ1=MAX(SEQNO)+1,@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
--行動簽核未指定退回給誰, 如果 @BACKPERSON 為空, 依參數設定, 退回前一人或原上呈人
IF ISNULL(@BACKPERSON,'') = ''
BEGIN
--
SELECT @BACKWHO=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'BPMBACKWHO'
IF @BACKWHO IS NULL SET @BACKWHO = 'F'
IF @BACKWHO = 'P'
BEGIN
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
SELECT @BACKPERSON=SIGNPERSON FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
END
ELSE BEGIN
SELECT @BACKPERSON=SIGNPERSON FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO AND SEQNO = 0
END
END
--防錯, 如果 @SOURCESEQNO < 0, 則要取目前待簽的那一筆 SEQNO(配合行動簽核修改)
IF @SOURCESEQNO < 0 SELECT TOP 1 @SOURCESEQNO=SEQNO,@LOGINID=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
--寫 LOG
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,BACKTOPERSON,BACKMEMOCHAR)
SELECT @BILLNO,@SOURCESEQNO,@SEQ1,@PRE_DATE,GETDATE(),2,@LOGINID,@BACKPERSON,@SIGNMEMO
DECLARE @SENDMAIL CHAR(1)
DECLARE @ORG_PERSON VARCHAR(20)
DECLARE @SOURCEBILLNO VARCHAR(20)
DECLARE @SIGN_TITLE NVARCHAR(30)
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SIGNPERSON = @BACKPERSON
SELECT @SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
SELECT @ORG_PERSON=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = 0
--將 BPM_FLOWDATA_D 狀態改為 [2-退回]
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 2 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND SEQNO <= @SOURCESEQNO
SELECT @SENDMAIL=SENDMAIL,@SIGN_TITLE=SIGN_TITLE FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG AND SEQNO = @SEQ2
IF @SENDMAIL = 'Y'
BEGIN
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
--SELECT @LOGINID,GETDATE(),@ORG_PERSON,'B',@BILLNO,@SOURCESEQNO
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'B',@ORG_PERSON, @BILLNO, @SIGN_TITLE
END
@@ -0,0 +1,233 @@
CREATE PROC DBO.GEXBPM_SIGNOK
(
@BILLTAG VARCHAR(20), --單別
@BILLNO VARCHAR(20), --簽核單號
@SOURCESEQNO INT, --簽核單序號
@LOGINID VARCHAR(30),
@SIGNMEMO NVARCHAR(600)
)
AS
/*
Function : FLOW 核可時的更新資料程序
Description: 行動簽核 @SOURCESEQNO = -1
程式中有判斷跳簽的處理程序
只是將中間人員的 FLOWSTATUS 都改為已簽
FLOWSTATUS 0(待簽)1(已送件)2(退件),3(未到件),4(完成)5(通知)7(拒簽)9(作廢)
Build Date : 2011/10/05
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/10/05 新增
2 Michael 2013/07/01 加入連續相同人員, 直接簽核過的新功能
3 Michael 2013/07/13 新增通知的處理
4 Michael 2013/07/23 新增送下一關時, 同時通知代理人
5 Michael 2013/08/14 多考慮下一關為多人會簽的情況
*/
DECLARE @PRE_DATE DATETIME
DECLARE @NEXT_PERSON VARCHAR(20)
DECLARE @SEQ1 INT
DECLARE @SEQ3 INT
DECLARE @CNT INT
--傳入的是原單號還是簽核單號
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND BILLNO = @BILLNO
IF @CNT <= 0 SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @BILLNO
--寫 LOG 專用
SELECT @SEQ1=MAX(SEQNO)+1,@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
--防錯(測試專用)
IF @SEQ1 IS NULL BEGIN SET @SEQ1 = 0 END
IF @PRE_DATE IS NULL BEGIN SET @PRE_DATE = GETDATE() END
--防錯, 如果 @SOURCESEQNO < 0, 則要取目前待簽的那一筆 SEQNO(配合行動簽核修改)
IF @SOURCESEQNO < 0 SELECT TOP 1 @SOURCESEQNO=SEQNO,@LOGINID=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
--寫 LOG
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
SELECT @BILLNO,@SOURCESEQNO,@SEQ1,@PRE_DATE,GETDATE(),1,@LOGINID,@SIGNMEMO
--判斷跳簽, 多 UPDATE 中間人員的狀態即可(由目前的待簽到本筆簽核間的資料都 Update)
DECLARE @FLOWSTATUS SMALLINT
SELECT @FLOWSTATUS=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SOURCESEQNO
IF @FLOWSTATUS = 2 OR @FLOWSTATUS = 3
BEGIN
SELECT @SEQ1=ISNULL(MAX(SEQNO),0) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO < @SOURCESEQNO AND FLOWSTATUS = 0 --(FLOWSTATUS = 1 OR FLOWSTATUS = 4)
IF @SEQ1 IS NULL SET @SEQ1 = 0
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 1 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ1 AND SEQNO <= @SOURCESEQNO AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ1 AND SEQNO <= @SOURCESEQNO AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
END
--將 BPM_FLOWDATA_D 狀態改為 [1-已簽], 因為會簽多人時(相同欄號), 只要一人有簽就過, 其他人也要改為 [已簽]
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 1 WHERE BILLNO = @BILLNO AND SEQNO = @SOURCESEQNO --AND SIGNPERSON = @LOGINID
--如果是最後一筆, BPM_FLOWDATA_M 的狀態改為完成, 並回寫原單的 SIGN_PERSON
DECLARE @SEQ2 INT
DECLARE @SEQ9 INT
DECLARE @SOURCETBL VARCHAR(30)
DECLARE @SOURCEPK VARCHAR(30)
DECLARE @SQL NVARCHAR(400)
DECLARE @NOTIFY_ONLY CHAR(1)
DECLARE @SENDMAIL CHAR(1)
DECLARE @FLOWZ CHAR(1)
DECLARE @NOTIFY_WHO CHAR(1)
DECLARE @ORG_PERSON VARCHAR(20)
DECLARE @SOURCEBILLNO VARCHAR(20)
DECLARE @SIGN_TITLE NVARCHAR(30)
DECLARE @AGENTID VARCHAR(30)
/*
@SEQ2 是需簽核的最後一筆
@SEQ9 是所有簽核的最後一筆
差別是最後幾筆可能是通知
*/
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
SELECT @SEQ9=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO
SELECT @ORG_PERSON=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = 0
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK,@NOTIFY_WHO=NOTIFY_WHO FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
SELECT @SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
--需簽核的最後一筆
IF @SEQ2 = @SOURCESEQNO
BEGIN
--最後一筆不可以是通知(改為可以)
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 4 WHERE BILLNO = @BILLNO
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
SET @FLOWZ = 'Z'
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@LOGINID+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWZ+CHAR(39) +
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
EXECUTE SP_EXECUTESQL @SQL
--發送 MAIL(不另發通知)
IF @NOTIFY_WHO = 'S'
BEGIN
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
--SELECT @LOGINID,GETDATE(),@ORG_PERSON,'E',@BILLNO,@SOURCESEQNO
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, '已簽核完畢'
END
ELSE IF @NOTIFY_WHO = 'A'
BEGIN
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
--SELECT @LOGINID,GETDATE(),A.SIGNPERSON,'E',@BILLNO,@SOURCESEQNO FROM BPM_FLOWDATA_D A
--WHERE A.BILLNO = @BILLNO
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'A',@ORG_PERSON, @BILLNO, '已簽核完畢'
END
--如果不是最末筆(還有其他的通知, 目前的寫法, 改為允許多個通知人)
IF @SEQ2 <> @SEQ9
BEGIN
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
--有可能是通知多人, 要跑 loop
DECLARE contact_cursorN1 CURSOR FOR
SELECT SIGNPERSON,SENDMAIL FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
OPEN contact_cursorN1
-- Perform the first fetch.
FETCH NEXT FROM contact_cursorN1
INTO @ORG_PERSON,@SENDMAIL
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SENDMAIL = 'Y'
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, '(通知)已簽核完畢'
FETCH NEXT FROM contact_cursorN1
INTO @ORG_PERSON,@SENDMAIL
END
CLOSE contact_cursorN1
DEALLOCATE contact_cursorN1
END
END
ELSE BEGIN
--如果不是最後一筆, 則找到下一筆待簽, 將狀態改為 [0-待簽]
SELECT @SEQ3=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > @SOURCESEQNO
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
--有可能是多人, 要跑 loop
DECLARE contact_cursor CURSOR FOR
SELECT SIGNPERSON,SENDMAIL,SIGN_TITLE,NOTIFY_ONLY,AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
OPEN contact_cursor
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SENDMAIL = 'Y'
BEGIN
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, @SIGN_TITLE
IF ISNULL(@AGENTID,'') <> ''
BEGIN
SET @SIGN_TITLE = @SIGN_TITLE+' (代理人)'
EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @SIGN_TITLE
END
END
FETCH NEXT FROM contact_cursor
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
END
CLOSE contact_cursor
DEALLOCATE contact_cursor
--如果是通知, 再找下一筆(目前的寫法不允許連續通知)
IF @NOTIFY_ONLY = 'Y'
BEGIN
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
SELECT @SEQ3=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG AND SEQNO > @SEQ3 AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
--有可能要發多人 mail, 要跑 loop
DECLARE contact_cursorN2 CURSOR FOR
SELECT SIGNPERSON,SENDMAIL,SIGN_TITLE,NOTIFY_ONLY,AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
OPEN contact_cursorN2
-- Perform the first fetch.
FETCH NEXT FROM contact_cursorN2
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SENDMAIL = 'Y'
BEGIN
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, @SIGN_TITLE
IF ISNULL(@AGENTID,'') <> ''
BEGIN
SET @SIGN_TITLE = @SIGN_TITLE+' (代理人)'
EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @SIGN_TITLE
END
END
FETCH NEXT FROM contact_cursorN2
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
END
CLOSE contact_cursorN2
DEALLOCATE contact_cursorN2
END
END
@@ -0,0 +1,62 @@
CREATE PROC DBO.GEXBPM_SIGNUNDO
(
@BILLNO VARCHAR(20), --簽核單號
@LOGINID VARCHAR(30),
@SIGNMEMO NVARCHAR(600)
)
AS
/*
Function : FLOW 作廢時的更新資料程序
Description:
1.必須先退回原申請人
2.在原單或簽核待辦單上, 新增 [簽核作廢] button
寫一筆資料到 log
將 FLOWDATA_M 的 FLOWSTATUS 改為 9 作廢
3.原單的 FLOWFLAG = X, SIGN_USER = 作廢
Build Date : 2011/10/12
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2011/10/12 新增
*/
DECLARE @SQL NVARCHAR(2000)
DECLARE @SOURCETBL VARCHAR(100)
DECLARE @SOURCEPK VARCHAR(100)
DECLARE @BILLTAG VARCHAR(100)
DECLARE @SOURCEBILLNO VARCHAR(100)
DECLARE @PRE_DATE DATETIME
DECLARE @SEQ1 INT
DECLARE @SEQ2 INT
SELECT @SEQ1=MAX(SEQNO)+1,@SEQ2=MIN(SEQNO),@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
DECLARE @FLOW INT
SELECT @FLOW=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
IF @FLOW = 0
BEGIN
--寫 LOG
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
SELECT @BILLNO,@SEQ2,@SEQ1,@PRE_DATE,GETDATE(),9,@LOGINID,@SIGNMEMO
--將 BPM_FLOWDATA_M 狀態改為 [9-作廢]
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 9 WHERE BILLNO = @BILLNO
--回寫原單 SIGN_USER
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+'作廢'+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+'X'+CHAR(39) +
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
EXECUTE SP_EXECUTESQL @SQL
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
--SELECT @LOGINID,GETDATE(),@LOGINID,'F',@BILLNO,@SEQ2
--應通知先前有簽核過的人
--sql db sendmail
EXEC GEX_SEND_FLOWMAIL 'F',@LOGINID, @BILLNO
END