activiti的核心主要就是7种服务,我们针对activiti的一系列操作都是围绕着这7种服务进行的
先看一下这写服务都有什么:
<!-- 7种服务 不一定全部使用 -->
<bean id="repositoryService" factory-bean="processEngine"
factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine"
factory-method="getRuntimeService" />
<bean id="formService" factory-bean="processEngine"
factory-method="getFormService" />
<bean id="identityService" factory-bean="processEngine"
factory-method="getIdentityService" />
<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" />
在activiti的配置中已经定义好了这些服务,使用spring集成之后,就可以直接使用了,
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private FormService formService;
部署流程的其中常用的一种方式(直接使用流程文件和流程图片部署):
Deployment deployment = repositoryService// 流程定义和部署对象相关的Service
.createDeployment()// 创建部署对象
.name(flowname)// 声明流程的名称
.addClasspathResource(bpmnpath)// 加载资源文件,一次只能加载一个文件
.addClasspathResource(pngpath)//
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());// 1
System.out.println("部署时间:" + deployment.getDeploymentTime());
部署流程2(使用压缩包的方式部署):
InputStream in = repositoryService.createDeployment()
.name("qingkuan").getClass().getClassLoader()
.getResourceAsStream("com/workflow/bpmn/qingkuan.zip");
ZipInputStream zipinputstream = new ZipInputStream(in);
Deployment dp = repositoryService.createDeployment()
.name("qingkuanshenqing").addZipInputStream(zipinputstream)
.deploy();
System.out.println("部署id:" + dp.getId());
上面这两种方法算是比较常用的吧,还有适中字符流部署的,这次没用到就不记录了,这里有一个问题,部署文件也好压缩包也好我试了一下,放在src下可以部署成功,放在webroot下边就失败了,暂时还没弄清楚原因,还在寻找解决办法,找到后会贴出来,有知道的小伙伴也可以告知一下,谢谢!
然后是启动流程
public String startFlow(String key, int orderId,
Map<String, Object> variables) {
String objId = key + "." + orderId;//流程id和业务对象id
ProcessInstance pi = runtimeService.startProcessInstanceByKey(key,
objId, variables);//variables用于保存流程变量
System.out.println("---流程实例id-----------" + pi.getId()
+ "-------------");
return pi.getId();
}
查询待办:
List<Task> list = taskService//任务管理相关的Service
.createTaskQuery()//创建任务查询对象
// 查询条件
.taskAssignee(id)//指定个人任务查询,指定登陆用户
.orderByTaskCreateTime().asc()//使用创建时间的升序排列
.list();
if (list != null && list.size() > 0) {
System.out.println("返回当前用户待办列表");
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务的创建时间:" + task.getCreateTime());
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("请款流程ID:" + task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
执行任务(审批),其中的参数taskid就是上面查询待办查出来的任务id:
//执行当前选中任务
public void executionTaskByTaskId(String taskid,
Map<String, Object> variables) {
try {
taskService//任务管理相关的Service
.complete(taskid, variables);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("完成任务:任务ID:" + taskid);
}
输出流程节点绑定的form文件:
我的demo流程中提交申请节点绑定了一个form文件
form文件内容就是一个简单的form:
<table border="0">
<tr>
<td>流程name:</td>
<td><input name="flowname" /></td>
</tr>
<tr>
<td>申请人:</td>
<td><input name="id" /></td>
</tr>
<tr>
<td>请假天数:</td>
<td><input name="days" /></td>
</tr>
<tr>
<td>标题:</td>
<td><input name="content" /></td>
</tr>
</table>
使用formservice输出form文件内容:
// 输出自定义form
public void startFormInput(String taskid) {
try {
Task task = taskService.createTaskQuery().processInstanceId(taskid)
.singleResult();
Object formObj = formService.getRenderedTaskForm(task.getId());
System.out.println("表单内容:" + formObj.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
--------------------------------------------------------------------------------
demo的流程图:
大概就这些,后边的会签、干预等一写操作,正在学习,测试成功后会记录