在工作流中的activiti的serviceTask几种方法:

模拟自动执行任务工作流的流程图:

工作流配置:

serviceTaskExpression.bpmn20.xml

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="Examples">
  6. <process id="serviceTaskProcess">
  7. <startEvent id="start"  />
  8. <sequenceFlow id="flow1" sourceRef="start" targetRef="serviceTask" />
  9. <!-- 调用委托类的依赖注入功能 -->
  10. <serviceTask id="serviceTask" name="Java service invocation"
  11. activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
  12. <extensionElements>
  13. <activiti:field name="text1">
  14. <activiti:expression>Welcome to Beijing</activiti:expression>
  15. </activiti:field>
  16. <activiti:field name="text2">
  17. <activiti:expression>Hello Mr. Bai</activiti:expression>
  18. </activiti:field>
  19. </extensionElements>
  20. </serviceTask>
  21. <sequenceFlow id="flow2" sourceRef="serviceTask" targetRef="serviceTask1" />
  22. <!-- 调用spring bean中的相关的委托bean -->
  23. <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
  24. <sequenceFlow id="flow3" sourceRef="serviceTask1" targetRef="servicetask2" />
  25. <!-- 调用spring bean中的方法 -->
  26. <serviceTask id="servicetask2"
  27. name="My Java Service Task"
  28. activiti:expression="#{sentenceGenerator.getSentence()}" />
  29. <sequenceFlow id="flow4" sourceRef="servicetask2" targetRef="servicetask3" />
  30. <!-- 调用spring bean中的相关的委托bean -->
  31. <serviceTask id="servicetask3"
  32. name="Java service invocation"
  33. activiti:class="com.easyway.activiti.servicetask.ToUppercase">
  34. <extensionElements>
  35. <activiti:field name="text" stringValue="Hello World" />
  36. </extensionElements>
  37. </serviceTask>
  38. <sequenceFlow id="flow5" sourceRef="servicetask3" targetRef="endEvent" />
  39. <endEvent id="endEvent" />
  40. </process>
  41. </definitions>

工作流的实现:

Java代码  
  1. package com.easyway.activiti.servicetask;
  2. import org.activiti.engine.delegate.DelegateExecution;
  3. /**
  4. * 从配置文件注入多个属性类型必须为Expression
  5. * @author longgangbai
  6. *
  7. * 2011-12-20  下午10:08:01
  8. */
  9. public class ReverseStringsFieldInjected implements JavaDelegate {
  10. private Expression text1;
  11. private Expression text2;
  12. public void execute(DelegateExecution execution) {
  13. String value1 = (String) text1.getValue(execution);
  14. execution.setVariable("var1", new StringBuffer(value1).reverse().toString());
  15. String value2 = (String) text2.getValue(execution);
  16. execution.setVariable("var2", new StringBuffer(value2).reverse().toString());
  17. }
  18. }
Java代码  
  1. package com.easyway.activiti.servicetask;
  2. import org.activiti.engine.delegate.DelegateExecution;
  3. /**
  4. *  从配置文件注入一个字符串用于变为写
  5. * @author longgangbai
  6. *
  7. * 2011-12-20  下午09:56:59
  8. */
  9. public class ToUppercase implements JavaDelegate {
  10. private Expression text;
  11. public void execute(DelegateExecution execution) throws Exception {
  12. String value1 = (String) text.getValue(execution);
  13. execution.setVariable("input", value1);
  14. }
  15. }

servicetaskSpringTest-context.xml

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. <bean id="sentenceGenerator" class="com.easyway.activiti.servicetask.SentenceGenerator" />
  10. <bean id="delegateExpressionBean" class="com.easyway.activiti.servicetask.DelegateExpressionBean">
  11. <property name="sentenceGenerator"  ref="sentenceGenerator" />
  12. </bean>
  13. <bean id="sentenceToUpperCaseBean" class="com.easyway.activiti.servicetask.SentenceToUpperCaseBean">
  14. <property name="sentenceGenerator" ref="sentenceGenerator" />
  15. </bean>
  16. <bean id="myExecutionListenerBean" class="com.easyway.activiti.servicetask.ActivitiExecutionListenerBean" />
  17. <bean id="myTaskListener" class="com.easyway.activiti.servicetask.ActivitiTaskListener" />
  18. <bean id="myTaskListenerBean" class="com.easyway.activiti.servicetask.ActivitiTaskListenerBean" />
  19. <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  20. <property name="driverClass" value="org.h2.Driver" />
  21. <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
  22. <property name="username" value="sa" />
  23. <property name="password" value="" />
  24. </bean>
  25. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  26. <property name="dataSource" ref="dataSource" />
  27. </bean>
  28. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  29. <property name="dataSource" ref="dataSource" />
  30. <property name="transactionManager" ref="transactionManager" />
  31. <property name="databaseSchemaUpdate" value="create-drop" />
  32. <property name="jobExecutorActivate" value="false" />
  33. </bean>
  34. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  35. <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  36. </bean>
  37. <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  38. <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  39. <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  40. <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  41. <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  42. </beans>

测试类:

