關於基於流程的待辦事項的實現

關於基於流程的待辦事項的實現

名詞定義

流程:工作流,一項工作的結束決定另一項工作的開始

步驟:流程中的每一步,每個工作

流動主體:步驟中,工作的對象

例如:員工創建一份申請提交給經理,經理批示後下達給員工。這個過程就是一個流程。它包括:創建申請、提交、批示、下達四個步驟,流動主體是申請。

 

 

問題描述

這裏說的待辦事項是記錄在一個流程中每個操作人員需要做的事項。

因此,它是基於流程的。要求在流程走到一個步驟時,操作該步驟的人員的待辦事項中自動添加一項待辦事項,當走到下一步時,該項待辦事項自動取消。

待辦事項的問題複雜度主要取決於流程的複雜度。

影響流程的複雜度的因素有:

1、是否有併發流程。

2、流動的主體是否發生變化。

 

我們現在的流程中,有一個併發流程;流動主體有4個:工程、項目、設計單、預算補充申請單。

解決方案

給每個步驟設置一個標誌(point)。創建標誌列表tbl_pending_notice

給流動主體添加三個屬性:當前用戶(cur_uid),當前標誌(cur_point),流動時間(pass_date)。

 

設置格式:

標誌(point):([流程號]/[步驟號]),如起始步驟(0/1) -> (0/2) 有併發流程後編爲(1/1)(2/1)

當前用戶(cur_uid)([用戶編號]),用戶編號可以是單個用戶的編號如:(34),也可以是多個用戶編號的組合如:((12),(34),(56))三個併發流程,每個流程當前步驟的用戶編號分別爲123456

當前標誌(cur_point):(([用戶編號])@([標誌位]))。如單流程((34)@(0/4)),三併發流程((12)@(1/1),(34)@(2/1),(56)@(3/1))

流動時間(pass_date):時間型數據。

 

操作方法

讀取代辦事項

設:讀取用戶編號34的用戶(以下簡稱用戶34)在工程上的待辦事項

1、在工程表中,查找cur_uid中有沒有(34),有則表示用戶34在該工程中有待辦事項;

2、檢查在cur_point中有沒有(34)@,如果沒有,則數據結構損壞

3、在cur_point中,截取從(34)@後一位開始到末尾的字串;

4、在截取的字串中,截取從頭開始到第一個“)”的字串,即步驟標誌位

從而得到用戶34在工程表中,當前的待辦事項。

SQL

Declare @myid varchar(50)

SET @myid = '(34)'

 

select my_point,pass_date

,replace(n.message,'<Project name/>',a.project_name_vchr)as cur_message

from (

select substring(my_point,1,charindex(')',my_point)) as my_point

,pass_date,project_name_vchr

from (

select pass_date,project_name_vchr,cur_point,substring(cur_point,charindex(''+ @myid +'@',cur_point)+len(''+ @myid +'@'),len(cur_point)) as my_point

from tbl_project_info

where cur_uid like '%'+ @myid +'%' and charindex(''+ @myid +'@',cur_point)>0

)as a

) as a

left outer join tbl_pending_notice n on a.my_point =n.point

 

步驟流轉

1、在cur_uid中,將我的用戶編碼替換爲下一任的用戶編碼;

2、在cur_point中,將我的標誌位替換爲下一任的標誌位

例:當前用戶34在步驟(0/4),完成後傳給用戶25,步驟(0/5)

SQL

Declare @ProjectId bigint

Declare @MyId varchar(50)

Declare @NextId varchar(50)

Declare @MyPoint varchar(50)

Declare @NextPoint varchar(50)

Set @ProjectId=0

Set @MyId='(34) '

Set @NextId= '(25)'

Set @MyPoint='(34)@(0/4)'

Set @NextPoint ='(25)@(0/5)'

 

Update tbl_project_info set pass_date=getdate()

,cur_uid=replace(cur_uid,@MyId,@NextId)

,cur_point=replace(cur_point,@MyPoint,@NextPoint)

Where id=@ProjectId

 

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章