因为实习会用到activiti的知识,于是学习了activiti。
入门步骤 -> 1.学习相关知识点 -> 2.安装eclipse插件 -> 3.敲实例代码,熟悉代码和数据库。
1.activiti是什么?
activiti是一个用于开发企业协同工作相关业务的框架,开发像下图所示工作流程的系统。
activiti包括一系列的数据库(五种,共21张数据表)和开发用的api。
数据库:
以act_ge开头的表 ---------通用数据表,存放通用信息
以act_re开头的表 --------- 仓库表,存放流程信息,部署信息等。
以act_ru开头的表 --------- 运行表,存放一个流程实例化(就是运行起来)后的相关信息,有任务表,变量表等。
以act_id开头的表 --------- 身份表,存放身份,身份组信息等。
以act_hi开头的表 -------- 历史表,存放历史信息,比如已经完成的任务,或者完成的实例化流程。
api:
RepositoryService类,RuntimeService类,TaskService类,HistoryService类,IdentityService类,ManagementService类。
2.安装eclipse插件
安装插件在网上有很多教程,但是我仍然弄了很久。在安装插件的时候要注意下面几个问题
- 除非翻了墙,不然不要用网络安装,最好下载插件安装。
- 最好用2012一下版本的myeclipse安装,我之前就因为用的2017怎么也安装不上,最后发现是2017已经安装的一个插件与activiti插件冲突。(可以试试解压activiti插件压缩包,将文件中的冲突插件删除再压缩,然后安装,如果不行就卸了安装2012版吧)
3.敲示例代码
网上发现的一个不错的博客,照着敲很快就可以弄懂Activiti进阶(一)——HelloWorld
我在敲完之后将示例代码都保存为了snippets,可以方便后续开发,忘了的时候也可以拿来看看。
snippets的代码如下
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<snippets>
<category filters="*" id="category_1563588489731" initial_state="0" label="Activiti" largeicon="" smallicon="">
<description><![CDATA[Activiti工作流开发相关代码]]></description>
<item category="category_1563588489731" id="item_1563588942171" label="activiti_HistoricProcessInstanceFind">
<description><![CDATA[查询历史实例变量]]></description>
<content><![CDATA[//查询历史实例
// List<HistoricProcessInstance> list = processEngine.getHistoryService()
// .createHistoricProcessInstanceQuery()
// .processDefinitionId("myProcess:5:504")
// .list();
//
// if(list != null && list.size() > 0){
// for(HistoricProcessInstance hp : list){
// System.out.println(hp.getId()+" "+hp.getStartTime()+" "+hp.getEndTime());
// }
// }]]></content>
</item>
<item category="category_1563588489731" id="item_1563588896546" label="activiti_addVariable">
<description><![CDATA[添加流程变量]]></description>
<content><![CDATA[// //添加流程变量
// String processInstanceId = "1501";
// String assignee = "张三";
// TaskService taskService = processEngine.getTaskService();
//
// Task task = taskService.createTaskQuery()
// .processInstanceId(processInstanceId)
// .taskAssignee(assignee)
// .singleResult();
//
// taskService.setVariable(task.getId(), "请假人", assignee);
// taskService.setVariable(task.getId(), "请假天数", 3);
// taskService.setVariable(task.getId(), "请假日期", new Date());]]></content>
</item>
<item category="category_1563588489731" id="item_1563588827866" label="activiti_ProcessDefinitionFind">
<description><![CDATA[查询流程定义]]></description>
<content><![CDATA[//查询流程定义
// List<ProcessDefinition> list = processEngine.getRepositoryService()
// .createProcessDefinitionQuery()
// .processDefinitionKey("myProcess")
// .orderByProcessDefinitionVersion().desc()
// .list();
//
// if(list != null && list.size()>0){
// for(ProcessDefinition pd:list){
// System.out.println("流程定义的ID:"+pd.getId());
// System.out.println("流程定义的名字:"+pd.getName());
// System.out.println("流程定义的Key:"+pd.getKey());
// System.out.println("流程定义的部署ID:"+pd.getDeploymentId());
// System.out.println("流程定义的资源名称:"+pd.getResourceName());
// System.out.println("流程定义的版本:"+pd.getVersion());
// System.out.println("#################################################");
// }
// }]]></content>
</item>
<item category="category_1563588489731" id="item_1563588756642" label="activiti_complete">
<description><![CDATA[activiti完成个人任务]]></description>
<content><![CDATA[// String taskId = "1804";
// Map<String, Object> variables = new HashMap<String, Object>();
// variables.put("message", "重要");
// processEngine.getTaskService().complete(taskId, variables);
// System.out.println("完成任务:"+taskId);]]></content>
</item>
<item category="category_1563588489731" id="item_1563588714298" label="activiti_task">
<description><![CDATA[acitviti查询个人任务]]></description>
<content><![CDATA[// String assignee = "总经理";
// List<Task> tasks = processEngine.getTaskService()
// .createTaskQuery()
// .taskAssignee(assignee)
// .list();
// if(tasks != null && tasks.size() > 0){
// for(Task task:tasks){
// System.out.println("任务ID:"+task.getId());
// System.out.println("任务的办理人:"+task.getAssignee());
// System.out.println("任务名称:"+task.getName());
// System.out.println("任务的创建时间:"+task.getCreateTime());
// System.out.println("流程实例ID"+task.getProcessInstanceId());
// System.out.println("####################################");
// }
// }]]></content>
</item>
<item category="category_1563588489731" id="item_1563588666594" label="acitiviti_instanceInstance">
<description><![CDATA[acitivti实例化进程]]></description>
<content><![CDATA[// String processDefinitionId = "myProcess:9:1705";
// ProcessInstance pi = processEngine.getRuntimeService()
// .startProcessInstanceById(processDefinitionId);
// System.out.println("流程实例ID:" + pi.getId());//流程实例ID:101
// System.out.println("流程实例ID:" + pi.getProcessInstanceId());//流程实例ID:101
// System.out.println("流程定义ID:" + pi.getProcessDefinitionId());//MyProcess:1:4]]></content>
</item>
<item category="category_1563588489731" id="item_1563588614818" label="acitivit_deploy">
<description><![CDATA[acitivit部署]]></description>
<content><![CDATA[// Deployment deployment = processEngine.getRepositoryService()
// .createDeployment()
// .addClasspathResource("diagrams/helloWorld.bpmn")
// .addClasspathResource("diagrams/helloWorld.bmp")
// .deploy();
//
// System.out.println("部署ID:" + deployment.getId());//部署ID:1
// System.out.println("部署时间:" + deployment.getDeploymentTime());//部署时间]]></content>
</item>
<item category="category_1563588489731" id="category_15635884897311563588560524" label="activiti.cfg.xml" snippetProvider="org.eclipse.wst.common.snippets.ui.TextSnippetProvider">
<description><![CDATA[activiti.cfg.xml 的配置模板]]></description>
<content><![CDATA[<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="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
<property name="asyncExecutorActivate" value="false" />
<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>
</beans>]]></content>
</item>
</category>
</snippets>
打开Snippet的View,右键点击Customize,再点import导入上述文件即可。