公共spring配置文件:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  8. http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  9. <!-- 配置数据源 -->
  10. <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  11. <property name="driverClass" value="org.h2.Driver" />
  12. <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
  13. <property name="username" value="sa" />
  14. <property name="password" value="" />
  15. </bean>
  16. <!-- 事务管理器 -->
  17. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  18. <property name="dataSource" ref="dataSource" />
  19. </bean>
  20. <bean id="bean1" class="com.easyway.workflow.activiti.SentenceGenerator" />
  21. <!-- 流程引擎配置对象 -->
  22. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  23. <property name="dataSource" ref="dataSource" />
  24. <property name="transactionManager" ref="transactionManager" />
  25. <property name="jobExecutorActivate" value="false" />
  26. <!-- 数据库的表结构的创建方式 -->
  27. <property name="databaseSchemaUpdate" value="create-drop" />
  28. <!-- 采用自动部署工作流activiti的方式 -->
  29. <property name="deploymentResources" value="classpath*:diagrams/*.bpmn20.xml" />
  30. <!-- 设置需要暴露的bean对象 -->
  31. <property name="beans">
  32. <map>
  33. <entry key="bean1" value-ref="bean1" />
  34. </map>
  35. </property>
  36. </bean>
  37. <!-- 流程引擎对象的创建 -->
  38. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  39. <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  40. </bean>
  41. <!-- 创建各种流程引擎的服务 -->
  42. <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  43. <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  44. <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  45. <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  46. <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  47. </beans>
Java代码  
  1. package com.easyway.workflow.activiti;
  2. /**
  3. *
  4. *  工作流中的activiti中的UEL的两种用法要求:
  5. *  1.UEL使用的bean必须为spring暴露给activiti的bean。
  6. *  2.如果采用方法必须为public
  7. *   <!--访问方法表达式  -->
  8. *   <serviceTask id="serviceTask" activiti:expression="${bean1.getSentence()}"  />
  9. *  3.如果采用属性方位则必须为属性提供getter/setter方法
  10. *     <!-- 访问属性的表达方式的 -->
  11. *    <serviceTask id="serviceTask2" activiti:expression="${bean1.level}" />
  12. *
  13. *
  14. * @author longgangbai
  15. *
  16. * 2011-12-18  下午09:48:36
  17. */
  18. public class SentenceGenerator {
  19. private String level;
  20. /**
  21. * @return the level
  22. */
  23. public String getLevel() {
  24. return level;
  25. }
  26. /**
  27. * @param level the level to set
  28. */
  29. public void setLevel(String level) {
  30. this.level = level;
  31. }
  32. public String getSentence() {
  33. return "Activiti BPMN 2.0 process engine";
  34. }
  35. }

实例一:

配置:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions id="definitions"
  3. xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  4. xmlns:activiti="http://activiti.org/bpmn"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. targetNamespace="bankService">
  7. <!-- 全局共享变量是设置 -->
  8. <process id="springexclusiveGateway">
  9. <startEvent id="theStart" />
  10. <!-- 共享通道 -->
  11. <exclusiveGateway id="fork"  name="abc">
  12. <documentation> 可以理解为多种方式都可以达到目的地,但是适合自己的只有一条</documentation>
  13. </exclusiveGateway>
  14. <exclusiveGateway id="join" name="abc" />
  15. <sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" />
  16. <sequenceFlow id="flow2" sourceRef="fork" targetRef="receivePayment" >
  17. <!-- 使用xsi之前必须在命名空间中导入 xsi -->
  18. <conditionExpression xsi:type="tFormalExpression">${paymentReceived == false}</conditionExpression>
  19. </sequenceFlow>
  20. <sequenceFlow  id="flow3"  sourceRef="fork" targetRef="shipOrder" >
  21. <conditionExpression xsi:type="tFormalExpression">${shipOrder == true}</conditionExpression>
  22. </sequenceFlow>
  23. <userTask id="receivePayment" name="Receive Payment" />
  24. <sequenceFlow id="flow4" sourceRef="receivePayment" targetRef="join" />
  25. <userTask id="shipOrder" name="Ship Order" />
  26. <sequenceFlow id="flow5" sourceRef="shipOrder" targetRef="join" />
  27. <sequenceFlow id="flow6" sourceRef="join" targetRef="archiveOrder" />
  28. <!-- 指定特定用户组中的特定的用户处理任务 -->
  29. <userTask id="archiveOrder" name="Archive Order" >
  30. <potentialOwner>
  31. <resourceAssignmentExpression>
  32. <formalExpression>user(kermit), group(management)</formalExpression>
  33. </resourceAssignmentExpression>
  34. </potentialOwner>
  35. </userTask>
  36. <sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" />
  37. <endEvent id="theEnd" />
  38. </process>
  39. </definitions>

