`

jbpm tasknode

    博客分类:
  • jbpm
阅读更多

http://77857.blog.51cto.com/67857/171334

 

http://tech.ddvip.com/2009-09/1252499380131731_3.html jbpm

 

http://www.pcjx.net/Java/J2eeh/216094.html  实现并发流程

 

一、任务分派 (单个任务,多个用户,把一个任务分派给一个用户)

package org.jbpm.tutorial.taskmgmt;

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.exe.TaskInstance;

public class TaskAssignmentTest extends TestCase {

  public void testTaskAssignment() {
   
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='the baby process'>" +
      "  <start-state>" +
      "    <transition name='baby cries' to='t' />" +
      "  </start-state>" +
      "  <task-node name='t'>" +
      "    <task name='change nappy'>" +
      "      <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />" +
      "    </task>" +
      "    <transition to='end' />" +
      "  </task-node>" +
      "  <end-state name='end' />" +
      "</process-definition>"
    );
   
    ProcessInstance processInstance =
        new ProcessInstance(processDefinition);
    Token token = processInstance.getRootToken();
   
    token.signal();
    assertSame(processDefinition.getNode("t"), token.getNode());

    // When execution arrived in the task-node, a task 'change nappy'
    // was created and the NappyAssignmentHandler was called to determine
    // to whom the task should be assigned.  The NappyAssignmentHandler
    // returned 'papa'.

    // In a real environment, the tasks would be fetched from the
    // database with the methods in the org.jbpm.db.TaskMgmtSession.
    // Since we don't want to include the persistence complexity in
    // this example, we just take the first task-instance of this
    // process instance (we know there is only one in this test
    // scenario.
    TaskInstance taskInstance = (TaskInstance) 
        processInstance
          .getTaskMgmtInstance()
          .getTaskInstances()
          .iterator().next();

    // Now, we check if the taskInstance was actually assigned to 'papa'.
    assertEquals("papa", taskInstance.getActorId() );
   
    taskInstance.end();
    // Since this was the last (only) task to do, the completion of this
    // task triggered the continuation of the process instance execution.
   
    assertSame(processDefinition.getNode("end"), token.getNode());
  }

}

 

import org.jbpm.graph.exe.*;
import org.jbpm.taskmgmt.def.*;
import org.jbpm.taskmgmt.exe.Assignable;

public class NappyAssignmentHandler implements AssignmentHandler {

  private static final long serialVersionUID = 1L;

  public void assign(Assignable assignable, ExecutionContext executionContext) {
    assignable.setActorId("papa");
  }

}

------------------------------------------------------------------------------------------------------------

 

<task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><task-node name="审核"><task template="apply_2.ftl" swimlane="boss" name="审核员工请假"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><task template="apply_3_new.ftl" swimlane="applyman" name="撤回请假单"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">

这个节点包含了我们刚才说的两个任务.我们知道当流传到这个节点的时候.这两个任务会同时创建并分配给各自的人员.有一个人完成任务后 节点向指定的节点转向.同时结束另一个任务.    signal="first" 有一个任务结束节点就流转.  end-tasks="true" 结束该节点的时候自动结束其他没有完成的任务.

 

1、node(自动节点)

  这种节点和State相反,也称自动节点。当业务程序实例执行到这个节点不会停止执行。而是会继续往下执行。如果该节点存在多个离开转向。那么,就会执行其中的第一个离开转向,在Node状态中,不需要外部参与者的参与,业务流程的这个部分是自动的、即时完成的。

 

TaskInstances 和 SwimlaneInstance s 两者都可以分配给指定的用户或参与者池. 分配一个TaskInstance给用户, 调用 Assignable.setActorId(String actorId) . 分配一个TaskInstance给候选参与者池, 调用 Assignable.setPooledActors(String[] actorIds).

流程中的每个任务都可以用在运行时间执行分配handler的实现关联起来.

当流程中多个任务被分配给同一个人或一组参与者,考虑 swimlane用途

 

----------------------------------------------------------------------------------------------在tasknode中,多个transition

 public void approveByManager(boolean pass){
      
         System.out.println("==FirstFlowProcessTest.approveByManager()==");
         ProcessInstance pi=this.getContext().getProcessInstance(4);
        
         Iterator<TaskInstance> it = pi.getTaskMgmtInstance().getTaskInstances().iterator();
        
         for( ;it.hasNext(); ){
          
          TaskInstance ti = it.next();
          
          if(ti.getActorId().equals("DepartmentManager")){
                 List<Transition> transitions = ti.getToken().getNode().getLeavingTransitions();
                 for(Transition t : transitions){
                  System.out.println("----Transition" + t.getName());
                 }
              //   assertEquals("DepartmentManager",ti.getActorId());
                 if(pass){
                   ti.end("部门经理审批通过");     //对于在tasknode结点中多个transition,用end(transition_name)
                 }else{                                   //方法来指向下一个结点
                  ti.end("部门经理驳回");
                 }
                 return;
          }
         }
        
     }   

 

<task-node name="部门经理审批">
  <task name="Task_ManagerApprove">
   <assignment class="com.firstflow.task.DepartmentManagerApproveAssignmentHandler"></assignment>
  </task>
  <transition to="金额判定" name="部门经理审批通过">
   <action name="Task_ManagerApproved" class="com.firstflow.action.ManagerApprovedActionHandler"></action>
  </transition>
  <transition to="结束" name="部门经理驳回">
   <action name="Action_ManagerDisapprove" class="com.firstflow.action.ManagerDisapproveActionHandler"></action>
  </transition>
 </task-node>

分享到:
评论

相关推荐

    jbpm3.2表说明

    JBPM_TASK JBPM_TASK FK_TASK_TASKNODE TASKNODE_ 一个NODE可以有多个TASK JBPM_TASK JBPM_TASK FK_TASK_STARTST STARTSTATE_ 一个开始节点可以对应多个TASK JBPM_LOG JBPM_LOG FK_LOG_SOURCENODE SOURCENODE_ ...

    JBPM数据库分析文档.pdf

    JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行和管理业务流程。在JBPM数据库中,有多个关键的表来存储流程相关的数据,包括流程定义、节点、迁移、动作和事件等。...

    jBPM3 2 3数据库表说明 pdf

    - `K`: 任务节点,由`org.jbpm.graph.node.TaskNode`实现。 - `N`: 普通节点,由`org.jbpm.graph.def.Node`实现。 - `R`: 起始状态节点,由`org.jbpm.graph.node.StartState`实现。 - `S`: 状态节点,由`org....

    jbpm表结构及字段说明

    - **FK_TASK_TASKNODE**: 一个节点可以有多个任务关联。 - **FK_NODE_ACTION**: 当前执行的action节点。 - **FK_VARACC_PROCST**: 节点可以访问多个变量。 3. **JBPM_TRANSITION**: 描述流程中的转移或路径,...

    jbpm数据库文档及表之间的关联

    - `FK_TASK_TASKNODE` 和 `FK_TASK_STARTST`:一个节点可以有多个任务,开始节点可对应多个任务。 - `FK_LOG_SOURCENODE` 和 `FK_LOG_DESTNODE`:在日志记录中,节点作为转换的起点或终点。 - `FK_NODE_ACTIONACTION...

    JBPM实践之:并发子流程的实现.doc

    总结起来,通过巧妙地使用TaskNode和自定义的动作,我们可以模拟实现JBPM中的并发子流程执行。这种方法避免了复杂的实现和Token流转问题,提供了一种相对简洁且有效的并发控制机制。在实际应用中,这种方案可以很好...

    JBPM数据库表说明[归类].pdf

    `ID_` 是节点的唯一标识,`CLASS_` 描述了节点的类型,如StartState、EndState、TaskNode等。`NAME_` 是节点的名称,`SUBPROCESSDEFINITION_` 用于关联子流程模板。`ISASYNC_` 指定节点是否可以异步执行,`ACTION_` ...

    jbpm安装及使用方法

    1、流程进入TaskNode节点,执行TaskNode类的execute()方法,该方法首先获得TaskMgmtInstance实例,然后通过它来创建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext); 2、在上面的...

    JBPM新手学习笔记(强烈推荐)

    JBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,用于实现业务流程自动化。它提供了从设计、部署到执行的全面解决方案,让开发者能够轻松地构建和管理复杂的业务流程。以下是对JBPM新手...

    jbpm几个重要数据表的详细说明

    - 任务可以在任务节点(`TaskNode`)下定义,也可以在流程定义节点下定义。 - 默认情况下,流程在任务节点处处于等待状态,直到所有任务完成。 - **jpbm_event**(事件表) - **中文名称**:事件表 - **数据表...

    一个jbpm实例说明

    【jbpm实例详解】 jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、执行和监控的能力。本实例将详细介绍如何使用jbpm创建一个简单的报销流程。 首先,学习任何...

    jbpm数据库表详解

    - CLASS_:节点的类型,如StartState、TaskNode、Decision等。 - NAME_:节点的名称。 - SUBPROCESSDEFINITION_:子流程模版的ID(仅当节点类型为ProcessState时使用)。 - ISASYNC_:标志节点是否支持异步执行...

    JBPM数据库表说明

    `ID_`是节点的唯一标识,`CLASS_`指定了节点的类型,如StartState、EndState、TaskNode等。`NAME_`是节点的名称,便于理解流程结构。`SUBPROCESSD`用于表示子流程状态。`ACTION_`字段关联了`JBPM_ACTION`表中的动作...

    jbpm任务分配管理.doc

    当流程到达一个TaskNode时,jbpm会调用`AssignmentHandler`的`assign()`方法来决定任务应当分配给哪个用户或用户组。例如,下面的配置将'change nappy'任务交由`NappyAssignmentHandler`处理: ```xml ...

    JBPM数据库表结构

    - **CLASS_**: 节点的类型,如StartState、TaskNode、EndState等。 - **NAME_**: 节点的名称。 - **SUBPROCESSDEFINITION_**: 子流程模版的ID,仅当节点类型为ProcessState时使用。 - **ISASYNC_**: 标识节点...

    JBPM数据库表说明.doc

    - CLASS_:定义节点的类型,如StartState、EndState、TaskNode等。 - NAME_:节点的名称,便于识别。 - SUBPROCESSDEFINITION_:如果节点类型为ProcessState,表示子流程模版的ID。 - ISASYNC_:指示节点是否...

    学习JBPM数据库分析文档.pdf

    ID_是节点的标识,CLASS_字段定义了节点类型,如StartState、EndState、TaskNode等。NAME_字段是节点的名称,SUBPROCESSDEFINITION_字段用于记录子流程模版ID。ISASYNC_字段表示节点是否支持异步执行,ACTION_字段...

    JBPM数据库表说明[参照].pdf

    `CLASS`字段定义了节点类型,如ProcessState、Decision、TaskNode等。`ISASYNC`字段指示节点是否支持异步执行,`ACTION`字段关联到`JBPM_ACTION`表中的动作,`SUPERSTATE`表示节点所属的SuperState,而`PROCESS...

    JBPM表关系详尽解释

    - **TASK** (`FK_TASK_TASKNODE`, `FK_TASK_STARTSTATE`):与任务表(`TASK`)关联,表示节点可以包含多个任务或者作为任务的起始节点。 通过这些关联,我们可以追踪到节点之间的逻辑关系,以及节点上发生的具体事件...

Global site tag (gtag.js) - Google Analytics