Java代码  
  1. package com.easyway.activiti.servicetask;
  2. import org.activiti.engine.runtime.ProcessInstance;
  3. import org.activiti.engine.test.Deployment;
  4. import org.activiti.spring.impl.test.SpringActivitiTestCase;
  5. import org.springframework.test.context.ContextConfiguration;
  6. /**
  7. * 工作流中ServiceTask的各种方法
  8. * 1.通过activiti:class使用相关的javaDelegate的子类。
  9. *    <serviceTask id="serviceTask" name="Java service invocation"
  10. activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
  11. <extensionElements>
  12. <activiti:field name="text1">
  13. <activiti:expression>Welcome to Beijing</activiti:expression>
  14. </activiti:field>
  15. <activiti:field name="text2">
  16. <activiti:expression>Hello Mr. Bai</activiti:expression>
  17. </activiti:field>
  18. </extensionElements>
  19. </serviceTask>
  20. 2.通过spring的使用委派表达式实现
  21. <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
  22. 3.通过表达式将实现
  23. <serviceTask id="servicetask2"
  24. name="My Java Service Task"
  25. activiti:expression="#{sentenceGenerator.getSentence()}" />
  26. 4.通过activiti:class注入相关的属性
  27. <serviceTask id="servicetask3"
  28. name="Java service invocation"
  29. activiti:class="com.easyway.activiti.servicetask.ToUppercase">
  30. <extensionElements>
  31. <activiti:field name="text" stringValue="Hello World" />
  32. </extensionElements>
  33. </serviceTask>
  34. * @author longgangbai
  35. *
  36. * 2011-12-20  下午09:29:23
  37. */
  38. @ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
  39. public class ServiceTaskExpressionTest extends SpringActivitiTestCase {
  40. @Deployment(resources={"diagrams/serviceTaskExpression.bpmn20.xml"})
  41. public void testDelegateExpression() {
  42. ProcessInstance procInst = runtimeService.startProcessInstanceByKey("serviceTaskProcess");
  43. assertEquals(true,procInst.isEnded());
  44. }
  45. }

原文地址:http://topmanopensource.iteye.com/blog/1319380

  • activiti-servicetask.rar (51.7 KB)
  • 下载次数: 180

工作流中ServiceTask的各种方法相关推荐

  1. 在审批工作流中处理NetSuite拒绝原因的好方法

    通常,当在NetSuite中通过工作流开发审批流程时,我们会遇到如何处理拒绝的问题. 1.当被拒绝时,记录应该被锁定吗? 2.审批者如何将拒绝原因通知到用户? 3.记录如何返回到审批工作流中? 4.如 ...

  2. 工作流中的UEL表达式的使用

    公共spring配置文件: Xml代码   <?xml version="1.0" encoding="UTF-8"?> <beans xml ...

  3. 在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员?

    在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员? 创建日期:2014年5月20日        阅读次数:8190 案例,如在工作流设置中,设置了智能选人,选人过滤规则为:允许选择 ...

  4. 工作流中如何返回上一步

    动态创建的工作流中,在拒绝本次审批的情况下,返回上一步,如何返回到上一步?谢谢 帮顶,可以换个思路逻辑,如,先给提示,或干脆工作流中断显示 任务节点A 到任务节点B 在B节点记录来源的标识符.例如记录 ...

  5. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  6. java中json重复数据结构_JS实现去除数组中重复json的方法示例

    本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...

  7. 继承实现的原理、子类中调用父类的方法、封装

    一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...

  8. 浅谈在ASP.NET中数据有效性校验的方法

    作者:未知 作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分. 我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大 ...

  9. JavaScript文件中调用AngularJS内部方法或改变$scope变量

    需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...

最新文章

  1. 成本预算的四个步骤_干货!如何做好年度培训计划中的预算工作
  2. html标题前色块,CSS轻松实现色块标题标识
  3. java scanner_Java Scanner match()方法与示例
  4. 实际操作更改Linux启动模式
  5. graphics | 基础绘图系统(四)——柱状图、直方图、扇形图、箱形图和函数图象...
  6. Hash碰撞的解决方案
  7. SELinux系列(十三)—默认安全上下文的查询和修改(semanage命令)
  8. 对于android和iphone计划
  9. Python模块 - itertools循环器模块
  10. E - 确定比赛名次(拓补排序)
  11. Linux之常用操作命令总结一
  12. 计算机网络结构与数据交换技术
  13. Codeproject文章翻译
  14. wifi信号衰减与距离关系_wifi无线信号传输衰减间隔核算公式
  15. 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
  16. 新版个人所得税计算python_用 Python 写个2019年专项扣除新个人所得税计算器
  17. win2003 Enterprise Edition sp2 企业版序列号
  18. 安卓手机怎么修改图片分辨率?手机怎么提高图片分辨率?
  19. 大数据流处理的一致性问题与lambda架构优缺点
  20. supervisor 同时开启多个进程 numprocs 1

热门文章

  1. java 反射 构造方法_Java反射之构造方法反射
  2. 15个最受欢迎的Python开源框架
  3. twisted系列教程十二–为server 增加一个service
  4. 反应堆模式(reactor)
  5. Redis 如何实现主从复制
  6. 栈的顺序存储及实现(一)
  7. DNS域传输漏洞利用总结
  8. 如何在Mac上用汇编语言写HelloWorld
  9. 二维数组子数组矩形和
  10. input全选和取消全选