activiti学习(二)------核心服务使用

本文介绍了Activiti的七大核心服务,并展示了在Spring环境中如何集成与使用这些服务。通过一个包含申请节点并绑定了form文件的简单流程实例,阐述了启动流程的过程。流程图显示了流程的基本结构,后续将探讨更复杂的会签和干预操作。

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的流程图:


大概就这些,后边的会签、干预等一写操作,正在学习,测试成功后会记录



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值