Activiti基本API操作

部署流程

  • 先在eclipse或者网页版的Activiti中把流程画出来,获得bpmn文件和png图片
  • 部署方法一:
// 获取processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/* 
利用processEngine的getRepositoryService()方法
可以获取一个RepositoryService对象,
再调用其createDeployment()方法
来创建一个deploymentBuilder对象
*/
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService()
                                        .createDeployment();
// 添加bpmn和png文件
deploymentBuilder.addClasspathResource("qjlc.bpmn");
deploymentBuilder.addClasspathResource("qjlc.png"); 
// 部署流程,写入数据库
Deployment deployment = deploymentBuilder.deploy();
  • 部署方法二:
ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
				.getClassLoader().getResourceAsStream("process.zip"));
deploymentBuilder.addZipInputStream(zipInputStream);
deploymentBuilder.name("请假流程部署");
Deployment deployment = deploymentBuilder.deploy();
  • 部署完成之后会在act_re_deployment、act_re_procdef、act_ge_bytearray三张表中插入数据
    • act_re_deployment主要存了流程的名称、部署时间和id等基本信息
    • act_re_procdef存储了比较详细的信息,除了上表的信息之外还包括bpmn和png文件名称、流程分类、流程版本号等信息
    • act_ge_bytearray主要存储部署流程时的文件,将bpmn和png文件以二进制流的方式存储起来

查询已经部署的流程

  • 流程部署查询API
processEngine.getRepositoryService().createDeploymentQuery().list();
processEngine.getRuntimeService().createProcessInstanceQuery().list();
processEngine.getTaskService().createTaskQuery().list();
  • 具体操作
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
DeploymentQuery query = processEngine.getRepositoryService()
                .createDeploymentQuery();
// 添加过滤条件
query.processDefinitionKey("qjlc");
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
// 添加分页查询
query.listPage(0, 10);
// 在调用query.list()方法之前可以添加过滤条件和排序条件
List<Deployment> list = query.list();
for (Deployment deployment : list) {
    String id = deployment.getId();
    System.out.println(id);
}

启动流程实例

  • 根据processDefinitionId来启动
// 对应act_re_procdef的ID_字段,直接找到唯一的流程
String processDefinitionId = "qjlc:0:100"; 
ProcessInstance processInstance = processEngine
                        .getRuntimeService()
                        .startProcessInstanceById(processDefinitionId); 
System.out.println(processInstance.getId());
  • 根据processDefinitionKey来启动
// 对应act_re_procdef的KEY_字段,根据key自动找最近部署的流程的版本
String processDefinitionKey = "qjlc";
ProcessInstance processInstance = processEngine.getRuntimeService()
    .startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId());

查询流程实例

// 操作的是act_ru_execution表,和runtime相关
ProcessInstanceQuery query = processEngine
                            .getRuntimeService()
                            .createProcessInstanceQuery();
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
    System.out.println(pi.getId() + " " + pi.getActivityId());
}

查询个人任务列表

// 操作的是act_ru_task表,和task相关
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "李四";
query.taskAssignee(assignee);
List<Task> list = query.list();
for (Task task : list) {
    System.out.println(task.getId());
}

办理任务

String taskId = "2902";
processEngine.getTaskService().complete(taskId);
发布了22 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28566521/article/details/104003395