⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jbpm-websale.apt

📁 anewssystem新闻发布系统集成使用了spring hibernate freemarker EXTJS等开源框架 可以作为学习参考
💻 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 + -