Jboss seam Todo list待辦事項列表說明
滿江紅翻譯的seam reference中沒有對todo list 進行工作原理的說明,故做一些補充
此爲較簡單的流程示例,並沒有真正的業務數據關聯。
通過Login類login方法來實現對流程參與者綁定,使用TodoList類說明, 創建todo流程實例,節點自動流轉。
1 提交一個參與者
Login.jsp
<h:inputText value="#{login.user}"/>
<h:commandButton value="Login" action="#{login.login}"/>
2 流程參與者綁定
綁定org.jboss.seam.bpm.actor的一個實例
Login.jave的代碼如下:
@In private Actor actor;
public String login()
{
actor.setId(user);
return "/todo.jsp";
}
3 todo.jsp頁面
注:如下#{task.字段}對應實例表的字段,seam封閉了jbpm其實對應的是task的entity.
<! - - 1 taskInstancePriorityList 說明:
支持優先的任務列表顯示(不確定的顯示支持在標籤組件構建時調用),用於顯示任務實例數據對應 jbpm_taskinstance數據表。
Support for a task list ordered by priority.
Author:
Gavin King - - >
<h:outputText value="There are no todo items." rendered="#{empty taskInstancePriorityList}"/>
<!- - 輸出數據表格 - - >
<h:dataTable value="#{taskInstancePriorityList}" var="task" rendered="#{not empty taskInstancePriorityList}">
<h:column>
<f:facet name="header">
<h:outputText value="Description"/>
</f:facet>
<h:inputText value="#{task.description}" style="width: 400"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Created"/>
</f:facet>
<! - - 顯示實例的開始時間 - - >
<h:outputText value="#{task.taskMgmtInstance.processInstance.start}">
<s:convertDateTime type="date"/>
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Priority"/>
</f:facet>
<h:inputText value="#{task.priority}" style="width: 30"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Due Date"/>
</f:facet>
<h:inputText value="#{task.dueDate}" style="width: 100">
<s:convertDateTime type="date" dateStyle="short"/>
</h:inputText>
</h:column>
<h:column>
< ! - - 用於節點的流轉,此示例對應的方法是直接完成方式 @StartTask @EndTask - - >
<s:button action="#{todoList.done}" taskInstance="#{task}" value="Done"/>
</h:column>
</h:dataTable>
</div>
<div>
<h:messages/>
</div>
<div>
<h:commandButton value="Update Items" rendered="#{not empty taskInstanceList}"/>
</div>
</h:form>
<h:form id="new">
<div>
<h:inputText value="#{todoList.description}" style="width: 400"/>
<! - - 調用 createTodo 創建流程實例- - >
<h:commandButton value="Create New Item" action="#{todoList.createTodo}"/>
</div>
</h:form>
</f:view>
</body>
</html>
4 TodoList類說明
private String description;
創建todo流程實例
@CreateProcess(definition="todo")
public void createTodo() {}
節點自動流轉
@StartTask @EndTask
public void done() {}
5 流程定義文件說明
<process-definition name="todo" >
開始節點
<start-state name="start">
<transition to="todo"/>
</start-state>
任務節點
<task-node name="todo">
直接從session會話週期當中得到session bean的屬性值,用於節點描述
<task name="todo" description="#{todoList.description}">
設置參與者,通過參與者可以得到一個參與者的多個任務實例
<assignment actor-id="#{actor.id}"/>
</task>
結束指向
<transition to="done"/>
</task-node>
結束節點
<end-state name="done"/>
</process-definition>
6 最終對應的部分工作流表數據與頁面說明
每一個行都是重新開始一個流程實例,執行done按鈕後,bpm系統會自動結束流程
定義的流程圖
流程定義表,此時只有一個流程,可以有多個流程實例
流程實例表
任務實例表,與頁面內容對應,如DESCRIPTION_和ACTORID_