1、Activity流程启动和终止的方法如下:

/*** 通过 流程的key 启动流程 * @param defintionkey* @param params 包含用户id* @return*/public ProcessInstance startProcessInstanceByKey(String defintionkey, Map<String, Object> params) {//dedmenlopmentProcess(defintionkey);Long userId = Securitys.getAuthenticationUser().getId();//获取当前登录用户id(方法可能不同)if(params == null) {params = new HashMap<String, Object>();}params.put("startUserId", userId.toString());ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(defintionkey, params);return processInstance;}public void dedmenlopmentProcess(String defKey) {    long count = runtimeService.createProcessInstanceQuery().processDefinitionKey(defKey).count();if(count <= 0) {repositoryService.createDeployment().addClasspathResource(/*这里一般放流程路径*/).deploy();}  }/***  完成当前节点* @param taskId* @param params 包含用户id*/public void completeCurrentTask(String taskId, Map<String, Object> params) {taskService.complete(taskId, params);//taskService.claim(taskId, userId);}public void completeTask(Task task, Map<String, Object> variables){runtimeService.setVariablesLocal(task.getExecutionId(), variables);taskService.complete(task.getId());}/*** 该方法我自己用到少* 认领任务  true : 成功!   false: 失败* @param taskId* @param userId* @return*/public boolean claimTheTask(String taskId, String userId) {//Long userId = Securitys.getAuthenticationUser().getId();try {taskService.claim(taskId, userId);return true;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}/*** @see   is Acitiviti* * 根据用户id 获取该用户在某个流程实例的能够接受的任务列表* @param userId* @param pageParams* @return */public List<Task> findTaskByProcessAndCandidate(String userId,String processId){TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(processId).taskCandidateOrAssigned(userId).active();List<Task> resultTask = taskQuery.list();return resultTask;}/*** 激活任务* @param processId*/@AjaxRpcMethodpublic void activeTaskByProcessId(String processId){runtimeService.activateProcessInstanceById(processId);}/*** 挂起任务* @param processId*/@AjaxRpcMethodpublic void suspendTaskByProcessId(String processId){runtimeService.suspendProcessInstanceById(processId);}/*** 完结任务* @param processId*/@AjaxRpcMethodpublic void deleteTaskByProcessId(String processId){runtimeService.deleteProcessInstance(processId, "结束");}

2、接下来就是方法的调用 ,实例进入流程的方法我分开为两步写(实际情况下可以合并的),方法如下:

/*** 第一步* 启动流程* @param user 登录用户* @param commentAccessory 进入流程的实例* @param nextUserId 指定的下一个用户id* @param userIds* @param processName 流程名称* @param resultId* @return*/
public void startOrEnterActiviti(User user, CommentAccessory commentAccessory, String nextUserId,  String processName){Map<String, Object> params = new HashMap<String, Object>();params.put("userId", user.getId().toString());params.put("result", resultId);//通过 流程的key 启动流程 (该方法在上面内容中已写好)ProcessInstance process = startProcessInstanceByKey(processName, params);//根据用户id和流程id 获取该用户在某个流程实例的能够接受的任务列表 (该方法在上面内容中已写好)List<Task> taskList = findTaskByProcessAndCandidate(user.getId().toString(), process.getId());if(taskList.size()>0){Task task = taskList.get(0);params.clear();params.put("userId", nextUserId);params.put("messagerId", user.getId());//完成当前任务(该方法在上面内容中已写好)completeTask(task, params);commentAccessory.setTaskId(task.getId());//在定义的实例中保存任务id   commentAccessory.setProcessId(process.getId());//在定义的实例中保存流程idcommentAccessoryManager.save(commentAccessory);}
}/*** 进入流程(第二步开始)* @param user* @param commentAccessoryId 实例id* @param nextUserId* @return */
public void enterActiviti(User user, Integer commentAccessoryId, String nextUserId) {try {CommentAccessory commentAccessory = commentAccessoryManager.load(commentAccessoryId);String processId = commentAccessory.getProcessId();List<Task> taskList = findTaskByProcessAndCandidate(user.getId().toString(), processId);Map<String, Object> params = new HashMap<String, Object>();if(taskList.size()>0){Task task = taskList.get(0);completeCurrentTask(task.getId(), params);commentAccessory.setTaskId(task.getId());commentAccessoryManager.save(commentAccessory);}} catch (Exception e) {e.printStackTrace();}
}

Activiti技术流程的启动与终止相关推荐

  1. csdn涨薪技术之Linux 启动流程及相关知识

    [文章末尾给大家留下了大量的福利] 基础知识 linux系统的组成 内核(kerner) 根文件系统(rootfs) 内核提供操作系统的功能,根文件系统包含常用的一些工具,这些工具.这些工具的运行离不 ...

  2. 基于Activiti的流程应用开发平台JSAAS-WF V5.3

    第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...

  3. 关于自学activiti开源流程引擎的一点点感悟和代码分享demo教程

    原文:关于自学activiti开源流程引擎的一点点感悟和代码分享demo教程 源代码下载地址:http://www.zuidaima.com/share/1765650437721088.htm 这应 ...

  4. Activiti——管理流程定义(四)

    Activiti--管理流程定义 1.设计流程定义文档 1.1.流程图 1.2.bpmn文件 <?xml version="1.0" encoding="UTF-8 ...

  5. Activiti——工作流程-核心API(二)

    .1 ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式: 在前面看到了两种创建ProcessEngine(流程引擎)的方式(http:/ ...

  6. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. uboot流程——uboot启动流程

    [uboot] (第五章)uboot流程--uboot启动流程 2016年11月07日 20:12:07 阅读数:2230 以下例子都以project X项目tiny210(s5pv210平台,arm ...

  8. agilebpm脑图_干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架

    干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 [干货]基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 前言 在工作中,难免会遇到需要开发基于流程管 ...

  9. 【php内核与扩展开发系列】PHP生命周期---启动、终止与模式

    启动与终止 PHP程序的启动可以看做有两个概念上的启动,终止也有两个概念上的终止.其中一个是PHP作为Apache(拿它举例,板砖勿扔)的一个模块的启动与终止,这次启动PHP会初始化一些必要数据,比如 ...

最新文章

  1. 2.5 亿!华为成立新公司!
  2. Java锁机制学习笔记——synchronized 和 Lock
  3. 过滤注入代码的存储过程
  4. Can't pickle local object 'CDLL.__init__.locals._FuncPtr'
  5. python有道翻译-Python爬去有道翻译
  6. nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
  7. 如何创建字符串(OC)
  8. 2015年 六·一 儿童节——我
  9. ubuntu上安装 ibus Google拼音输入法
  10. ubuntu中使用不同版本cuda(转)
  11. @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面
  12. 自然语言5——初学者书籍
  13. VMware虚拟机迁移到阿里云实操案例
  14. 各类顶尖经典电影500部,先收着,待有空的时候慢慢看吧!
  15. 超级计算机 弦理论,暗能量导致宇宙加速膨胀?弦理论能否帮忙解决?
  16. android系统息屏设置_安卓实现熄屏功能。
  17. 反编译class文件
  18. carto_grapher快速安装避坑指南
  19. 倒装结构(全倒装和部分倒装口诀)
  20. Linux Mint 火狐浏览器改中文

热门文章

  1. 博客评论新规则,望周知
  2. 产业安全公开课:2023年DDoS攻击趋势研判与企业防护新思路
  3. canvas 的 图形组合方式
  4. Mastering ROS for Robotics Programming第二版阅读笔记
  5. c++计算学分绩点代码
  6. 管道疏通在排管时要注意哪些事项?
  7. CListCtrl控件的自绘操作
  8. npm ERR! A complete log of this run can be found in:
  9. Python 中文分词 jieba(小白进)
  10. CS285课程笔记(4)——Exploration Method