執(zhí)行審核上則是每處理一個(gè)環(huán)節(jié),就插入一個(gè)環(huán)節(jié)的信息.
我個(gè)人認(rèn)為實(shí)現(xiàn)審核的代碼使用存儲(chǔ)過(guò)程去實(shí)現(xiàn)要比用C#代碼去實(shí)現(xiàn)要好,至于用事務(wù)處理感覺(jué)還是差點(diǎn),因?yàn)槿绻粋€(gè)系統(tǒng)的事務(wù)處理過(guò)多,會(huì)造成處理緩慢,而用C#代碼去實(shí)現(xiàn),則需要進(jìn)行多次的查詢數(shù)據(jù)庫(kù),操作過(guò)程也比較復(fù)雜..所以我覺(jué)得還是用存儲(chǔ)過(guò)程去實(shí)現(xiàn)是最理想的.
Create
??
procedure
?ExecFlowAuditPass?2
(?3
@AuditMainID
?
int
,?4
@UserID
?
varchar
(
100
),?5
@AuditOpinion
?
ntext
,?6
@Auditstatus
?
int
?7
)?8
As
?9
--
獲取最后審核的節(jié)點(diǎn)
10
declare
?
@posid
?
int
11
select
?
@posid
?
=
?
max
(Sequence)?
from
?審核子表?
where
?MainID
=
?
@AuditMainID
12
--
獲取最大審核的節(jié)點(diǎn)
13
declare
?
@maxposid
?
int
14
select
?
@maxposid
=
max
(Sequence)?
from
?流程子表?
where
?MainID
=
?
@AuditMainID
15
--
獲取將審核節(jié)點(diǎn)角色資料
16
declare
?
@UserGroupID
?
int
17
select
?
@UserGroupID
?
=
?UserGroupID?
from
?審核子表?
where
?MainID
=
?
@AuditMainID
?
and
?Sequence
=
@posid
+
1
18
--
角色不符
19
if
?(
select
?
count
(
*
)?
from
?員工表?
where
?員工ID
=
@UserID
?
and
?角色I(xiàn)D?
=
?
@UserGroupID
)
=
0
20
begin
21
??
select
?
*
?
from
?審核子表?
where
??MainID
=
?
@AuditMainID
22
??
print
?
-
1
;23
??
return
?
-
1
;24
end
25
--
角色符合執(zhí)行
26
if
?
@Auditstatus
?
=
1
27
begin
28
insert?
into
?流程子表(MainID,AuditOpinion,Auditstatus,Sequence,AuditID,CreateDate,角色I(xiàn)D)?
values
(
@AuditMainID
,
@AuditOpinion
,
1
,
@posid
+
1
,
@UserID
,
getdate
(),
@UserGroupID
)29
???????????
if
?
@posid
?
+
1
?
=
?
@maxposid
30
????????????
begin
31
?????????????????
update
?審核主表?
set
?Auditstatus?
=
?
3
?
where
?
[
ID
]
=
@AuditMainID
?32
?????????????
end
33
end
34
else
35
begin
36
?????????????????? insert?
into
?流程子表(MainID,AuditOpinion,Auditstatus,Sequence,AuditID,CreateDate,角色I(xiàn)D)?
values
(
@AuditMainID
,
@AuditOpinion
,
0
,
@posid
+
1
,
@UserID
,
getdate
(),
@UserGroupID
)37
????????????????
update
?審核主表?
set
?Auditstatus?
=
?
2
?
where
?
[
ID
]
=
@AuditMainID
?38
end
這個(gè)就是執(zhí)行審核的存儲(chǔ)過(guò)程,
現(xiàn)在主任C1打開審核系統(tǒng),根據(jù)需要,他只能看到它能看的審核.
Create
?
procedure
?GetListAudit?2
(?3
?
@userid
?
varchar
(
100
),?4
?
@statusid
?
int
?
--
0待審核,1已審核,2歷史記錄
?5
)?6
?7
AS
?8
if
?
@statusid
?
=
1
?9
begin
?10
??
select
?
*
?11
??
from
?審核主表?12
??
where
?
[
ID
]
?
in
?13
??(14
????
Select
?MainID?
from
?審核子表?15
????
where
?AuditID?
=
?
@userid
16
???)17
end
18
if
?
@statusid
?
=
0
19
begin
20
??
select
?
*
21
??
from
?審核主表?22
??
where
?
[
ID
]
?
not
?
in
23
??(24
?????
select
?MainID?
from
?審核子表?25
??????
where
?AuditID?
=
?
@userid
26
??)27
??
and
?ProcessID?
in
?28
??(29
????
Select
?MainID?
from
?流程子表30
?????
where
?UserGroupID?
in
?31
?????(32
??????
select
?角色I(xiàn)D?
from
?員工表33
???????
where
?員工ID
=
@userid
34
??????)35
??)36
end
37
if
?
@statusid
?
=
2
38
begin
?39
??
select
?
*
40
??
from
?審核主表?41
??
where
?Auditstatus?
in
(
2
,
3
)42
??
and
?ProcessID?
in
43
??(44
????
Select
?MainID?
from
?流程子表45
?????
where
?UserGroupID?
in
?46
?????(47
??????
select
?角色I(xiàn)D?
from
?員工表48
???????
where
?員工ID
=
@userid
49
??????)50
??)51
end
上面的存儲(chǔ)過(guò)程還可以增加未提交的列表
只需要一個(gè)存儲(chǔ)過(guò)程就實(shí)現(xiàn)了,未提交,已經(jīng)審核,未審核,和歷史審核記錄,
并將這些不同的狀態(tài)定義為一個(gè)枚舉類型.
我們實(shí)現(xiàn)了,審核操作,和查看審核信息,還缺少什么呢?還缺少一個(gè)文件跟蹤功能,就是審核流程走到哪個(gè)角色的功能
Create
?
procedure
?GetListAuditTrail?2
(?3
??
@AuditMainID
?
int
?
--
審核單號(hào)
?4
)?5
AS
?6
?7
Select
?a.
*
?b.AuditID,b.CreateDate?Dates?8
from
?流程子表?a?
left
?
join
?審核子表?b?9
on
?a.Sequence?
=
?b.Sequence10
where
?b.MainID
=
@AuditMainID
?
and
?11
???a.MainID?
in
?(
select
?ProcessID?
from
?審核主表?
where
?
[
ID
]
=
@AuditMainID
?)
從安全性來(lái)說(shuō),我覺(jué)得應(yīng)該進(jìn)行下用戶權(quán)限檢驗(yàn)的.
其實(shí)我個(gè)人寫存儲(chǔ)過(guò)程有個(gè)習(xí)慣的,如果這個(gè)存儲(chǔ)過(guò)程是返回一個(gè)列表的,我喜歡用GetList為開頭,如果執(zhí)行性存儲(chǔ)過(guò)程則喜歡Exec,如果只是返回一個(gè)值的用則是GetOnly開頭,


