工作流-流程部署

流程图:


环境配置:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	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
						http://www.springframework.org/schema/context 
						http://www.springframework.org/schema/context/spring-context-2.5.xsd
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

	<!-- 注册一个流程引擎配置对象 -->
	<bean id="processEngineConfiguration"
		 class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql:///stu"/>
		<property name="jdbcUsername" value="root"/>
		<property name="jdbcPassword" value="123456"/>
		<property name="databaseSchemaUpdate" value="true"/>
	</bean>
	
	<!-- 使用工厂bean创建流程引擎对象 -->
	<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
		<!-- 注入上面的配置对象 -->
		<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
	</bean>
</beans> 

流程部署:act_re_deployment(流程部署表)   act_re_procedef(流程定义表)  act_re_model(流程设计模型表)

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 获取仓库服务
	// 部署流程定义读取单个文件的方式部署流程定义
	@Test
	public void demo1(){
		DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("demo1.bpmn");
		deploymentBuilder.addClasspathResource("demo1.png"); 
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println(deployment.getId());
	}
	// 通过zip的方式部署流程定义
	@Test
	public void demo2(){
		DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
		ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
				.getClassLoader().getResourceAsStream("process.zip"));
		deploymentBuilder.addZipInputStream(zipInputStream);
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println(deployment.getId());
	}

部署信息操作:

// 查询部署信息列表--查询部署表中的数据act_re_deployment
	@Test
	public void demo3(){
		DeploymentQuery mq = processEngine.getRepositoryService().createDeploymentQuery();
		List<Deployment> dyList = mq.list();
		for(Deployment dy: dyList){
			System.out.println(dy.getId());
		}
	}
	
	// 查询流程定义表---查询流程定义act_re_procdef
	@Test
	public void demo4(){
		ProcessDefinitionQuery pdq = processEngine.getRepositoryService().createProcessDefinitionQuery();
		List<ProcessDefinition> pdfList = pdq.list();
		for(ProcessDefinition pd : pdfList){
			System.out.println(pd.getId());
		}
	}
	//act_re_deployment
	@Test
	public void demo5(){
		String deploymentId = "401";
		boolean cascade = true;// 是否级联删除
		processEngine.getRepositoryService().deleteDeployment(deploymentId,
				cascade);
	}

启动流程实例:

启动的同时会在:表 ACT_RE_TASK 和 ACT_RU_EXECUTION 中创建数据:

ACT_RE_TASK : 

字段说明:execution_id_ 实例ID(外键), proc_inst_id_ 流程实例ID  分别关联表ACT_RE_EXECUTION 中的 ID(主键),和proc_inst_id(流程实例ID)。

ACT_RE_EXECUTION:

除了在流程中启动的子流程之外,流程启动之后在表ACT_RU_EXECUTION中的字段ID_PROC_INST_ID_字段值是相同的.

2)  值不相等的情况:

不相等的情况目前只会出现在子流程中(包含:嵌套、引入),例如一个购物流程中除了下单、出库节点之外可能还有一个付款子流程,在实际企业应用中付款流程通常是作为公用的,所以使用子流程作为主流程(购物流程)的一部分。

当任务到达子流程时引擎会自动创建一个付款流程,但是这个流程有一个特殊的地方,在数据库可以直观体现,

两条数据,第二条数据(嵌入的子流程)的PARENT_ID_等于第一条数据的ID_PROC_INST_ID_,并且两条数据的PROC_INST_ID_相同。

还有一点特殊的地方,字段IS_ACTIVE_的值分别是01,说明正在执行子流程主流程挂起

// 启动流程实例
	@Test
	public void demo6(){
		// 根据 act_re_procdef(key) 关键字
		/*String kye="splc";
		ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(kye);*/
		// 根据act_re_procdef(Id) 关键字
		String Id = "GZLC:1:1704";
		ProcessInstance pi =  processEngine.getRuntimeService().startProcessInstanceById(Id);
		System.out.println(pi.getId());
	}
	// 查询流程实例
	@Test
	public void demo7(){
		ProcessInstanceQuery piq = processEngine.getRuntimeService()
				.createProcessInstanceQuery();
		List<ProcessInstance> list = piq.list();
		for (ProcessInstance pi : list) {
			System.out.println(pi.getId());
		}
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值