jbpm知识点——tasknode

转载 2007年09月27日 11:15:00

同fork等一样是一种节点类型。任务节点是jbpm中一个非常重要的概念,一个任务节点可以包含若干个任务(开始状态start-state只能有一个任务),不同的任务可以由不同的人来完成,任务实例被分配给actorId来完成。
任务实例有几个状态:创建、开始、结束,这些信息存在JBPM_TASKINSTANCE中。
常用的方法:
分派任务(指定处理人)-TaskInstance.assign(String)
根据处理人查找任务实例-TaskMgmtSession.findTaskInstancesByActorId(…)
任务创建-TaskMgmtInstance.createTaskInstance(…)
任务开始-TaskInstance.start()
任务结束TaskInstance.end(…)

任务可以被指定一个优先级,这个优先级在任务的实例创建时将被作为每个任务实例的初始优先级,任务实例的初始优先级可以在以后被修改。

如果多于一个任务实例与一个任务节点关联,流程开发者可以指定任务实例的完成怎样影响流程的继续。下面是可以给任务节点的signal属性设置的值:
l        last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l        last-wait:当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l        first:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l        first-wait:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l        unsynchronized:总是继续执行,不管任务是否创建和完成。
l        never:执行不再继续,不管任务是否创建和完成。


你可以在流程定义文件中定义任务,也可以在代码中定义:
public class CreateTasks implements ActionHandler {
 public void execute(ExecutionContext executionContext) throws Exception {
    Token token = executionContext.getToken();
    TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
     
    TaskNode taskNode = (TaskNode) executionContext.getNode();
    Task changeNappy = taskNode.getTask("change nappy");
 
    // 现在, 相同任务的两个任务实例被创建
    tmi.createTaskInstance(changeNappy, token);
    tmi.createTaskInstance(changeNappy, token);
 }
}

在Jbpm中,可以结合使用推模式和拉模式的任务分配。流程可以计算任务的责任人,并把它推到他/她的任务清单里;或者,任务可以被分配到参与者池,这种情况下,池中的每个参与者都可以拉出任务并把它放入参与者的个人任务清单。
推模式:Assignable.setActorId(String actorId);TaskMgmtSession.findTaskInstances(String actorId)
拉模式:Assignable.setPooledActors(String[] actorIds);TaskMgmtSesion.findPooledTaskInstances(String actorId);TaskMgmtSession.findPooledTaskInstances(List actorIds)
为了防止多个用户在同一个共享任务上工作,使用用户的actorId修改任务实例的actorId就可以了。这样,任务实例将不会出现在共享任务清单中,而只会存在于用户个人的任务清单里。设置任务实例的actorId为空(null),则会把任务实例放回共享任务里。

任务实例可以拥有它自己的变量,并且也可以“看到”流程变量。

 
   
   
   
 

这里使用的是默认的控制器,也可以定义自己的控制器

 
    -- here goes your task controller handler configuration --
 

任务有四个标准的事件类型定义:task-create,task-assign,task-start,和task-end。

 

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="yytest">
    
<swimlane name="banker">
        
<assignment expression="user(ernie)"/>
    
</swimlane>
    
<swimlane name="casher">
        
<assignment expression="user(bert)"/>
    
</swimlane>
    
<start-state name="start">
        
<transition name="" to="charge"/>
    
</start-state>
    
<task-node name="charge" signal="first">
        
<task name="bank" swimlane="banker"/>
        
<task name="cash" swimlane="casher"/>
        
<transition name="" to="end"/>
    
</task-node>
    
<end-state name="end"/>
</process-definition>

 

 

private static void run()...{
        JbpmContext jbpmContext 
= jbpmConfiguration.createJbpmContext();
        
try ...{
            
long processInstanceId =1;
            processInstance 
= jbpmContext.loadProcessInstance(processInstanceId);
            Token token 
= processInstance.getRootToken();
            System.out.println(token.getNode());
            token.signal();
            System.out.println(token.getNode());
            List casherTasks 
= jbpmContext.getTaskMgmtSession().findTaskInstances("ernie");
            TaskInstance cashertaskInstance 
= (TaskInstance)casherTasks.get(0);
            cashertaskInstance.start();
            cashertaskInstance.end();
            System.out.println(token.getNode());
            jbpmContext.save(processInstance);
            }
finally ...{
              jbpmContext.close();
            }

    }
    

 

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

输出结果

StartState(start)
TaskNode(charge)
EndState(end)

 

Jbpm 流程节点

1、Node节点 Node节点是一个自动完成节点,如果没有在Node节点上定义Action,流程达到Node节点后不会停留,而是继续往下执行到Node节点的下一个节点。利用之前的Helloworl...

jbpm——task-node节点的signal属性研究

 task-node (任务节点)其性质和node节点一样,在没有task的时候,也都是自动执行,不等待。task-node被归类为一个等待节点,是指在task-node中的task列表中的task没...

java——知识点归纳总结

  • 2011年06月08日 16:12
  • 62KB
  • 下载

ACM知识点——图论讲解

  • 2011年07月26日 11:28
  • 18.18MB
  • 下载

Angular2文档学习的知识点摘要——架构概览、根模块

目录目录 架构概览 模块 组件 模板 元数据Metadata 数据绑定 指令directive 服务 依赖注入 其他重要的Angular特性和服务架构概览 用 Angular 扩展语法编写 HTML ...

iOS开发核心语言Objective C —— 所有知识点总结

1. OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 2. OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 3. O...

测试知识点总结——第一次汇报

  • 2015年09月22日 14:07
  • 571KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jbpm知识点——tasknode
举报原因:
原因补充:

(最多只允许输入30个字)