demo流程目标:刚接触Activiti5,先大致了解下Activiti5的架构,熟悉下开发流程

搭建开发环境

首先给MyEclipse安装Activiti Designer插件,下载网址http://www.activiti.org/designer/archived/

当然也可以在线安装,网址http://www.activiti.org/designer/update

有可能因为版本不兼容安装不上,不过也不要紧,只是小试牛刀,并不影响demo流程的开发,后面会介绍Web版流程设计器

此外,新建一个java project,然后把activiti-explorer\WEB-INF\lib下面的jar包全部导入

设计示例流程

如果已经按安装好了Activiti Designer插件,直接使用就可以了,如果安装失败,先临时下载一个流程的定义文件,参考网址:http://yiyiboy2010.iteye.com/blog/1530924

编写测试代码

工程的代码结构如下:



测试的代码

import java.util.List;

import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.task.Task; public class Test { // 本流程模拟的是某公司2012年实习生招聘流程
// 张三来参加该招聘流程,公司相关负责人负责处理流程
public static void main(String[] args) {
// 加载配置文件
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment().addClasspathResource("resources/diagrams/Interview.bpmn20.xml").deploy();
RuntimeService runtimeService = processEngine.getRuntimeService();
String processId = runtimeService.startProcessInstanceByKey("Interview").getId(); TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
// 得到笔试的流程
System.out.println("***************笔试流程开始***************");
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("人力资源部").list();
for (Task task : tasks) {
System.out.println("人力资源部的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.claim(task.getId(), "张三"); }
System.out.println("张三的任务数量:" + taskService.createTaskQuery().taskAssignee("张三").count());
tasks = taskService.createTaskQuery().taskAssignee("张三").list();
for (Task task : tasks) {
System.out.println("张三的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.complete(task.getId());
}
System.out.println("张三的任务数量:" + taskService.createTaskQuery().taskAssignee("张三").count());
System.out.println("***************笔试流程结束***************"); System.out.println("***************一面流程开始***************");
tasks = taskService.createTaskQuery().taskCandidateGroup("技术部").list();
for (Task task : tasks) {
System.out.println("技术部的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.claim(task.getId(), "李四");
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
for (Task task : tasks) {
System.out.println("李四的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.complete(task.getId());
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
System.out.println("***************一面流程结束***************"); System.out.println("***************二面流程开始***************");
tasks = taskService.createTaskQuery().taskCandidateGroup("技术部").list();
for (Task task : tasks) {
System.out.println("技术部的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.claim(task.getId(), "李四");
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
for (Task task : tasks) {
System.out.println("李四的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.complete(task.getId());
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
System.out.println("***************二面流程结束***************"); System.out.println("***************HR面流程开始***************");
tasks = taskService.createTaskQuery().taskCandidateGroup("人力资源部").list();
for (Task task : tasks) {
System.out.println("技术部的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.claim(task.getId(), "李四");
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
for (Task task : tasks) {
System.out.println("李四的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.complete(task.getId());
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
System.out.println("***************HR面流程结束***************"); System.out.println("***************录用流程开始***************");
tasks = taskService.createTaskQuery().taskCandidateGroup("人力资源部").list();
for (Task task : tasks) {
System.out.println("技术部的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.claim(task.getId(), "李四");
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
for (Task task : tasks) {
System.out.println("李四的任务:name:" + task.getName() + ",id:" + task.getId());
taskService.complete(task.getId());
}
System.out.println("李四的任务数量:" + taskService.createTaskQuery().taskAssignee("李四").count());
System.out.println("***************录用流程结束***************"); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();
System.out.println("流程结束时间:" + historicProcessInstance.getEndTime());
System.exit(0);
}
}

参考网址:http://yiyiboy2010.iteye.com/blog/1530924

这里需要特别说明的是,测试的代码编写好之后,如果要运行,必须有一个Activiti的数据库环境,修改activiti.cfg.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="databaseSchemaUpdate" value="true" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti5" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="admin" />
<property name="jobExecutorActivate" value="true" />
</bean>
</beans>

到这里,demo流程就可以跑起来了,不出意外的话,测试代码都可以正常运行

版权声明:本文为博主原创文章,未经博主允许不得转载。

Activiti5小试牛刀demo流程的更多相关文章

  1. activiti--5 -----------------Activiti 工作流 流程各个步骤所涉及到的表

    ACT_RE_*: 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等). ACT_RU_*: 'RU'表示runtime. 这些运行时的表,包含流程实例 ...

  2. BPMN2新规范与Activiti5

    上世纪九十年代以后,随着WfMC联盟的成立,BPM市场群雄逐鹿如火如荼,工作流技术得到了突飞猛进的发展,其中IBM.Oracle等大型软件厂商在工作流领域各扯大旗割据一方.2011年BPMN2.0新规 ...

  3. 驰骋工作流引擎-流程数据md5加密

    关键字:工作流程数据加密  md5  数据保密流程数据防篡改软加密设置方式: 对工作流引擎的数据加密研究, 流程数据的加密方案与实现过程.输入图片说明需求背景1, 流程数据加密是为了防止流程数据被篡改 ...

  4. 微信小程序开发01-小程序的执行流程是怎么样的?

    前言 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是我们需要做一个Hybrid体系,如果做App,React Native也是不错的选择,但是一定要有完善的分层: ① ...

  5. 支付宝即时到账接口开发 - DEMO讲解

    支付宝即时到帐接口 环境要求 PHP5.0以上,且需要开启curl.openssl. 文档地址: https://doc.open.alipay.com/doc2/detail?treeId=62&a ...

  6. 微信小程序的开发——01小程序的执行流程是怎样的?

    作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...

  7. CCFlow的excel数据源导入Dtl明细表的操作方法以及模版demo

    CCBPM支持通过excel向Dtl明细表(从表)导入数据. 以下,我们以cc的財务报销单demo流程解说详细的操作步骤和模版设计. 导入的操纵步骤: 1.流程发起后,在開始节点导入数据源,点击明细表 ...

  8. 爬虫1:html页面+beautifulsoap模块+get方式+demo

    前言:最近公司要求编写一个爬虫,需要完善后续金融项目的数据,由于工作隐私,就不付被爬的网址url了,下面总结下spider的工作原理. 语言:python:工具:jupyter:    概要:说到爬虫 ...

  9. Java工作流引擎关于数据加密流程(MD5数据加密防篡改)

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统 流程数据加密  md5  数据保密流程数据防篡改 ...

随机推荐

  1. 【内核】探究linux内核,超详细解析子系统

    Perface 前面已经写过一篇<嵌入式linux内核的五个子系统>,概括性比较强,也比较简略,现在对其进行补充说明. 仅留此笔记,待日后查看及补充! Linux内核的子系统 内核是操作系 ...

  2. 【Socket】linux组播技术

    1.mystery引入      1)本学期学了计算机网络,对一些网络底层的东西还是不大了解    2)目前IP网络流行3种通信模式,分别是单播/广播与组播    3)根据Internet关于IP地址 ...

  3. Android下基于SDL的位图渲染(二)理论篇

    理论篇 上一篇中介绍了如何将SDL2源码应用到Android渲染中,实际上SDL本身提供的android-project实现了基于android的c运行时环境,通过上面实践篇的介绍,就是完成这个环境搭 ...

  4. Beginning SDL 2.0(6) 音频渲染及wav播放

    前面几篇关于SDL的文章介绍的是以画面为主,这里介绍下SDL中针对音频播放提供的机制,以及如何应用. 对于音频而言,有几个概念需要事先了解下,采样率.声道数.量化位数,如果你不清楚的话,麻烦先了解下这 ...

  5. Django服务端读取excel文件并且传输到接口

    path_name = "opboss_download_" + str(int(time.time())) + ".csv" print(path_name) ...

  6. flash object实现视频播放效果

    html: <!--视频缩略图开始-->       <div class="fresh-media fresh-type-video">          ...

  7. 【机器学习】粗糙集属性约简算法与mRMR算法的本质区别

    1. 粗糙集属性约简算法仅仅选出属性重要度大的条件加入约减中,没有考虑约简中条件属性相互之间的冗余性,得到的约简往往不是都必要的,即含有冗余属性. 2. mRMR算法则除了考虑特征与类别之间的相关性, ...

  8. weblogic迁移总结

    weblogic使用的数据库时DB2 1. 图形化安装weblogic和域,或者静默安装. 2. 查看环境变量env并修改,修改系统默认语言(根据实际情况) 3. 修改weblogic页面打开较慢问题 ...

  9. 自己动手写Android框架-数据库框架

    大家在工作中基本上都有使用到数据库框架 关系型:ORMLite,GreenDao 对象型:DB4O,Perst 这些数据库用起来都非常的简单,对于我们Android上来说这些数据库足够我们使用了,但是 ...

  10. Linux下 jenkins的安装

    自动代码部署的 jenkins 安装, 第一步,从网上下载jenkins的war包 http://mirrors.jenkins.io/war/2.46/ 第二步:复制到tomcat的编译目录下去编译 ...