1. 执行流程实例

1.1. 启动流程实例

说明:流程实例创建后,直接就到开始活动后的第一个活动,不会在开始活动停留。

1.1.1. 示例代码1使用指定key的最新版本的流程定义启动流程实例

ProcessInstance pi = processEngine.getExecutionService()

    .startProcessInstanceByKey(processDefinitionKey);

1.1.2. 示例代码2使用指定key的最新版本的流程定义启动流程实例,并设置一些流程变量

// 准备流程变量

Map<String, Object> variables = new HashMap<String, Object>();

variables.put("申请人", "张三");

variables.put("报销金额", 1000.00);

// 启动流程实例,并设置一些流程变量

ProcessInstance pi = processEngine.getExecutionService()

    .startProcessInstanceByKey(processDefinitionKey, variables);

1.2. 向后执行一步(Signal)

1.2.1. 示例代码1:向后执行一步,使用唯一的outcome离开活动

processEngine.getExecutionService().signalExecutionById(executionId);

1.2.2. 示例代码2:向后执行一步,使用唯一的outcome离开活动,并设置一些流程变量

Map<String, Object> variables = new HashMap<String, Object>();

variables.put("审批结果", "同意");

processEngine.getExecutionService()

  .signalExecutionById(executionId, variables);

1.2.3. 示例代码3:向后执行一步,使用指定的outcome离开活动

String outcome= "to end1";

processEngine.getExecutionService()

  .signalExecutionById(executionId, outcome);

1.2.4. 示例代码4:向后执行一步,使用指定的outcome离开活动,并设置一些流程变量

String outcome= "to end1";

Map<String, Object> variables = new HashMap<String, Object>();

variables.put("审批结果", "同意");

processEngine.getExecutionService()

  .signalExecutionById(executionId, outcome, variables);

1.3. 查询任务

1.3.1. 查询个人任务列表

方式1:TaskService.findPersonalTasks(userId);

方式2:List<Task> list = taskService.createTaskQuery()

      .assignee(userId)

      .list();

// 显示任务信息

for (Task task : taskList) {

  System.out.println("id=" + task.getId()// 任务的id

    + ",name=" + task.getName()// 任务的名称

    + ",assignee=" + task.getAssignee()// 任务的办理人

    + ",createTime=" + task.getCreateTime() // 任务的创建(生成)的时间

    + ",executionId=" + task.getExecutionId());// 任务所属流程实例的id

}

1.3.2. 查询组任务列表

方式1: taskService.findGroupTasks(userId);

方式2: List<Task> list = processEngine.getTaskService()//

        .createTaskQuery()//

        .candidate(userId)//

        .list();

1.4. 完成任务

1.4.1. 正常完成任务(也可以同时设置一些流程变量)

String taskId = "420001";

processEngine.getTaskService().completeTask(taskId);

processEngine.getTaskService().completeTask(taskId, outcome);

processEngine.getTaskService().completeTask(taskId, outcome, variables);

1.4.2. 自行控制任务完成后是否可向后流转

String taskId = "420001";

// 1,设置为false代表:办理完任务后不向后移动(默认为true)

TaskImpl taskImpl = (TaskImpl) processEngine

  .getTaskService().getTask(taskId);

taskImpl.setSignalling(false);

// 2,办理完任务

processEngine.getTaskService().completeTask(taskId);

1.5. 拾取任务

1, TaskService.takeTask(taskId, userId),拾取组任务到个人任务列表中,如果任务有assignee,则会抛异常。

2, processEngine.getTaskService().assignTask(taskId, userId),转交任务给其他人,(如果任务有assignee,则执行这个方法代表重新分配。也可以把assignee设为null表示组任务没有人办理了)

1.6. 设置与获取流程变量

1.6.1. 设置流程变量

1.6.1.1. 方式1:根据 executionId 设置或获取流程变量

ExecutionService.setVariable(executionId, name, value);

Object obj = executionService.getVariable(executionId, "请假人");

1.6.1.2. 方式2:根据 taskId 设置或获取流程变量

TaskService.setVariables(taskId, variables); // 一次设置多个变量

Object obj = executionService.getVariable(executionId, "请假人");

