?? jbpm-websale.apt
字號:
---
jbpm-webapp的websale
---
Lingo
---
2007-04-30
下面記錄的是jbpm-webapp演示的websale工作流的流程與實現
實際上整個演示包含三個部分:home基本流程操作,administration未實現,monitor狀態監視器。這里我們僅僅實現home基本流程操作,對于monitor狀態監視器不做考慮。
*home基本流程操作的步驟
*index.jsp直接轉向到login.jsp,在進行任何操作之前必須選擇一個角色進入。
*login.jsp中只有一個form,form中使用select顯示角色列表,選擇一個角色既可以登錄進行操作。
login.jsp:
+--
<table>
<tr>
<td>
<fieldset>
<legend>Log In</legend>
<label>
<form id="login">
<br />
Select User:
<select id="username">
<option value="">${user.name}</option>
</select>
<br />
<center><input type="submit" value="Log In" /></center>
</form>
</label>
</fieldset>
</td>
</tr>
</table>
+--
對應的類中,通過session獲得用戶列表:
+--
import org.hibernate.Session;
import org.jbpm.JbpmContext;
import org.jbpm.identity.User;
import org.jbpm.identity.hibernate.IdentitySession;
Session session = JbpmContext.getCurrentJbpmContext().getSession();
IdentitySession identitySession = new IdentitySession(session);
List list = identitySession.getUsers();
// user.getName();
+--
登錄時設置當前的角色名:
+--
JbpmContext.getCurrentJbpmContext().setActorId(userName);
+--
登錄后跳轉到home.jsp。
*home.jsp中,顯示taskInstances任務列表,latestProcessDefinitions最新工作流列表。
初始化jbpmContext, graphSession, taskMgmtSession
+--
this.jbpmContext = JbpmContext.getCurrentJbpmContext();
this.graphSession = jbpmContext.getGraphSession();
this.taskMgmtSession = jbpmContext.getTaskMgmtSession();
+--
*taskIntances任務列表包括三列:任務名,工作流名,版本號
+--
<table>
<tr>
<td>task form link</td>
<td>process</td>
<td>version</td>
</tr>
<tr>
<td>taskInstance.name</td>
<td>taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.name</td>
<td>taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.version</td>
</tr>
</table>
+--
獲得任務列表
+--
taskMgmtSession.findTaskInstances(username);
+--
選擇任務
+--
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
+--
獲得任務后,轉向task.jsp
*latestProcessDefinitions最新工作流列表
+--
<table>
<tr>
<td>Start Process Link</td>
<td>process</td>
<td>version</td>
</tr>
<tr>
<td>processDefinition.taskMgmtDefinition.startTask.name</td>
<td>processDefinition.name</td>
<td>processDefinition.version</td>
</tr>
</table>
+--
獲得最新工作流列表
+--
graphSession.findLatestProcessDefinitions();
+--
選擇工作流,創建startTask開始任務,保存processInstance
+--
ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
ProcessInstance processInstance = new ProcessInstance(processDefinition);
TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
jbpmContext.save(processInstance);
+--
保存后,轉向task.jsp
*task.jsp顯示任務form,顯示了任務名,任務里的變量,可以選擇的transition,同時顯示流程圖
+--
<%@ taglib uri="/WEB-INF/jbpm.tld" prefix="jbpm" %>
<table>
<tr>
<td>
<form id="taskform">
<input type="hidden" id="taskInstanceId" value="${taskInstanceId}" />
<h2>${taskInstance.name}</h2>
<hr />
<table>
<tr>
<td>${label}</td>
<td>${description}</td>
<td><input type="text" value="${value}" readonly="${readonly}"/></td>
</tr>
</table>
<hr />
<#if availableTransitions>
<#list availableTransitions as tran>
<input id="transitionButton" name="${saveAndClose}" value="${tran.name}"/>
</#list>
<#else>
<input id="transitionButton" name="${saveAndClose}" value="Save and Close Task"/>
</#if>
<hr />
<input type="button" name="${save}" value="Save"/>
<input type="button" name="home" value="Cancel"/>
</form>
</td>
<td><jbpm:processimage task="${taskInstanceId}"/> </td>
</tr>
</table>
+--
初始化任務的變量列表,獲得列表的細節
+--
this.taskInstanceId = taskInstance.getId();
// set the parameters
this.taskFormParameters = new ArrayList();
TaskController taskController = taskInstance.getTask().getTaskController();
if (taskController!=null) {
List variableAccesses = taskController.getVariableAccesses();
Iterator iter = variableAccesses.iterator();
while (iter.hasNext()) {
VariableAccess variableAccess = (VariableAccess) iter.next();
String mappedName = variableAccess.getMappedName();
Object value = taskInstance.getVariable(mappedName);
}
}
+--
獲得有效的transition列表
+--
availableTransitions = taskInstance.getAvailableTransitions();
if ((availableTransitions != null) && (availableTransitions.size() <= 1)) {
availableTransitions = null;
availableTransitionItems = null;
} else {
availableTransitionItems = new ArrayList();
Iterator iter = availableTransitions.iterator();
while (iter.hasNext()) {
Transition transition = (Transition) iter.next();
SelectItem transitionItem = new SelectItem();
transitionItem.setValue(transition.getName());
transitionItem.setLabel(transition.getName());
transitionItem.setDisabled(false);
availableTransitionItems.add(transitionItem);
}
}
+--
保存變量
+--
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
Iterator iter = taskFormParameters.iterator();
while (iter.hasNext()) {
TaskFormParameter taskFormParameter = (TaskFormParameter) iter.next();
if ((taskFormParameter.isWritable()) && (taskFormParameter.getValue() != null)) {
taskInstance.setVariable(taskFormParameter.getLabel(), taskFormParameter.getValue());
} else {
log.debug("ignoring unwritable [" + taskFormParameter.getLabel() + "]");
}
}
jbpmContext.save(taskInstance);
+--
保存變量后轉回home.jsp
保存變量,根據transition關閉任務
+--
save();
String transitionButton = JsfHelper.getParameter("taskform:transitionButton");
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
if ("Save and Close Task".equals(transitionButton)) {
taskInstance.end();
} else {
taskInstance.end(transitionButton);
}
ProcessInstance processInstance = taskInstance.getTaskMgmtInstance().getProcessInstance();
if (processInstance.hasEnded()) {
JsfHelper.addMessage("The process has finished.");
}
LoggingInstance loggingInstance = processInstance.getLoggingInstance();
List assignmentLogs = loggingInstance.getLogs(TaskAssignLog.class);
log.debug("assignmentlogs: " + assignmentLogs);
if (assignmentLogs.size() == 1) {
TaskAssignLog taskAssignLog = (TaskAssignLog) assignmentLogs.get(0);
JsfHelper.addMessage("A new task has been assigned to '" + taskAssignLog.getTaskNewActorId() + "'");
} else if (assignmentLogs.size() > 1) {
String msg = "New tasks have been assigned to: ";
Iterator iter = assignmentLogs.iterator();
while (iter.hasNext()) {
TaskAssignLog taskAssignLog = (TaskAssignLog) iter.next();
msg += taskAssignLog.getActorId();
if (iter.hasNext())
msg += ", ";
}
msg += ".";
JsfHelper.addMessage(msg);
}
jbpmContext.save(taskInstance);
+--
保存后轉回home.jsp
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -