1)用下面的方法,得到最新的流程定義
JbpmContext.getCurrentJbpmContext().getGraphSession().findLatestProcessDefinitions();
2)上面的方法,返回的是流程定義的列表,在頁面上分別顯示出來。
比如:顯示啓動節點的名稱的方法是:
processDefinition.getTaskMgmtDefinition().getStartTask().getName();
3)JSP上傳遞的是流程定義ID,在servlet中,用下面方法得到ProcessDefinition:
ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
4)完成開始節點:
ProcessInstance processInstance = new ProcessInstance(processDefinition);
// create a new taskinstance for the start task
TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
// Save the process instance along with the task instance
jbpmContext.save(processInstance);
----------------------------------------------------------------------------------
//調用homeBean的getTaskInstances方法,得到一個LIST。該LIST的每個元素的名稱爲 var="taskInstance"
<h:dataTable value="#{homeBean.taskInstances}" var="taskInstance" headerClass="tableheader" columnClasses="tablecell">
//h:column表示一列,相當於JSP中的 TD
<h:column >
//f:facet 表示列表表頭
<f:facet name="header">
<h:outputText value="Task Form Link" />
</f:facet>
//h:commandLink相當於我們平常的href,action表示點擊後要執行的動作
<h:commandLink action="#{homeBean.selectTaskInstance}">
//f:param是在jsf中傳遞變量的方法
<f:param name="taskInstanceId" value="#{taskInstance.id}"/>
//h:outputText 表示要顯示的任務的名稱
<h:outputText value="#{taskInstance.name}" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Process" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Version" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.version}" />
</h:column>
</h:dataTable>
用上面的JSF代碼就顯示了當前進入系統的用戶的任務列表,點其中的一個任務名稱後,就執行下面的代碼:
homeBean.java:
public String selectTaskInstance() {
// Get the task instance id from request parameter
long taskInstanceId = JsfHelper.getId("taskInstanceId");
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
taskBean.initialize(taskInstance);
return "task";
}
其中,從request中取parameter的方法如下:
public static long getId(String parameterName) {
long value = -1;
String valueText = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(parameterName);
try {
Long id = new Long(valueText);
value = id.longValue();
} catch (NumberFormatException e) {
throw new RuntimeException("couldn't parse '"+parameterName+"'='"+valueText+"' as a long");
}
return value;
}
jBPM把parameter的讀取都用自己的方法封裝起來,達到了簡化和快速開發的目的。