因为最近进了一家oa公司,所以不会activti岂不是很尴尬,就看网络资料自己学习了一下activiti
Activiti官网地址:https://www.activiti.org/
首先activiti的运行环境是数据库+activiti提供的jar包,想要拿到这些文件就必须去官网下载对应版本的压缩包
不同版本的插件包需要不同的jdk支持,activiti5.0可以支持到1.6以上,当然,版本越高就会又更多的新功能,这里我下的是5.0.
第一步:把下载的插件包解压,然后导入对应的数据库文件,数据库创建文件放在固定目录下
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
表结构操作:
3.3.1:资源库流程规则表
1) act_re_deployment 部署信息表
2) act_re_model 流程设计模型部署表
3) act_re_procdef 流程定义数据表
3.3.2:运行时数据库表
1) act_ru_execution 运行时流程执行实例表
2) act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
3) act_ru_task 运行时任务节点表
4) act_ru_variable 运行时流程变量数据表
3.3.3:历史数据库表
1) act_hi_actinst 历史节点表
2) act_hi_attachment 历史附件表
3) act_ih_comment 历史意见表
4) act_hi_identitylink 历史流程人员表
5) act_hi_detail 历史详情表,提供历史变量的查询
6) act_hi_procinst 历史流程实例表
7) act_hi_taskinst 历史任务实例表
8) act_hi_varinst 历史变量表
3.3.4:组织机构表
1) act_id_group 用户组信息表
2) act_id_info 用户扩展信息表
3) act_id_membership 用户与用户组对应信息表
4) act_id_user 用户信息表
第二步:安装eclipse(开发工具)的activti图形创建工具插件,自己百度,安装完以后,eclipse是这样的
第三部,创建一个工程,添加数据源配置,这里贴上代码
第四步:在java文件中启动activiti,并让其自动创建所需数据库表格
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
ProcessEngine processEngine = conf.buildProcessEngine();
第五步:创建一张流程图,
每个长方形的图形均为一个流程环节,流程环节可以指定固定的审核人,指定方式为
图中使用的为占位符,在创建流程可以以参数的方式传递,达到动态的效果,同样可以指定一个组的用户,方式为在图中第三行写上组的名称,这样一个族内的所有用户都可以查看操作该流程信息
图中的箭头可以起到分支判断的作用,同样判断条件也可以用占位符的方式传递参数,那么参数是怎么传递的呢?
有两种情况,一种是流程启动时流程环节中的审核人,可以在启动流程时传递:
private ProcessEngine processEngine = null;
@Before
public void befor() {
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
processEngine = conf.buildProcessEngine();
}
/**
* 启动一个流程实例
* 涉及的表:
* act_ru_execution(流程实例表), 管理流程进度
* act_ru_task(任务表), 进行到哪一个流程的哪一个任务, 该由谁完成
*/
@Test
public void test() throws Exception{
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
ProcessEngine processEngine = conf.buildProcessEngine();
//String processDefinitionKey = "myProcess";
//方式一:根据流程定义id启动流程实例
//String processDefinitionId = "qjlc:6:904";
//ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
//方式二:根据流程定义Key启动流程实例 推荐!流程定义有多个版本时会选择最新版本
//ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
Map variables = new HashMap();
variables.put("employeeId", "www"); //请假人
String processId = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess", variables).getId();
System.out.println("启动一个请假人为wdq的流程,id="+processId);
}
其中employeeid为占位符名称,第二种情况就是流程提交时传递箭头分支判断的参数:
private ProcessEngine processEngine = null;
@Before
public void befor() {
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
processEngine = conf.buildProcessEngine();
}
/**完成任务*/
@Test
public void completeTask(){
//任务ID
String taskId = "42501";
//完成任务的同时,设置流程变量,让流程变量判断连线该如何执行
/**
* variables为传递的参数,格式为hahmap
*/
Map variables = new HashMap();
variables.put("day", 8);
variables.put("flag", true); //true为通过 false为不通过
processEngine.getTaskService()//
.complete(taskId,variables);
System.out.println("完成任务:"+taskId);
}
同样,map中的key为占位符名称
最后一步:部署一个流程图
private ProcessEngine processEngine = null;
@Before
public void befor() {
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
processEngine = conf.buildProcessEngine();
}
/**
* 部署一个流程
*/
@Test
public void deploy() {
Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
.createDeployment()//创建部署对象
.name("测试流程2")//声明流程的名称
.addClasspathResource("activiti/MyProcess.bpmn")//加载资源文件,一次只能加载一个文件
.addClasspathResource("activiti/MyProcess.png")//
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());//1
System.out.println("部署名称:"+deployment.getName());
}
部署完以后就可以用相应的代码启动审核运转一个流程啦,提供一下根据用户名称来查询待办任务的代码:
private ProcessEngine processEngine = null;
@Before
public void befor() {
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
processEngine = conf.buildProcessEngine();
}
//查询待办任务(根据处理人姓名)
@Test
public void queryTask(){
// 获得一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti/activiti.cfg.xml", "processEngineConfiguration");
// 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
ProcessEngine processEngine = conf.buildProcessEngine();
//任务的办理人
String assignee="www";
//取得任务服务
TaskService taskService = processEngine.getTaskService();
//创建一个任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
//办理人的任务列表
List list = taskQuery.taskAssignee(assignee).list();
//遍历任务列表
if(list!=null&&list.size()>0){
for(Task task:list){
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务的名称:"+task.getName());
Map variables = new HashMap();
variables.put("flag", false);
processEngine.getTaskService()//
.complete(task.getId(),variables);
System.out.println("完成任务:"+task.getId());
}
}
}
继续学习啦