`
antivir
  • 浏览: 96605 次
  • 来自: ...
社区版块
存档分类
最新评论

tasknode

    博客分类:
  • jbpm
阅读更多

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

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

    由于我们设置了TaskNode的信号为"last-wait",因此只有当所有子流程都完成,主流程的任务实例都被结束,TaskNode才会发送信号,使得主流程能够继续流转至下一个状态,即结束状态。 流程定义XML文件中的配置显示了...

    vue节点教程

    Vue.js 是一款非常流行的前端JavaScript框架,用于构建用户界面。在Vue中,"节点"通常指的是虚拟DOM节点,这是Vue实现高效更新视图的关键技术。虚拟DOM是一种抽象的数据结构,它代表了实际DOM树的一部分,允许Vue在...

    liunx 通用线程池设计思想

    taskNode* node = (taskNode*)task; printf("pthread=%d, sockfd=%d, address=%p\n", (int)pthread_self(), node-&gt;sockfd, task); free(task); // 注意这里的free操作是非常必要的! sleep(1); return; } void...

    华为OD机试C卷- 启动多任务排序(Java & JS & Python & C).md-私信看全套OD代码及解析

    TaskNode *tasks = malloc(numTasks * sizeof(TaskNode)); int *dependencyCounts = malloc(numTasks * sizeof(int)); memset(dependencyCounts, 0, numTasks * sizeof(int)); for (int i = 0; i ; ++i) { ...

    jbpm任务分配管理.doc

    1. 流程执行到TaskNode时,`TaskNode`的`execute()`方法被调用,创建`TaskInstance`。 2. `createTaskInstance()`方法内部会调用`taskInstance.assign(executionContext)`来分配任务。 3. 在`assign(execution...

    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

    - 这个表包含了流程中的各个节点信息,如ID是节点的唯一标识,CLASS指定了节点的类型,例如ProcessState、Decision、TaskNode等。SUBPROCESSDEFINITION字段用于表示子流程模板的ID,ISASYNC表示节点是否支持异步...

    一个jbpm实例说明

    流程定义文件的核心是描述流程的各个阶段,包括start、end、tasknode(任务节点)、fork、join等元素。在报销流程中,start表示流程开始,end表示结束,tasknode分别代表部门主管和总经理的审批环节。 流程定义的...

    工作流动态表单设计图(jbpm)

    6. **TaskNode**:任务节点,与表单关联,表示在流程图中的一个工作节点。`taskNode_formid`和`taskNodeName`表示任务节点的表单ID和名称。 7. **FormInstance**和**ProcessInstance**:两者都是流程执行中的实例...

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

    在示例中,报销审批流程的XML文件定义了开始节点(start)、结束节点(end)以及两个任务节点(tasknode),分别代表部门主管和总经理的审批环节。 2. **JBPM Designer**:JBPM提供了一个集成开发环境,即JBPM ...

    Linux环境下通用线程池设计

    - `taskNode` 结构体用于封装待处理的任务数据,如网络连接的句柄 `sockfd`。 2. **任务处理函数** - `printsd` 函数是一个示例性的任务处理函数,用于演示如何处理一个具体的任务。它接收一个 `taskNode` 类型...

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

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

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

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

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

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

    JBPM数据库表说明

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

    Linux环境下的通用线程池设计

    示例代码展示了线程池中任务节点的定义(`taskNode`)和任务处理函数(`printsd`)。任务节点包含了处理任务所需的参数,例如套接字描述符(`sockfd`),处理函数负责打印相关信息并释放任务节点内存。 通过引入...

    JPDL3.1规范手册[良少]

    TaskNode 任务节点** - **定义**: 使用该阶段处理的任务的名字作为节点名称,而非被管理对象的状态。 - **应用场景**: 当节点代表具体的业务操作或任务时采用此命名方式,如“填写报告”、“审核报告”等。 **...

    jbpm数据库表详解

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

    JBPM数据库表说明.doc

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

Global site tag (gtag.js) - Google Analytics