defination_id
|
流程id
|
|
defination_name
|
流程名稱
|
|
defination_handler
|
流程處理輔助文件,每個工作流一個文件
|
自定義處理文件,及其對象。例如workflow-proporsal-handler.php,其中定義對象proposal
|
node_id
|
結點id
|
|
defination_id
|
流程id
|
|
node_index
|
結點序號
|
結點的step
|
node_name
|
結點名稱
|
|
node_type
|
結點類型
|
1人爲決策,2自動處理(直接執行execute_function),3等待外部響應(例如外部WS觸發),4分支,5彙總 6結束結點(此結點執行時候自動終止進程)
|
init_function
|
流程初始函數
|
|
run_function
|
流程運行函數
|
|
save_function
|
流程保存函數
|
|
transit_function
|
流程流轉函數
|
|
prev_node_index
|
前結點序號
|
例如1。開始結點沒有
執行前,通過此來校驗一下流程
|
next_node_index
|
後結點序號
|
例如[同意]3,[不同意]4。尾結點或要結束的結點沒有,若沒有,直接調用end
|
executor
|
執行角色,組,人
|
role[1,2] group[1,2] user[1,2],爲空由運行時決定
|
execute_type
|
執行類型
|
0需所有人執行 1只需一人執行
|
remind
|
提醒
|
0不提醒 1郵件 2短信 3郵件和短信
|
field
|
可編輯的字段
|
name,content
|
max_day
|
最長時間(天)
|
|
process_id
|
進程id
|
|
defination_id
|
流程id
|
|
process_desc
|
進程描述
|
顯示在我的工作臺中
|
context
|
上下文
|
存放上下文變量,例如業務表的id
|
current_node_index
|
當前結點序號
|
|
start_time
|
流程啓動時間
|
如遇分支、匯合顯示爲:
1=》3,4=》3,5=》6
|
finish_time
|
流程完成時間
|
|
state
|
狀態
|
1運行 2結束
|
start_user
|
發起人
|
發起人,用於顯示自己的流程
|
thread_id
|
線程id
|
|
process_id
|
進程id
|
|
process_desc
|
進程描述
|
|
node_id
|
結點id
|
|
node_name
|
結點名稱
|
|
executor
|
執行人
|
|
start_time
|
線程生成時間
|
|
receive_time
|
線程接收時間
|
|
finish_time
|
線程完成時間
|
|
max_time
|
結點規定的最長時間
|
|
state
|
狀態
|
0未接收 1已接收 2已處理
|
領導傳閱
|
部門領導審批
|
填寫表單
|
結束
|
放棄
|
提交
|
同意
|
重填(退回)
|
不同意
|
完成
|
發送支付信息
|
接收支付成功響應(外部WS觸發該流程)
|
<?php class Foo { function Variable () { $name = 'Bar' ; $this -> $name (); // This calls the Bar() method } function Bar () { echo "This is Bar" ; } } $foo = new Foo (); $funcname = "Variable" ; $foo -> $funcname (); // This calls $foo->Variable() ?> |
execute_type的作用是表示這個流程由多少人完成,例如對於會籤,就需要大家一起完成。如果是客戶報修,只要有一個客服接收了這次報修,流程就繼續
是的,我寫這個文的目的,就是想說明,自己完全可以開發一個符合實際需要的流程引擎。如果總是用那些現成的引擎,常常會束手束腳
-=Daniel=- 12:11:39
是的啊, 我知道, 但是我認爲execute_type本身就是爲了executer存在的. executer又是來自外部的, 比如用戶管理模塊啊什麼的. 外部就可以生成一個executer的id給流程使用了, 爲什麼這裏還需要描述這個呢. 比如說外部生成一個id, 這個id是描述一個人, 那就是一個人的操作, 如果是一個組, 那就是一個組的操作. 在流程內部標明這個id的含義有什麼作用呢?
remind就是一個提醒功能,設計的時候,自己定義那些結點需要提醒,把他放進去,其實是爲了利用空間換時間的原理,減少定義在其他地方的時候浪費讀取的時間
-=Daniel=- 12:13:01
其實我的意思是remind可能有很多種, 不可能在流程內部給定義完. 如果留接口而不是由流程給定, 可能會更加全面點.
我的executor是這樣定義的,可以定義user[1]表示id爲1的用戶,group[1]表示組id爲1,role[1]表示角色1,這幾個組合是可以並的,最終根據定義把thread分到所有的用戶,但是execute_type的含義是,只要有一個人執行了這個thread,我根據設定判斷,如果不需要所有人做,就把其他的thread結束
恩,我把所有業務的類都交給handler,例如一個提案流程
就是workflow-proposal-handler類,裏面定義所有結點需要的處理方法,當然也可以發送短信
我把一次完整的流程看作process,其中的每一條分支,都是thread
所有的thread都是可以直接由外部調用的,這比jpbm這些要好多了
-=Daniel=- 12:17:02
我不同意, 我認爲executer不管一個人完成或者多個人完成, 都是隻有有其中一個人完成就立即判定爲執行了流程. 如果一個流程需要多個人有次序的完成, 那麼就說明這個流程不夠詳細, 需要再細分.
♂蒓玥♀ 12:18:08
哦,我先定義了兩種情況:0 所有人處理,就是會籤
1 只需一個人處理,就是客服模式,
這兩個是最長用的模式
-=Daniel=- 12:18:53
哦, 這可能是你定義流程的模式跟我的有一定的差別, 或者是我們的客戶不同類型吧.
對了, 有一種流程你怎麼處理的, 比如一個流程中有一個步驟, 它按A這條路走是對的, 按B走也是可以的, 只要走了子流程中的任意一個流程, 都可以.
就是分支啊,隨便用戶選哪一條路徑
是啊, 我這邊在這個分支上遇到了意外, 因爲現在要做事務功能, 加上了分支很麻煩.
哦,我的這個客戶本身就是用SAP的,他們一個子公司要上提案系統,是基於Web的。
♂蒓玥♀ 12:24:26
你的事務處理具體想幹什麼?
-=Daniel=- 12:26:47
事務嘛, 最主要的就是回溯啊, 原先在紀錄的保存上做的都是當前狀態的值, 回溯就是返回到上一個值, 要求處理分支的回溯, 那就要求將當前的操作本身也當作一個值, 進行回溯.
我的回退作爲流程分支處理
-=Daniel=- 12:27:50
如果一個事務跨越了一個分支倒可以, 問題就是怕事務從分支的一部分開始, 到另外一個分支的某一部分結束, 那就會弄的很亂.
我看了, 這是一個方法, 就是所有的節點都有一個回退功能, 做起來比較煩.
這個問題我想過,包括所有結點的回退,我的結論是:純粹圖論上的功能對實際業務沒有任何作用,只要在流程設計的時候設計好,不要有這些問題就行了
♂蒓玥♀ 12:30:18
對於銀行這種單位,流程裏面有很多自動劃帳的結點,能讓人隨便回退麼