代码:

Java代码  
  1. package com.easyway.workflow.activiti;
  2. import java.util.HashMap;
  3. /**
  4. *
  5. *  <exclusiveGateway id="fork"  name="abc"/>
  6. *  可以理解为多种方式都可以达到目的地,但是适合自己的只有一条
  7. *
  8. *      <!-- 指定特定用户组中的特定的用户处理任务 -->
  9. <userTask id="archiveOrder" name="Archive Order" >
  10. <potentialOwner>
  11. <resourceAssignmentExpression>
  12. <formalExpression>user(kermit), group(management)</formalExpression>
  13. </resourceAssignmentExpression>
  14. </potentialOwner>
  15. *
  16. *
  17. *  全局属性的使用
  18. *
  19. *
  20. * @author longgangbai
  21. *
  22. * 2011-12-18  下午10:33:15
  23. */
  24. public class SpringExclusiveGateway {
  25. public static void main(String[] args) {
  26. //加载spring配置和工作流流程处理配置
  27. ApplicationContext ctx=new ClassPathXmlApplicationContext("application-context-expression.xml");
  28. //工作流相关的各种服务
  29. HistoryService historyService=(HistoryService)ctx.getBean("historyService");
  30. RuntimeService runtimeService=(RuntimeService)ctx.getBean("runtimeService");
  31. TaskService taskService=(TaskService)ctx.getBean("taskService");
  32. //设置调用流程过程中使用的参数
  33. HashMap<String, Object> variableMap = new HashMap<String, Object>();
  34. variableMap.put("paymentReceived", true);
  35. variableMap.put("shipOrder", true);
  36. //流程实例对象
  37. ProcessInstance pi = runtimeService.startProcessInstanceByKey("springexclusiveGateway",variableMap);
  38. TaskQuery query = taskService.createTaskQuery()
  39. .processInstanceId(pi.getId())
  40. .orderByTaskName()
  41. .asc();
  42. List<Task> tasks = query.list();
  43. System.out.println("tasksize ="+tasks.size());
  44. Task task = tasks.get(0);
  45. System.out.println("Ship Order ="+task.getName());
  46. }
  47. }

实例二:

配置:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions id="definitions"
  3. xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  4. xmlns:activiti="http://activiti.org/bpmn"
  5. targetNamespace="Expressions">
  6. <process id="limitedExpressionProcess">
  7. <startEvent id="start" />
  8. <sequenceFlow id="flow1" sourceRef="start" targetRef="serviceTask" />
  9. <!--访问方法表达式  -->
  10. <serviceTask id="serviceTask" name="定期会议开始" activiti:expression="${bean1.getSentence()}"  >
  11. </serviceTask>
  12. <sequenceFlow id="flow2" sourceRef="serviceTask" targetRef="userTask" />
  13. <userTask id="userTask" name="会议中....." />
  14. <sequenceFlow id="flow3" sourceRef="userTask" targetRef="serviceTask2" />
  15. <!-- Using bean that is available in app-context, but not mentioned in beans -->
  16. <!-- 访问属性的表达方式的 -->
  17. <serviceTask id="serviceTask2" name="定期会议结束...." activiti:expression="${bean1.level}" />
  18. <sequenceFlow id="flow4" sourceRef="serviceTask2" targetRef="end" />
  19. <endEvent id="end" />
  20. </process>
  21. </definitions>

代码:

