遞歸在算法在工作流程引擎中的應用
遞歸做為一種算法在程序設計語言中廣泛應用.是指函數/過程/子程序在運行過程中直接或間接調用自身而產生的重入現象.遞歸是計算機科學的一個重要概念,遞歸的方法是程序設計中有效的方法,采用遞歸編寫程序能使程序變得簡潔和清晰.。
遞歸在工作流程引擎中有廣泛的應用,以以下事例來說明:
應用一:退回到指定的節點,要把當前節電與退回節點之間的節點數據清空。
/// <summary> /// 遞ÌY歸¨¦刪¦?除y兩¢?個?節¨²點Ì?之?間?的Ì?數ºy據Y /// </summary> /// <param name="nds">到Ì?達ä?的Ì?節¨²點Ì?集¡¥合?</param> publicvoid DeleteToNodesData(Nodes nds) { /*開a始º?遍À¨¦歷¤¨²到Ì?達ä?的Ì?節¨²點Ì?集¡¥合?*/ foreach (Node nd in nds) { Work wk = nd.HisWork; wk.OID = this.WorkID; if (wk.Delete() == 0) { wk.FID = this.WorkID; if (wk.Delete(WorkAttr.FID, this.WorkID) == 0) continue; }
/*說¦Ì明¡Â:已°?經-刪¦?除y該?節¨²點Ì?數ºy據Y。¡ê*/ DBAccess.RunSQL("DELETE WF_GenerWorkerList WHERE (WorkID=" + this.WorkID + " OR FID=" + this.WorkID + ") AND FK_Node=" + nd.NodeID);
//刪¦?除y正y常¡ê的Ì?垃¤?圾?數ºy據Y。¡ê DBAccess.RunSQL("DELETE WF_GenerWorkFlow WHERE WorkID NOT IN (SELECT WorkID FROM WF_GenerWorkerList )"); DBAccess.RunSQL("DELETE WF_GenerFH WHERE FID NOT IN (SELECT FID FROM WF_GenerWorkerList)");
DeleteToNodesData(nd.HisToNodes); } }
|
應用二:在分合流程過程中,流程結束時,要根據用戶的需要判斷并殺掉沒有完成的進程。
/// <summary> /// 結¨¢束º?流¢¡Â程¨¬ /// </summary> /// <returns></returns> publicstring DoFlowOver() { // 建¡§立¢¡é流¢¡Â程¨¬事º?例¤y。¡ê GenerWorkFlow gwf = newGenerWorkFlow(this.WorkID); Node nd = newNode(gwf.FK_Node); string msg = this.BeforeFlowOver();
//先¨¨讓¨?它¨¹的Ì?子Á¨®流¢¡Â程¨¬結¨¢束º?。¡ê WorkerLists wls = newWorkerLists(); wls.Retrieve(WorkerListAttr.FID, this.WorkID); foreach (WorkerList wl in wls) { WorkFlow wf = newWorkFlow(wl.FK_Flow, wl.WorkID); wf.DoFlowOver(); } 。。。。。。。。。。。。。。 } |
應用三:根據當前節點的ID,向上追溯一個分流節點。
/// <summary> /// 獲?取¨?它¨¹的Ì?上¦?一°?步?的Ì?分¤?流¢¡Â點Ì? /// </summary> privateNode _GetHisPriFLNode(Nodes nds) { foreach (Node mynd in nds) { if (mynd.IsHL) return mynd; else return _GetHisPriFLNode(mynd.HisFromNodes); } returnnull; } /// <summary> /// 它¨¹的Ì?上¦?一°?步?分¤?流¢¡Â節¨²點Ì? /// </summary> publicNode HisPriFLNode { get { return _GetHisPriFLNode(this.HisFromNodes); } }
|
類別:工作流開發 查看評論
大量的多個行業的流程設計案例,都以操作錄像演示給您。
馳騁工作流,好用看的見。
http://ccflow.org QQ:hiflow@qq.com