工作流中ServiceTask的各种方法
在工作流中的activiti的serviceTask几种方法:
模拟自动执行任务工作流的流程图:
工作流配置:
serviceTaskExpression.bpmn20.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions id="definitions"
- xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:activiti="http://activiti.org/bpmn"
- targetNamespace="Examples">
- <process id="serviceTaskProcess">
- <startEvent id="start" />
- <sequenceFlow id="flow1" sourceRef="start" targetRef="serviceTask" />
- <!-- 调用委托类的依赖注入功能 -->
- <serviceTask id="serviceTask" name="Java service invocation"
- activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
- <extensionElements>
- <activiti:field name="text1">
- <activiti:expression>Welcome to Beijing</activiti:expression>
- </activiti:field>
- <activiti:field name="text2">
- <activiti:expression>Hello Mr. Bai</activiti:expression>
- </activiti:field>
- </extensionElements>
- </serviceTask>
- <sequenceFlow id="flow2" sourceRef="serviceTask" targetRef="serviceTask1" />
- <!-- 调用spring bean中的相关的委托bean -->
- <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
- <sequenceFlow id="flow3" sourceRef="serviceTask1" targetRef="servicetask2" />
- <!-- 调用spring bean中的方法 -->
- <serviceTask id="servicetask2"
- name="My Java Service Task"
- activiti:expression="#{sentenceGenerator.getSentence()}" />
- <sequenceFlow id="flow4" sourceRef="servicetask2" targetRef="servicetask3" />
- <!-- 调用spring bean中的相关的委托bean -->
- <serviceTask id="servicetask3"
- name="Java service invocation"
- activiti:class="com.easyway.activiti.servicetask.ToUppercase">
- <extensionElements>
- <activiti:field name="text" stringValue="Hello World" />
- </extensionElements>
- </serviceTask>
- <sequenceFlow id="flow5" sourceRef="servicetask3" targetRef="endEvent" />
- <endEvent id="endEvent" />
- </process>
- </definitions>
工作流的实现:
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.delegate.DelegateExecution;
- /**
- * 从配置文件注入多个属性类型必须为Expression
- * @author longgangbai
- *
- * 2011-12-20 下午10:08:01
- */
- public class ReverseStringsFieldInjected implements JavaDelegate {
- private Expression text1;
- private Expression text2;
- public void execute(DelegateExecution execution) {
- String value1 = (String) text1.getValue(execution);
- execution.setVariable("var1", new StringBuffer(value1).reverse().toString());
- String value2 = (String) text2.getValue(execution);
- execution.setVariable("var2", new StringBuffer(value2).reverse().toString());
- }
- }
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.delegate.DelegateExecution;
- /**
- * 从配置文件注入一个字符串用于变为写
- * @author longgangbai
- *
- * 2011-12-20 下午09:56:59
- */
- public class ToUppercase implements JavaDelegate {
- private Expression text;
- public void execute(DelegateExecution execution) throws Exception {
- String value1 = (String) text.getValue(execution);
- execution.setVariable("input", value1);
- }
- }
servicetaskSpringTest-context.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
- <bean id="sentenceGenerator" class="com.easyway.activiti.servicetask.SentenceGenerator" />
- <bean id="delegateExpressionBean" class="com.easyway.activiti.servicetask.DelegateExpressionBean">
- <property name="sentenceGenerator" ref="sentenceGenerator" />
- </bean>
- <bean id="sentenceToUpperCaseBean" class="com.easyway.activiti.servicetask.SentenceToUpperCaseBean">
- <property name="sentenceGenerator" ref="sentenceGenerator" />
- </bean>
- <bean id="myExecutionListenerBean" class="com.easyway.activiti.servicetask.ActivitiExecutionListenerBean" />
- <bean id="myTaskListener" class="com.easyway.activiti.servicetask.ActivitiTaskListener" />
- <bean id="myTaskListenerBean" class="com.easyway.activiti.servicetask.ActivitiTaskListenerBean" />
- <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
- <property name="driverClass" value="org.h2.Driver" />
- <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
- <property name="username" value="sa" />
- <property name="password" value="" />
- </bean>
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
- <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
- <property name="dataSource" ref="dataSource" />
- <property name="transactionManager" ref="transactionManager" />
- <property name="databaseSchemaUpdate" value="create-drop" />
- <property name="jobExecutorActivate" value="false" />
- </bean>
- <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
- <property name="processEngineConfiguration" ref="processEngineConfiguration" />
- </bean>
- <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
- <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
- <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
- <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
- <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
- </beans>
测试类:
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.runtime.ProcessInstance;
- import org.activiti.engine.test.Deployment;
- import org.activiti.spring.impl.test.SpringActivitiTestCase;
- import org.springframework.test.context.ContextConfiguration;
- /**
- * 工作流中ServiceTask的各种方法
- * 1.通过activiti:class使用相关的javaDelegate的子类。
- * <serviceTask id="serviceTask" name="Java service invocation"
- activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
- <extensionElements>
- <activiti:field name="text1">
- <activiti:expression>Welcome to Beijing</activiti:expression>
- </activiti:field>
- <activiti:field name="text2">
- <activiti:expression>Hello Mr. Bai</activiti:expression>
- </activiti:field>
- </extensionElements>
- </serviceTask>
- 2.通过spring的使用委派表达式实现
- <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
- 3.通过表达式将实现
- <serviceTask id="servicetask2"
- name="My Java Service Task"
- activiti:expression="#{sentenceGenerator.getSentence()}" />
- 4.通过activiti:class注入相关的属性
- <serviceTask id="servicetask3"
- name="Java service invocation"
- activiti:class="com.easyway.activiti.servicetask.ToUppercase">
- <extensionElements>
- <activiti:field name="text" stringValue="Hello World" />
- </extensionElements>
- </serviceTask>
- * @author longgangbai
- *
- * 2011-12-20 下午09:29:23
- */
- @ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
- public class ServiceTaskExpressionTest extends SpringActivitiTestCase {
- @Deployment(resources={"diagrams/serviceTaskExpression.bpmn20.xml"})
- public void testDelegateExpression() {
- ProcessInstance procInst = runtimeService.startProcessInstanceByKey("serviceTaskProcess");
- assertEquals(true,procInst.isEnded());
- }
- }
原文地址:http://topmanopensource.iteye.com/blog/1319380
- activiti-servicetask.rar (51.7 KB)
- 下载次数: 180
工作流中ServiceTask的各种方法相关推荐
- 在审批工作流中处理NetSuite拒绝原因的好方法
通常,当在NetSuite中通过工作流开发审批流程时,我们会遇到如何处理拒绝的问题. 1.当被拒绝时,记录应该被锁定吗? 2.审批者如何将拒绝原因通知到用户? 3.记录如何返回到审批工作流中? 4.如 ...
- 工作流中的UEL表达式的使用
公共spring配置文件: Xml代码 <?xml version="1.0" encoding="UTF-8"?> <beans xml ...
- 在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员?
在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员? 创建日期:2014年5月20日 阅读次数:8190 案例,如在工作流设置中,设置了智能选人,选人过滤规则为:允许选择 ...
- 工作流中如何返回上一步
动态创建的工作流中,在拒绝本次审批的情况下,返回上一步,如何返回到上一步?谢谢 帮顶,可以换个思路逻辑,如,先给提示,或干脆工作流中断显示 任务节点A 到任务节点B 在B节点记录来源的标识符.例如记录 ...
- stream map方法_Java Stream中map和flatMap方法
最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...
- java中json重复数据结构_JS实现去除数组中重复json的方法示例
本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...
- 继承实现的原理、子类中调用父类的方法、封装
一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...
- 浅谈在ASP.NET中数据有效性校验的方法
作者:未知 作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分. 我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大 ...
- JavaScript文件中调用AngularJS内部方法或改变$scope变量
需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...
最新文章
- 成本预算的四个步骤_干货!如何做好年度培训计划中的预算工作
- html标题前色块,CSS轻松实现色块标题标识
- java scanner_Java Scanner match()方法与示例
- 实际操作更改Linux启动模式
- graphics | 基础绘图系统(四)——柱状图、直方图、扇形图、箱形图和函数图象...
- Hash碰撞的解决方案
- SELinux系列(十三)—默认安全上下文的查询和修改(semanage命令)
- 对于android和iphone计划
- Python模块 - itertools循环器模块
- E - 确定比赛名次(拓补排序)
- Linux之常用操作命令总结一
- 计算机网络结构与数据交换技术
- Codeproject文章翻译
- wifi信号衰减与距离关系_wifi无线信号传输衰减间隔核算公式
- 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
- 新版个人所得税计算python_用 Python 写个2019年专项扣除新个人所得税计算器
- win2003 Enterprise Edition sp2 企业版序列号
- 安卓手机怎么修改图片分辨率?手机怎么提高图片分辨率?
- 大数据流处理的一致性问题与lambda架构优缺点
- supervisor 同时开启多个进程 numprocs 1