• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ::^喬喬^::明鏡臺::原創(chuàng)空間::C#.NET2.0,C++技術BLOG
            人最重要的是心境,一顆平靜安穩(wěn)的心才能更好的進步,保持自己的心態(tài).成為夢想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0

            執(zhí)行審核上則是每處理一個環(huán)節(jié),就插入一個環(huán)節(jié)的信息.


            我個人認為實現(xiàn)審核的代碼使用存儲過程去實現(xiàn)要比用C#代碼去實現(xiàn)要好,至于用事務處理感覺還是差點,因為如果一個系統(tǒng)的事務處理過多,會造成處理緩慢,而用C#代碼去實現(xiàn),則需要進行多次的查詢數(shù)據(jù)庫,操作過程也比較復雜..所以我覺得還是用存儲過程去實現(xiàn)是最理想的.


            ?1 Create ?? procedure ?ExecFlowAuditPass
            ?2 (
            ?3 @AuditMainID ? int ,
            ?4 @UserID ? varchar ( 100 ),
            ?5 @AuditOpinion ? ntext ,
            ?6 @Auditstatus ? int
            ?7 )
            ?8 As
            ?9 -- 獲取最后審核的節(jié)點
            10 declare ? @posid ? int
            11 select ? @posid ? = ? max (Sequence)? from ?審核子表? where ?MainID = ? @AuditMainID
            12 -- 獲取最大審核的節(jié)點
            13 declare ? @maxposid ? int
            14 select ? @maxposid = max (Sequence)? from ?流程子表? where ?MainID = ? @AuditMainID
            15 -- 獲取將審核節(jié)點角色資料
            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 ?角色ID? = ? @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,角色ID)? 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,角色ID)? values ( @AuditMainID , @AuditOpinion , 0 , @posid + 1 , @UserID , getdate (), @UserGroupID )
            37 ???????????????? update ?審核主表? set ?Auditstatus? = ? 2 ? where ? [ ID ] = @AuditMainID ?
            38 end

            這個就是執(zhí)行審核的存儲過程,

            現(xiàn)在主任C1打開審核系統(tǒng),根據(jù)需要,他只能看到它能看的審核.

            ?1 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 ?角色ID? 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 ?角色ID? from ?員工表
            48 ??????? where ?員工ID = @userid
            49 ??????)
            50 ??)
            51 end

            上面的存儲過程還可以增加未提交的列表
            只需要一個存儲過程就實現(xiàn)了,未提交,已經審核,未審核,和歷史審核記錄,
            并將這些不同的狀態(tài)定義為一個枚舉類型.

            我們實現(xiàn)了,審核操作,和查看審核信息,還缺少什么呢?還缺少一個文件跟蹤功能,就是審核流程走到哪個角色的功能

            ?1 Create ? procedure ?GetListAuditTrail
            ?2 (
            ?3 ?? @AuditMainID ? int ? -- 審核單號
            ?4 )
            ?5 AS
            ?6
            ?7 Select ?a. * ?b.AuditID,b.CreateDate?Dates
            ?8 from ?流程子表?a? left ? join ?審核子表?b
            ?9 on ?a.Sequence? = ?b.Sequence
            10 where ?b.MainID = @AuditMainID ? and ?
            11 ???a.MainID? in ?( select ?ProcessID? from ?審核主表? where ? [ ID ] = @AuditMainID ?)


            從安全性來說,我覺得應該進行下用戶權限檢驗的.
            其實我個人寫存儲過程有個習慣的,如果這個存儲過程是返回一個列表的,我喜歡用GetList為開頭,如果執(zhí)行性存儲過程則喜歡Exec,如果只是返回一個值的用則是GetOnly開頭,

            明鏡臺

            posted on 2009-05-09 15:37 ^喬喬^ 閱讀(2440) 評論(2)  編輯 收藏 引用 所屬分類: c#

            FeedBack:
            # re: 自定義審核流程(二)[未登錄]
            2009-06-09 11:25 | michael
            很好 受益了 還有沒有下文?  回復  更多評論
              
            # re: 自定義審核流程(二)
            2009-11-09 21:51 | Hu Leon
            收益匪淺,提幾點個人意見,
            1. procedure ExecFlowAuditPass中28行和36行應該是insert into 審批子表,我的理解是流程表中的流程應該是預設好的,不應該insert,而且從列名看,博主的意思也是插入審批表。
            2.審批流程中還可以考慮并列審批情況,就是流程序列Sequence的值相同的情況,并列時,是或通過還是與通過。  回復  更多評論
              
            久久精品国产一区| 国产精品久久精品| 久久狠狠爱亚洲综合影院| A级毛片无码久久精品免费| 久久99热只有频精品8| 国产精品伊人久久伊人电影| 久久青青草视频| 久久精品成人免费网站| 日韩精品久久久久久久电影| 久久精品国产亚洲沈樵| 久久久久久久波多野结衣高潮 | 欧美精品一区二区久久| 久久亚洲AV成人无码国产| 久久本道久久综合伊人| av无码久久久久久不卡网站| 久久久精品波多野结衣| 久久精品国产亚洲一区二区| 久久狠狠爱亚洲综合影院| 日韩精品无码久久一区二区三 | 久久久久无码中| 成人综合伊人五月婷久久| 久久无码国产专区精品| 久久国产视频99电影| 99久久99这里只有免费费精品| 久久久久久毛片免费看| 秋霞久久国产精品电影院| 久久天天躁狠狠躁夜夜网站| 2021最新久久久视精品爱 | 精品久久久久久99人妻| 天天爽天天爽天天片a久久网| 亚洲AV无码久久精品蜜桃| 久久成人小视频| 久久精品卫校国产小美女| 久久九色综合九色99伊人| 国产精品99久久久久久董美香 | 2020久久精品国产免费| jizzjizz国产精品久久| 久久亚洲国产精品一区二区| 国产麻豆精品久久一二三| av午夜福利一片免费看久久| 久久99精品国产|