工作流數(shù)據(jù)庫(kù)設(shè)計(jì)_第1頁(yè)
工作流數(shù)據(jù)庫(kù)設(shè)計(jì)_第2頁(yè)
工作流數(shù)據(jù)庫(kù)設(shè)計(jì)_第3頁(yè)
工作流數(shù)據(jù)庫(kù)設(shè)計(jì)_第4頁(yè)
工作流數(shù)據(jù)庫(kù)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、工作流設(shè)計(jì)參考(包括PHP實(shí)現(xiàn)) 本文關(guān)鍵詞:php工作流jvorkflow工作流設(shè)計(jì)的工作流很少有讓人滿意的,即便是國(guó)內(nèi)用的比較多的jbpm,用起來(lái)也會(huì) 覺(jué)得很便扭。再加上PHP中沒(méi)有什么好用的工作流,于是干脆自己設(shè)計(jì)一個(gè),設(shè)計(jì)的原則 如下:1根據(jù)80/20原則,只使用wfhic模型中最符合自身應(yīng)用的20%功能2充分吸收國(guó)內(nèi)使用jbpm開(kāi)發(fā)BOSS中遇到的問(wèn)題,工作流引擎只負(fù)責(zé)參數(shù)的收集和流程 的流轉(zhuǎn),具體和業(yè)務(wù)的控制,交給每個(gè)流程定制的控制類去實(shí)現(xiàn)。3表單采用簡(jiǎn)單的html+控制標(biāo)簽的方法實(shí)現(xiàn)4權(quán)限和模板引擎,以及其它輔助函數(shù)直接使用辦公系統(tǒng)自帶的框架5充分利用PHP語(yǔ)言的特點(diǎn),流程設(shè)計(jì)是

2、基于數(shù)據(jù)庫(kù)的,程序上使用OO設(shè)計(jì),但采用重 對(duì)象的方法6不把可視化設(shè)計(jì)流程的工作交給最終客戶,而旦由設(shè)計(jì)時(shí)完成,因此不考慮流程版本更新 的問(wèn)題一、工作流數(shù)據(jù)表設(shè)計(jì)tbl_woikflow_definatioii:匚作流定義表defuiation_id流程iddefuiation_name流程名稱defuiationjiandler流程處理輔助文件,每 個(gè)工作流一個(gè)文件自定義處理文件,及其對(duì)象。例如 vvorkflow-propoisal-haiidler.php,其中定義對(duì)象 proposaltbl_woikflow_node :流程結(jié)點(diǎn)步驟表node.id結(jié)點(diǎn)iddefuiation_id流

3、程idnode.mdex結(jié)點(diǎn)序號(hào)結(jié)點(diǎn)的stepnode_name結(jié)點(diǎn)名稱node_type結(jié)點(diǎn)類型1人為決策,2自動(dòng)處理(直接執(zhí)行 execute_function), 3等待外部響應(yīng)(例如外部 WS觸發(fā)),4分支,5匯總6結(jié)束結(jié)點(diǎn)(此結(jié)點(diǎn) 執(zhí)行時(shí)候自動(dòng)終止進(jìn)程)uiit_fiinction流程初始函數(shù)mn_function流程運(yùn)行函數(shù)save_function流程保存函數(shù)transit_fiinction流程流轉(zhuǎn)函數(shù)prev_node_index前結(jié)點(diǎn)序號(hào)例如1。開(kāi)始結(jié)點(diǎn)沒(méi)有執(zhí)行前,通過(guò)此來(lái)校驗(yàn)一下流程next_node_index后結(jié)點(diǎn)序號(hào)例如同意3,不同意4。尾結(jié)點(diǎn)或要結(jié)束的結(jié) 點(diǎn)沒(méi)有,

4、若沒(méi)有,直接調(diào)用endexecutor執(zhí)行角色,組,人1 ole1,2 group1,2 userl,2,為空由運(yùn)行時(shí)決 定execute_type執(zhí)行類型0需所有人執(zhí)行1只需一人執(zhí)行remind提醒0不提醒1郵件2短信3郵件和短信field可編輯的字段name,contentmax_day最長(zhǎng)時(shí)間(天)tbLworkflow_process :流程執(zhí)行進(jìn)程表|process_id進(jìn)程id|defuiation_id流程id|process_desc進(jìn)程描述顯示在我的工作臺(tái)中|context上下文存放上下文變量,例如業(yè)務(wù)表的id|current_node_index當(dāng)前結(jié)點(diǎn)序號(hào)|start_t

5、ime流程啟動(dòng)時(shí)間如遇分支、匯合顯示為:1 =3,4=3,5 =6|fuiish_tmie流程完成時(shí)間|state狀態(tài)1運(yùn)行2結(jié)束|start_usei-發(fā)起人發(fā)起人,用于顯示自己的流程tbLworkflow_tluead :流程執(zhí)行線程表thiead_id線程idprocessed進(jìn)程idprocess_desc進(jìn)程描述node.id結(jié)點(diǎn)idnode_naine結(jié)點(diǎn)名稱executor執(zhí)行人staxt_time線程生成時(shí)間receive_time線程接收時(shí)間fuush_tmie線程完成時(shí)間max_time結(jié)點(diǎn)規(guī)定的最長(zhǎng)時(shí)間state狀態(tài)0未接收1己接收2己處理二、常見(jiàn)流程 人工決策 領(lǐng)導(dǎo)傳閱

