WfExecutionObject接口與實作
1 .概述WfExecutionObject接口是一個抽象基類接口,它定義了WfProcess和WfActivity公有的屬性,狀态和操作。WfExecutionObject的操作傳回的狀态與流程狀态是不同的。WfExecutionObject提供了方法來擷取目前的狀态并完成從目前狀态向另一狀态的轉變。但WfExecutionObject的狀态是執行對象的狀态,WfProcess的狀态是流程的狀态,他們之間并沒有必然的關系。
2 .屬性及相應方法2.1 name
name屬性是工作流執行對象的描述性名字,name屬性的擷取和設定是通過GenericDelegator和workEffortId來完成的:
public String name() throws WfException {
return getRuntimeObject().getString("workEffortName");
}
public void setName(String newValue) throws WfException {
GenericValue dataObject = getRuntimeObject();
try {
dataObject.set("workEffortName", newValue);
dataObject.store();
} catch (GenericEntityException e) {
throw new WfException(e.getMessage(), e);
}
}
2.2 key
key是工作流執行對象的唯一标示符。一個特定的工作流管理器産生的流程集合中,每個流程都有一個唯一的key;一個流程包含的活動集合中,每個活動都有一個唯一的key。當工作流執行對象産生時,由工作流管理器為它配置設定一個特定的key。
Key不同于對象标示符,它是工作流執行對象生命周期中流程或活動的reference。它由activityId或processId來表示。
2.3 process_context
process_context是定義執行對象環境的流程相關資料,它由一系列的名字屬性來描述。process_context由一系列的名值對來表達,process_context的擷取和設定是通過runtimeDataId和GenericValue來實作的。
2.4 priority
priority的有效值在0到5之間,一個為highest,三個為normal,另外一個為其它情況。
2.5 last_state_time
表示上次狀态改變的時間,如下:
public Timestamp lastStateTime() throws WfException {
GenericValue dataObject = getRuntimeObject();
if (dataObject == null || dataObject.get("lastStatusUpdate") == null)
throw new WfException("No runtime object or status has never been set.");
return dataObject.getTimestamp("lastStatusUpdate");
}
3 .狀态總的狀态分為open和closed。
Open分為open.running和open.not_running。
Open.not_running分為not_running.not_started和not_running.suspended。
Closed分為closed.completed,closed.terminated和closed.aborted。
從not_running.suspended到open.running應該用resume()方法。另外調用terminate()方法,abort()方法或complete()方法,suspend()方法可以到相應的狀态。當然了,最通用的改變狀态的方法是用changeState(int state)方法。