WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機(jī)
ZCMS/工作流定義
工作流定義是創(chuàng)建,管理系統(tǒng)工作流的欄目,打開對應(yīng)界面如下:
例如工作流“錄入---編輯---審核---復(fù)審”,當(dāng)某欄目選擇此工作流時,在此欄目下添加文章時,過程如下:
- 錄入:錄入編輯文章,把編輯好的文章提交給審核人員。
- 審核:審核人員可以對此文章進(jìn)行修改,退回,如果文章通過,則把文章交給復(fù)審人員。
- 復(fù)審:復(fù)審人員對文章進(jìn)行一系列操作,如果文章沒有問題,則直接發(fā)布此文章。
建立工作流[ ]
工作流建立過程如下:
根據(jù)流程的需求填寫工作流名稱,說明,然后點擊確定鍵即可。
- 點擊新建工作流名稱,打開下面界面:
工作流代碼編寫[ ]
下面做一個簡單的文章錄入—審核工作流,來了解工作流的編寫過程及方法。
首先,要分析流程,過程如下:
- 用戶登錄,如果用戶具有錄入信息的權(quán)限,則就可以直接編寫文章,否則退出系統(tǒng)。
- 文章編輯完并且保存后,提交給審核人員。
- 審核人員查看文章,如果文章通過審核,直接發(fā)布即可。否則文章被退回錄入人員,回到第二步,進(jìn)行重復(fù)操作。
具體操作如下面流程圖:
一個工作流包含多個步驟。每一個步驟都有一個當(dāng)前狀態(tài)(status)。每一個步驟中都有一個或者多個動作(action)可以被執(zhí)行。每一個動作都可以設(shè)置執(zhí)行條件(condition),也可以設(shè)置執(zhí)行函數(shù)(pre-function or post-function)。動作產(chǎn)生結(jié)果(result),導(dǎo)致工作流的狀態(tài)和當(dāng)前步驟發(fā)生改變。
通過分析流程,總共分為三個步驟:錄入,審核,審核完畢。分別對應(yīng):“錄入狀態(tài)”,“審核狀態(tài)”,“審核完畢”三個狀態(tài)。其中,“錄入”步驟有“保存”,“提交給審核”兩個動作可以被執(zhí)行,“審核”步驟有“保存”,“置為已審”,“退回”三個工作可以被執(zhí)行。
- 首先要進(jìn)行初始化,如下面代碼:
<initial-actions> <action id="100" name="Start Workflow"> <pre-functions> <function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function> </pre-functions> <results> <unconditional-result old-status="Finished" status="正在錄入" step="1" owner="${caller}"/> </results> </action> </initial-actions>
其中,有兩種類型的 functions: 步驟前和步驟后 pre-function and post-function。
pre-function 是在工作流執(zhí)行某一特定的流轉(zhuǎn)之前進(jìn)行的。
args Map 是一個包含<function/>標(biāo)簽中所有<arg/>標(biāo)簽的 Map。這些參數(shù)都是String 類型的并且已經(jīng)經(jīng)過了變量替換。這意味著<arg name="foo">this is ${someVar}</arg>將會由配置中的"foo"轉(zhuǎn)換成為"this is [contents of someVar]"。
對于一個類方法,類加載器必須知道方法所屬的類的名字。這可以通過 class.name 參數(shù)來完成,例如:
<function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function>
每一個動作必須有一個 unconditional result(默認(rèn))和零到多個條件結(jié)果。
Conditional Result是 Unconditional Result 的一個擴(kuò)展。如:
<results> <unconditional-result old-status="Finished" status="正在錄入" step="1" owner="${caller}"/> </results>
其中,old-status 為進(jìn)行此動作之前所對應(yīng)的狀態(tài),status 為當(dāng)前狀態(tài),如果狀態(tài)不是Queued 的話,那么 owner=”${caller}”就是新步驟的所有者(owner)。
- 下面添加步驟 1:
<step id="1" name="錄入狀態(tài)"> <external-permissions> <permission name="permA"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在錄入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> </permission> </external-permissions>
每個 condition 必須作為一個 conditions 的子標(biāo)簽被定義。這個元素有一個屬性叫做type,它的值是 AND 或者 OR。當(dāng)你使用"AND"類型,所有的 condition 元素的值必須都是"true",整個 conditions 才能是 true。
具體用法如上面代碼:<conditions type="AND"></condition>表明,只有具有權(quán)限和處于“正在錄入”狀態(tài)才能執(zhí)行。
許可和約束(Permissions and Restrictions):基于工作流實例的狀態(tài),Permissions 可被賦予到用戶和/或群組。這些 Permission 和工作流引擎的功能無關(guān),但是它們會對使用OSWorkflow 的應(yīng)用相當(dāng)有好處。如例子,一個錄入管理系統(tǒng)可能需要一個"file-write-permission",只讓具有權(quán)限的用戶編輯文檔。程序便可以使用 API 去判斷是否文件應(yīng)該被錄入。如果在工作流中有好多狀態(tài)都適用“file-write-permission”,這就很有用,不再需要去檢查特定的步驟或者條件,檢查是依照某個特定許可進(jìn)行的。 Permission 和 action 都使用了約束(restriction)的概念。約束是定義在 restrict-to 元素內(nèi)的一個或多個條件。
- 下面為步驟添加動作:
<action id="11" name="保存"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在錄入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> <pre-functions> <function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function> </pre-functions> <results> <unconditional-result old-status=" 正 在 錄 入 " status=" 正 在 錄 入 " step="1" owner="${caller}"/> </results> </action> <action id="12" name="提交給審核"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在錄入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> <results> <unconditional-result old-status=" 錄 入 完 成 " status=" 正 在 審 核 " step="2" owner="audit1"/> </results> </action>
其中,步驟1 有兩個動作可以被執(zhí)行: "保存","提交給審核"。
步驟 2,3 創(chuàng)建如步驟 1。