1.6.1.3. 流程变量所支持的值的类型(jBPM User Guide7.2. Variable types

7.2. Variable types

jBPM supports following Java types as process variables:

 java.lang.String

 java.lang.Long

 java.lang.Double

 java.util.Date

 java.lang.Boolean

 java.lang.Character

 java.lang.Byte

 java.lang.Short

 java.lang.Integer

 java.lang.Float

 byte[] (byte array)

 char[] (char array)

 hibernate entity with a long id

 hibernate entity with a string id

 serializable

For persistence of these variable, the type of the variable is checked in the order of this list. The first match will determine how the variable is stored.

1.7. 直接结束流程实例(自己手工结束)

String processInstanceId = "test.10001";

processEngine.getExecutionService()

    .endProcessInstance(processInstanceId, ProcessInstance.STATE_ENDED);

JBPM4.4_执行流程实例的更多相关文章

  1. JBPM4入门——6.流程实例的创建和执行

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  2. JBPM学习(四):执行流程实例

    概念: ProcessInstance,流程实例:代表流程定义的一次执行.如:张三昨天按请假流程请了一次假.一个流程实例包括了所有运行阶段,其中最典型的属性就是跟踪当前节点的指针,如下图. Execu ...

  3. JBPM工作流(五)——执行流程实例

    概念: ProcessInstance,流程实例:代表流程定义的一次执行.如:张三昨天按请假流程请了一次假.一个流程实例包括了所有运行阶段,其中最典型的属性就是跟踪当前节点的指针,如下图. Execu ...

  4. JBPM4.4_管理流程定义

    1. 管理流程定义 没有更新功能 1.1. 部署流程定义 注意区分Deployment与ProcessDefinition 1.1.1. 示例代码1:流程定义有关文件在classpath中 Strin ...

  5. 【JBPM4】查询流程实例当前所在节点

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionServ ...

  6. 【JBPM4】创建流程实例

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionServ ...

  7. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...

  8. JBPM4入门——5.流程定义的发布、查询、删除

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  9. Activiti工作流学习(二)流程实例、执行对象、任务

    一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流 ...

随机推荐

  1. [转帖]Cocos2d-x 3.0rc0 的Win32工程添加CocoStudio库

    转自 http://www.cocoachina.com/bbs/read.php?tid=194668 前天, 在CocoaChina 2014春季大会上, 激动人心的Cocos2d-x 3.0和C ...

  2. C++面向对象程序设计的一些知识点(5)

    摘要:运算符能给程序员提供一种书写数学公式的感觉,本质上运算符也是一种函数,因此有类内部运算符和全局运算符之分,通过重载,运算符的“动作”更加有针对性,编写代码更像写英文文章. 1.C++标准允许将运 ...

  3. 从零开始,跟我一起做jblog项目(三)从Maven到Gradle

    http://www.cnblogs.com/newflydd/p/4972922.html?utm_source=tuicool&utm_medium=referral ********** ...

  4. registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

    问题是tomcat的版本问题,tomcat新检测机制导致的这个问题,换版本可以解决问题,但不建议这么做,租用服务器不是你说换就换的.其实问题根源是BasicDataSource,BasicDataSo ...

  5. jquery ajax參数加点号状态200进error

    今天开发中遇到一个非常恶心的问题: 用jquery中的ajax提交.发现假设參数中有点号的參数.后台正常返回200状态码的情况下也会走到error:function. 1. 參数data: " ...

  6. am335x PDK3.0 设置为单网口配置记录

    原来的配置是双网口的,现在要配置为单网口. 一直以为这个配置是在 make menuconfig 里面, 没想到是在设备树里面. 修改设备树 // vim arch/arm/boot/dts/am33 ...

  7. Java获取web项目路径

    File f = new File(WebPath.class.getResource("/").getPath()); String path = f.getParentFile ...

  8. 一、think in java 第一章

    一.面向对象程序设计方式: 1.万物皆为对象. 将对象视为奇特的变量,它可以存储数据,也可以要求它在自身上执行操作. 2.程序是对象的集合,它们通过发送消息来告知彼此所要做的. 要请求一个对象,就必须 ...

  9. 我的开源主页Blog Lite配置指南

    JinHengyu.github.io --- Blog Lite 0.1.1 好看的东西看多了就会不好看, 简单的东西永远不会难看 GitHub Pages 提供静态网站托管服务的厂商还是很多的, ...

  10. Python python的输入输出

    #-*- coding:utf-8 -*- #屏蔽中文乱码方案一(官方推荐) #这个语句必须顶行写 #屏蔽中文乱码方案二(不建议使用) '''#coding=utf-8 ''' #input(),输入 ...