• <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 ^喬喬^ 閱讀(2439) 評論(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的值相同的情況,并列時,是或通過還是與通過。  回復  更多評論
              
            久久精品国产第一区二区三区| 国产一区二区三精品久久久无广告| 91精品国产91热久久久久福利| 无码专区久久综合久中文字幕| 久久综合伊人77777| 久久久国产精华液| 9999国产精品欧美久久久久久| 久久se精品一区二区| 久久成人国产精品二三区| 国产91色综合久久免费| 久久精品国内一区二区三区| 久久九九有精品国产23百花影院| 色综合久久天天综合| 国产精品成人久久久久三级午夜电影 | 久久精品国产亚洲AV无码麻豆 | 久久精品无码专区免费东京热| 精品无码久久久久国产动漫3d| 伊人色综合久久天天人手人婷| 色狠狠久久AV五月综合| 国产精品久久成人影院| 久久99国产一区二区三区| 看全色黄大色大片免费久久久| 久久精品国产精品亚洲精品| 日韩AV无码久久一区二区| 色综合久久中文色婷婷| 久久久精品国产亚洲成人满18免费网站| 理论片午午伦夜理片久久 | 久久精品成人| 精品伊人久久大线蕉色首页| 久久精品国产亚洲av麻豆色欲| 久久精品国产99国产精品澳门| 久久久久国产一级毛片高清板| 久久婷婷五月综合色奶水99啪 | 亚洲精品综合久久| 色婷婷综合久久久久中文一区二区| 久久综合九色综合97_久久久| 久久久久这里只有精品| 久久婷婷五月综合97色一本一本| 精品久久久久久国产三级| 久久久老熟女一区二区三区| 久久久久亚洲AV成人网人人软件|