Java代码  
  1. /**
  2. package com.easyway.workflow.activiti;
  3. import java.util.List;
  4. /**
  5. * 测试工作流中的UEL表达式的使用
  6. *
  7. * @author longgangbai
  8. *
  9. * 2011-12-18  下午07:35:29
  10. */
  11. public class SpringLimitedExpressionActiviti {
  12. public static void main(String[] args) throws InterruptedException {
  13. //加载spring配置和工作流流程处理配置
  14. ApplicationContext ctx=new ClassPathXmlApplicationContext("application-context-expression.xml");
  15. //工作流相关的各种服务
  16. HistoryService historyService=(HistoryService)ctx.getBean("historyService");
  17. RuntimeService runtimeService=(RuntimeService)ctx.getBean("runtimeService");
  18. TaskService taskService=(TaskService)ctx.getBean("taskService");
  19. //流程实例对象
  20. ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("limitedExpressionProcess");
  21. //查询当前任务数据
  22. System.out.println("处理任务之前:"+runtimeService.createProcessInstanceQuery().count());
  23. List<Task> taskList=taskService.createTaskQuery().list();
  24. //手动分配代办任务
  25. for (Task task : taskList) {
  26. taskService.claim(task.getId(), "kermit");
  27. }
  28. //手动处理完成任务
  29. for (Task task : taskList) {
  30. taskService.complete(task.getId());
  31. }
  32. //检查剩余任务数
  33. System.out.println("处理任务之前:"+taskService.createTaskQuery().count());
  34. // verify that the process is actually finished
  35. //验证流程是否处理完毕
  36. HistoricProcessInstance historicProcessInstance =
  37. historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
  38. System.out.println("Process instance end time: " + historicProcessInstance.getEndTime());
  39. //6分钟时间等待第二次执行
  40. Thread.sleep(6*60*1000);
  41. }
  42. }

实例三

配置:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions id="definitions"
  3. xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  4. xmlns:activiti="http://activiti.org/bpmn"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. targetNamespace="bankService">
  7. <process id="springparallelGateway">
  8. <startEvent id="theStart" />
  9. <sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" />
  10. <parallelGateway id="fork" >
  11. <documentation> 理解为多种方式都可以到达目的地,并行的互不干涉,进度</documentation>
  12. </parallelGateway>
  13. <sequenceFlow sourceRef="fork" targetRef="receivePayment" />
  14. <sequenceFlow sourceRef="fork" targetRef="shipOrder" />
  15. <!-- 给特定用户分配任务 -->
  16. <userTask id="receivePayment" name="Receive Payment" >
  17. <humanPerformer>
  18. <resourceAssignmentExpression>
  19. <formalExpression>kermit</formalExpression>
  20. </resourceAssignmentExpression>
  21. </humanPerformer>
  22. </userTask>
  23. <sequenceFlow sourceRef="receivePayment" targetRef="join" />
  24. <userTask id="shipOrder" name="Ship Order" />
  25. <sequenceFlow sourceRef="shipOrder" targetRef="join" />
  26. <parallelGateway id="join" />
  27. <sequenceFlow sourceRef="join" targetRef="archiveOrder" />
  28. <userTask id="archiveOrder" name="Archive Order" />
  29. <sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" />
  30. <endEvent id="theEnd" />
  31. </process>
  32. </definitions>

代码:

Java代码  
  1. /**
  2. package com.easyway.workflow.activiti;
  3. import java.util.List;
  4. /**
  5. * 测试工作流中的UEL表达式的使用
  6. *
  7. *     <parallelGateway id="fork" />
  8. *     理解为多种方式都可以到达目的地,并行的互不干涉,进度
  9. *
  10. *     <!-- 给特定用户分配任务 -->
  11. <userTask id="receivePayment" name="Receive Payment" >
  12. <humanPerformer>
  13. <resourceAssignmentExpression>
  14. <formalExpression>kermit</formalExpression>
  15. </resourceAssignmentExpression>
  16. </humanPerformer>
  17. </userTask>
  18. *
  19. * @author longgangbai
  20. *
  21. * 2011-12-18  下午07:35:29
  22. */
  23. public class SpringParallelExpressionActiviti {
  24. public static void main(String[] args) throws InterruptedException {
  25. //加载spring配置和工作流流程处理配置
  26. ApplicationContext ctx=new ClassPathXmlApplicationContext("application-context-expression.xml");
  27. //工作流相关的各种服务
  28. HistoryService historyService=(HistoryService)ctx.getBean("historyService");
  29. RuntimeService runtimeService=(RuntimeService)ctx.getBean("runtimeService");
  30. TaskService taskService=(TaskService)ctx.getBean("taskService");
  31. //流程实例对象
  32. ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("springparallelGateway");
  33. TaskQuery query = taskService.createTaskQuery()
  34. .processInstanceId(processInstance.getId())
  35. .orderByTaskName()
  36. .asc();
  37. List<Task> tasks = query.list();
  38. System.out.println(tasks.size());
  39. Task task1 = tasks.get(0);
  40. System.out.println("Receive Payment ="+ task1.getName());
  41. Task task2 = tasks.get(1);
  42. System.out.println("Ship Order"+task2.getName());
  43. //查看指定人的任务
  44. List<Task> kermittasks = taskService.createTaskQuery().taskAssignee("kermit").list();
  45. System.out.println("kermit task number  ="+ kermittasks.size());
  46. }
  47. }