6、部門領(lǐng)導(dǎo)審批 填寫表單結(jié)束 放棄提交同意重填(退回)不同意完成外部響應(yīng)發(fā)送支付信息接收支付成功響應(yīng)(外部WS觸發(fā)該流程)三、PHP設(shè)計(jì)運(yùn)行的函數(shù)由結(jié)點(diǎn)在設(shè)計(jì)時(shí)候決定,如果沒(méi)有設(shè)定,就使用默認(rèn)的函數(shù)。利用了 PHP語(yǔ)言 的以下特性Sname();/ / This calls the BarQ methodfiinction Bar()echo Tills is Bar”;Sfbo = new Foo();Sfiincname =H Variable;Sfdo-SfuncnameQ; This calls Sfoo-VariableQ?使用前訶以用method.exists來(lái)檢查。Wdi kflo

7、wService .phpWdrkflowServiceSdefinationSprocessSnodeStlueadSmput用戶輸入的和流程有關(guān)的變量list_defiiiation()(uiit_process(defination_id)(global user;取得Sdefination,得到業(yè)務(wù)的 handler,例如 WorkflowProposalHaiidler建立Sprocess行記錄stait_processQ(調(diào)用 WoikflowProposalHandler-stan(Spiocess)/新建業(yè)務(wù)對(duì)象,并把業(yè)務(wù)類的參數(shù)例如proposal_id 放到Sprocess

8、context里面init_thread( 1); 默認(rèn)調(diào)用第一個(gè)結(jié)點(diǎn)list_ my_tluead ()(global user;uiit_tluead(node_iiidex) (取得$node取得 Sprocess修改Sprocess為運(yùn)行到當(dāng)前結(jié)點(diǎn)Switch($node c node_type)Case 1:人工決策建立 StlueadW7dikflowProposalHandler- nut_fiinction (Sprocess,$node,Sthiead)發(fā)送提醒Case 2:自動(dòng)處理建立 StlueadWdikflowProposalHandle init_function

9、($process,Snode.$thiead)調(diào)用 i-un_tlnead(tlnead_id)Case 3:等待外部響應(yīng)建立 StlueadWdikflowProposalHandle init_function ($process,Snode.$thiead)Case 4:分支取得所有分支的子結(jié)點(diǎn)iniCthieacl(子結(jié)點(diǎn))Case 5:匯總:取得所有前結(jié)點(diǎn),如果所有前結(jié)點(diǎn)的Tluead都結(jié)束了,調(diào)出下一結(jié)點(diǎn)調(diào)用init_tliiead(子結(jié)點(diǎn))Case 6:結(jié)束:直接結(jié)束進(jìn)程processend_process()nm_thiead(thiead_id) (取得Snode取得 Sp

10、rocess取得 S threadSwitch($node c node_type)Case 1:人工決策修改Stluead為己接收WorkflowProposalHandler- iun_fiinction (Sprocess,Snode,Stluead) 顯示表單Case 2:自動(dòng)處理修改Stluead為己接收Snext_node_id=WorkflowPioposalHaiidler- iiin_function (Sprocess,Snode,Stluead) 調(diào)用 transit_tluead(tluead_id. Snext_node_id)Case 3:等待外部響應(yīng)修改Stlue

11、ad為己接收Snext_node_id=WorkflowPioposalHaiidler- iiin_function (Sprocess,Snode,Stluead)transit_tlnead(tlnead_id, $next_node_id)Case 4:分支Case 5:匯總:Case 6:結(jié)束:save_tluead(tluead_id) (/保存結(jié)點(diǎn)數(shù)據(jù)取得Snode取得 Sprocess取得 StlueadSwitch($node c node_type)Case 1:人工決策WorkflowProposalHandler- save_fiinction (SpiocessSno

12、de.Stluead)保存表單WdrkflowProposalHandle nm_fiinction ($process,$node,$thiead) 顯示表單Case 2:自動(dòng)處理Case 3:等待外部響應(yīng)Case 4:分支Case 5:匯總:Case 6:結(jié)束: transit_tluead(tluead_id. Snext_node_id)(取得Snode取得 Sprocess取得 StlueadSwitch($node c node_type)Case 1:人工決策WorkflowProposalHandler-transit_fiinction(Sprocess,Suode,Stlu

13、ead,Snext_node_id)修改Stluead為己完成If($next_node_id $ cui_node_id) 回退刪除所有大于$next_node_id的Threadiiiit_tluead(SnexCnode_id);Case 2:自動(dòng)處理修改Stluead為己完成If($next_node_id $ cui_node_id) (回退刪除所有大于$next_node_id的Tlueadiiiit _thread(Snext_node_id);Case 3:等待外部響應(yīng)修改Stluead為巳完成If($next_node_id list_defination();case st

14、aivprocess : 啟動(dòng)參數(shù):defiiiationid7dikflowSenTice-iiut_process(defination_id);WoikflowSenTice-start_processQ;case list_ my_tluead :待處理的列表WdikflowServicelist_ my_thread0;case mn_tliiead :參數(shù):thread_idWdikflowServiceruii_thread(thread_id);case save_tluead :參數(shù):tluead_id把input收集起來(lái)(所有的變量以f_開(kāi)頭),賦給WoikflowSeiv

15、ice的Input,另外還要獲 得 tluead_idWorkflowServrice-save_tluead(tluead_id);case tiaiisit_thiead :參數(shù):thread_id把input收集起來(lái),賦給WorkflowSeivice的Input,另外還要獲得tluead_idSnext_node_id =得到用戶選擇的下一結(jié)點(diǎn)idW7dikflowSendce- transit _thiead(thread_id, Snext_node_id);case list_my_process:所有我發(fā)起的流程case list_all_piocess:所有我發(fā)起的流程case view_piocess :在其它程序中初始化流程1先自行建立好業(yè)務(wù)表單2WorkflowSerdce-iiiiCpiocess

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論