Activiti工作流基础(Day1108、1112)

框架的环境搭建
1. 类库
2. 安装activiti 流程图插件(eclipse)
   Name: Activiti BPMN 2.0 designer
   Location: http://activiti.org/designer/update/

两种方式创建流程数据库:

第一种方式:用jdbc的方式

@Test
	public void test1() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		config.setJdbcDriver("com.mysql.jdbc.Driver");
		config.setJdbcUrl("jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8");
		config.setJdbcUsername("root");
		config.setJdbcPassword("admin");
		//如果已经有数据库就不创建
		config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		ProcessEngine engin = config.buildProcessEngine();
		System.out.println("流程引擎:"+engin);
	}

第二种方式:用spring托管的方式创建流程数据库:

@Test
	public void test2() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
		ProcessEngine engine = config.buildProcessEngine();
		System.out.println("流程引擎"+engine);
	}

注意要创建一个source folder里面存放activiti的配置文件:

activiti.cfg.xml

<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>
		<property name="jdbcUrl"
			value="jdbc:mysql://localhost:3306/activitidb1818?useUnicode=true&amp;characterEncoding=utf8"></property>
		<property name="jdbcUsername" value="root"></property>
		<property name="jdbcPassword" value="admin"></property>
		<!-- 没有表创建表 -->
		<property name="databaseSchemaUpdate" value="true"></property>
	</bean>

</beans>

db.properties

jdbc.url=jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=admin

log4j.properties

log4j.rootLogger=INFO, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n

接下来在eclipse中Preference->Activiti->Save Actions中勾选Create process definition imagine when saving the diagram

意思是保存流程时保存流程图片

2.创建流程及使用

在config(source folder)中创建floder用来保存创建的Activiti Diagram

在创建的.bpmn文件中绘制流程:

   

RepositoryService    管理流程定义
RuntimeService            执行管理,包括启动、推进、删除流程实例等操作
TaskService            任务管理
HistoryService            历史管理(执行完的数据的管理)
IdentityService            组织机构管理
FormService            一个可选服务,任务表单管理

ProcessEngine 可以获取业务类,业务类使用MyBatis对数据进行持久化操作

getDefaultProcessEngine()方法默认去类路径下找activiti.cfg.xml文件,用来连接数据库

/**
*art_re_procdef 流程定义模板
*act_re_deployment 部署表、
*act_ge_bytearray 存放资源文件(二进制数据)
*act_ru_execution 流程实例执行对象表
*act_hi_taskinst 流程实例历史记录
*act_hi_task 流程实例任务表
*/
public class HelloTest {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	//部署流程定义(模板)
	@Test
	public void deployDB() {
		Deployment deployment = processEngine.getRepositoryService()
		             				.createDeployment()//返回一个部署对象
		             				.name("hello入门程序")
		             				.addClasspathResource("diagram/helloworld.bpmn")
		             				.addClasspathResource("diagram/helloworld.png")
		             				.deploy();
		System.out.println(deployment.getId() + "::" + deployment.getName());
	}
	
	//启动流程实例(具体要处理的流程)
	@Test
	public void startProcess() {
		ProcessInstance pi = processEngine.getRuntimeService()
										 .startProcessInstanceByKey("myProcess");
		System.out.println(pi.getId() + "," +pi.getActivityId());
	}
	
	//查找待办人的任务列表
	@Test
	public void findTaskListByAsignee() {
		String asignee = "zhangsan";
		List<Task> taskList = processEngine.getTaskService()
		             						.createTaskQuery()
		             						.taskAssignee(asignee)
		             						.list();
		for (Task task : taskList) {
			System.out.println(task.getId() + "::" + task.getName() + "::" + task.getAssignee());
		}
	}
	
	//完成任务(推进任务节点)
	@Test
	public void finishTask() {
		String taskId = "604";
		processEngine.getTaskService().complete(taskId );
		System.out.println("完成任务");
	}
	//查看流程定义列表
	@Test
	public void findAllDef() {
		List<ProcessDefinition>list = processEngine.getRepositoryService()
				.createProcessDefinitionQuery()
				.list();
		for(ProcessDefinition pd :list) {
			System.out.println(pd.getId()+":"+pd.getResourceName()+":"+pd.getDiagramResourceName()+":"+ pd.getVersion());
		}
	}
	
	//删除流程定义(强行删除,级联的删除,全部都删)
	@Test
	public void removeProcessDef() {
		String deployment = "1";
		processEngine.getRepositoryService().deleteDeployment(deployment, true);
		System.out.println("删除成功");
	}
	
	//查看流程定义
	@Test
	public void viewPic() throws IOException{
		String deploymentId = "101";
		String resourceName = "";
		List<String> list = processEngine.getRepositoryService()
										 .getDeploymentResourceNames(deploymentId);
		for (String name : list) {
			if (name.indexOf(".png") != -1) {
				resourceName = name;
			}
		}
		InputStream in = processEngine.getRepositoryService()
			      .getResourceAsStream(deploymentId, resourceName);

		File destFile = new File("d:\\" + resourceName);
		// 把Inputstream 另存到  D://
		FileUtils.copyInputStreamToFile(in, destFile);

		System.out.println("图片读取完成");
	}
}

猜你喜欢

转载自blog.csdn.net/sinat_41897556/article/details/84541207