工作流中的UEL表达式的使用相关推荐

  1. uel表达式 字符串截取_(4)activiti工作流引擎之uel表达式

    有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来? 这里就需要使用到activiti启动流程实例时设置一个流程实例的busines ...

  2. uel表达式 字符串截取_activiti工作流引擎之uel表达式

    qq讨论群:313032825 本人做了一个微信公众号,用于分享各类视频学习资源和我多年学习经验,喜欢的可以关注哦! 有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采 ...

  3. Springboot整合Activity7:任务,历史任务,UEL表达式(二)

    Springboot整合Activity7:任务,历史任务,UEL表达式(二) 任务 介绍 属性介绍 案例 历史任务 介绍 代码 UEL表达式 介绍 代码 任务 介绍 1. 就是对BPMN业务图中的任 ...

  4. 工作流中ServiceTask的各种方法

    在工作流中的activiti的serviceTask几种方法: 模拟自动执行任务工作流的流程图: 工作流配置: serviceTaskExpression.bpmn20.xml Xml代码   < ...

  5. activiti个人任务分配,UEL表达式,监听器分配,任务查询

    文章目录 一.个人任务 1..分配任务负责人 1.1.固定分配 1.2.表达式分配 1.2.1.UEL 表达式 1)UEL-value 定义 2)UEL-method 方式 3)UEL-method ...

  6. Activity的UEL 表达式

    Activiti 使用 UEL 表达式,UEL 是 java EE6 规范的一部分,UEL(Unified Expression Language)即统一表达式语言,activiti 支持两个 UEL ...

  7. Activiti UEL表达式是如何与Spring 的容器整合起来的

    Activiti UEL 表达式 UEL表达式到底是什么呢? UEL是java EE6规范的一部分,UEL(Unified Expression Language)即统一表达式语言,activiti支 ...

  8. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系

    switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...

  9. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

最新文章

  1. C语言char*s 4,求讲解几道C语言的题 52 声明语句为“char s[4][15],*p1,**p2;int x,*y;”,下列语句中正...
  2. List Control Utility
  3. 乌班图linux配置yum仓库,Linux系统的仓库配置(yum、epel)与软件安装(wireshark,wget,nginx)...
  4. 拼接 结果集_MetaQuast:评估宏基因组拼接
  5. 基于图的图像分割(Graph-Based Image Segmentation)
  6. vue音乐项目歌手页面滚动、吸顶效果
  7. Git for windows 配置
  8. PHP+Mysql+jQuery找回密码
  9. Itextpdf5 基础知识
  10. js获取浏览器内各种高度宽度总结
  11. 使用python刷访问量
  12. 软件更新(2005.06.04)
  13. 历经30年,仍未解决通讯难题,水下机器人是虚假繁荣吗?
  14. 大数据营销在旅游行业的应用方案
  15. 如何用java判断进程是否假死_Spring Boot假死诊断实战记录
  16. 超级任天堂模拟器 bsnes 开发者自杀(文末附模拟器及ROM)
  17. 笨方法学Python笔记(6)
  18. java 有意思面试题_一道有趣的Java面试题
  19. 寇祖伟:释永信让我更加佛心向前!
  20. Python 实现 周志华 《机器学习》 BP算法

热门文章

  1. 小森动画回忆录(二)-设计角色-哆啦A梦篇
  2. 高项 04 项目变更管理
  3. Hello,World!向世界问好
  4. kettle spoon 数据同步
  5. Inno Setup 制作自动安装脚本
  6. 16、iOS屏幕等比例适配
  7. greendao连接mysql_GreenDao深入
  8. python统计占比
  9. 安装双系统windows10+ubuntu后,windows系统听不到声音
  10. Python根据用户输入的2进制字符串转8进制