• <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>
            ::^喬喬^::明鏡臺::原創空間::C#.NET2.0,C++技術BLOG
            人最重要的是心境,一顆平靜安穩的心才能更好的進步,保持自己的心態.成為夢想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0

            執行審核上則是每處理一個環節,就插入一個環節的信息.


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


            ?1 Create ?? procedure ?ExecFlowAuditPass
            ?2 (
            ?3 @AuditMainID ? int ,
            ?4 @UserID ? varchar ( 100 ),
            ?5 @AuditOpinion ? ntext ,
            ?6 @Auditstatus ? int
            ?7 )
            ?8 As
            ?9 -- 獲取最后審核的節點
            10 declare ? @posid ? int
            11 select ? @posid ? = ? max (Sequence)? from ?審核子表? where ?MainID = ? @AuditMainID
            12 -- 獲取最大審核的節點
            13 declare ? @maxposid ? int
            14 select ? @maxposid = max (Sequence)? from ?流程子表? where ?MainID = ? @AuditMainID
            15 -- 獲取將審核節點角色資料
            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 -- 角色符合執行
            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

            這個就是執行審核的存儲過程,

            現在主任C1打開審核系統,根據需要,他只能看到它能看的審核.

            ?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

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

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

            ?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為開頭,如果執行性存儲過程則喜歡Exec,如果只是返回一個值的用則是GetOnly開頭,

            明鏡臺

            posted on 2009-05-09 15:37 ^喬喬^ 閱讀(2445) 評論(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的值相同的情況,并列時,是或通過還是與通過。  回復  更多評論
              
            日韩av无码久久精品免费| 亚洲αv久久久噜噜噜噜噜| 久久免费国产精品一区二区| 人妻无码αv中文字幕久久琪琪布| 国产毛片欧美毛片久久久| 国产成人精品久久| a高清免费毛片久久| 久久精品国产99国产精品| 噜噜噜色噜噜噜久久| 欧美精品久久久久久久自慰| 亚洲嫩草影院久久精品| 久久经典免费视频| 国产精品久久久久久久久| 久久久精品国产Sm最大网站| 亚洲精品乱码久久久久久中文字幕| 久久婷婷五月综合97色| 久久av高潮av无码av喷吹| 国内精品伊人久久久久妇| 久久被窝电影亚洲爽爽爽| 热综合一本伊人久久精品| 国产精品久久久久…| 四虎影视久久久免费观看| 久久精品国产秦先生| 久久久久久国产精品美女| 国产精品一区二区久久精品无码 | 久久综合鬼色88久久精品综合自在自线噜噜 | 色播久久人人爽人人爽人人片AV| 久久99精品久久久久久久不卡| 久久精品国产黑森林| 久久中文娱乐网| 久久99精品久久久久婷婷| 午夜不卡久久精品无码免费| 久久久久99精品成人片牛牛影视 | 久久91这里精品国产2020| 久久国产免费观看精品3| 国产成人综合久久精品红| 久久99精品久久久久久噜噜| 久久这里只有精品首页| 伊人久久大香线焦综合四虎| 国产精品一区二区久久不卡| 日本欧美久久久久免费播放网|