activiti工作流快速上手

使用步骤

1个插件

在Eclipse中安装activiti插件,通过插件新建Activiti Diagram文件,进行工作流设计
在这里插入图片描述
在这里插入图片描述
附上离线插件安装包: activiti-designer-5.14.1.zip

1个引擎

ProcessEngine对象,Activiti 工作流引擎。这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

所有的操作都是从获取引擎开始的,所以一般会把引擎作为全局变量

ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();

1个配置文件

activiti-context.xml.Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数.

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
	xmlns:osgi="http://www.springframework.org/schema/osgi"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/cache  
    http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
    http://www.springframework.org/schema/osgi-compendium 
    http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
    http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
	xmlns:p="http://www.springframework.org/schema/p">

	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<property name="jdbcUrl">
			<value>jdbc:mysql://主机名:3306/test2?<![CDATA[useUnicode=true&characterEncoding=utf-8]]></value>
		</property>
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="密码" />
		<property name="databaseSchemaUpdate" value="true" />
		<property name="databaseSchema" value="ACTIVITI"></property>
		<!-- 生成流程图的字体 -->
		<property name="activityFontName" value="宋体" />
		<property name="labelFontName" value="宋体" />
	</bean>
	
	<bean id="processEngine"
		class="org.activiti.spring.ProcessEngineFactoryBean">
		<property name="processEngineConfiguration"
			ref="processEngineConfiguration" />
	</bean>

	<bean id="repositoryService" factory-bean="processEngine"
		factory-method="getRepositoryService" />
		
	<bean id="runtimeService" factory-bean="processEngine"
		factory-method="getRuntimeService" />
		
	<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" />
		
	<bean id="formService" factory-bean="processEngine"
		factory-method="getFormService" />
</beans>

1次初始化

ProcessEngines.init();

生成23张数据库表

5种数据库表

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。

ACT_RE_*: 'RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。

ACT_RU_*: 'RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

ACT_ID_*: 'ID’表示identity。 这些表包含身份信息,比如用户,组等等。

ACT_HI_*: 'HI’表示history。 这些表包含历史数据,比如历史流程实例,变量,任务等等。

ACT_GE_*: 通用数据,用于不同场景下,如存放资源文件。

23张表

在这里插入图片描述
灰色选中的部分就是自动生成的表.

7项Service

  1. repositoryService:流程仓库service,用于管理流程仓库,增删改查流程资源.
  2. runtimeService:运行时service,处理正在运行状态的流程实例,任务等.
  3. taskService:任务service,管理,查询任务,例如办理业务,指派代理人,
  4. historyService:历史service,可以查询所有历史数据,例如,流程实例,任务,活动,变量,附件等。
  5. managementService:引擎管理service,和具体业务无关,主要是查询引擎配置,数据库,作业等。
  6. identityService:身份service,可以管理和查询用户,组之间的关系
  7. formService:表单service,处理正在运行状态的流程实例,任务等。

常用基本操作

设计流程图(各种组件,如连线、用户任务、网关)

进入diagram文件进行设置.

  1. 修改文件id
    在这里插入图片描述
  2. 画好工作流,设置代理人
    在这里插入图片描述
流程定义增删改查

可视化增删改查,不截图了

流程变量增删改查

使用el表达式就好.

启动流程定义
	// 部署流程图,负责流程的部署和抓取对应的流程图
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		RepositoryService repositoryService = processEngine.getRepositoryService();
		DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
		//写你自己的文件路径
		deploymentBuilder.addClasspathResource("com/qianfeng/workflow/resources/ask.bpmn");
		deploymentBuilder.deploy();
任务增删改查

添加任务:


	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		// runtimeService 启动流程相关的操作 获取流程实例的操作
		RuntimeService runtimeService = processEngine.getRuntimeService();
		Map<String, Object> map = new HashMap<>();
		map.put("inputuser", "部门经理1");
		// 通过流程变量 员工角色
		// 这里的key要与流程图的Id保持一致
		map.put("role", "staff");
		map.put("pass","yes");
		runtimeService.startProcessInstanceByKey("ask", map);

查询代理人持有的任务:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskServer = processEngine.getTaskService();
		List<Task> tasks = taskServer.createTaskQuery().taskAssignee("部门经理1").list();
		for (Task task : tasks) {
			System.out.println("taskID:" + task.getId());
			System.out.println("流程实例ID:" + task.getProcessInstanceId());
			System.out.println("流程定义ID:" + task.getProcessDefinitionId());
			System.out.println("创建时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(task.getCreateTime()));
		}

完成当前任务,并将任务交给下一个代理人:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskServer = processEngine.getTaskService();
		List<Task> tasks = taskServer.createTaskQuery().taskAssignee("部门经理1").list();
		for (Task task : tasks) {
			System.out.println("taskID:" + task.getId());
			System.out.println("流程实例ID:" + task.getProcessInstanceId());
			System.out.println("流程定义ID:" + task.getProcessDefinitionId());
			System.out.println("创建时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(task.getCreateTime()));
		}

完成任务的同时添加批注,并将任务交给下一个代理人:

	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		taskService.addComment("7508", "7505", "yes", "好的");
		taskService.complete("7508");

查看流程实例的批注:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		List<Comment> comments = taskService.getProcessInstanceComments("");
		for (Comment comment : comments) {
			System.out.println(comment.getFullMessage());
			System.out.println(comment.getType());
		}

删除流程实例,根据部署ID删除

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		// 写下true就是删除 部署流程相关的数据
		processEngine.getRepositoryService().deleteDeployment("deploymentId", true);

通过Controller将当前工作流显示在工作流图片中

ask.png
在这里插入图片描述


    	@RequestMapping(params = "method=getProcessModel", method = RequestMethod.GET)
	public String getProcessModel(ModelMap model, String taskid) {
		// 根据taskid获取到task实例再获得到流程实例ID 流程定义ID
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		Task task = processEngine.getTaskService().createTaskQuery().taskId(taskid).singleResult();
		String processinstanceid = task.getProcessInstanceId();
		String processDefinitionId = task.getProcessDefinitionId();

		ProcessInstance processInstance = ProcessEngines.getDefaultProcessEngine().getRuntimeService()
				.createProcessInstanceQuery().processInstanceId(processinstanceid).singleResult();

		ProcessDefinition processDefinition = ProcessEngines.getDefaultProcessEngine().getRepositoryService()
				.getProcessDefinition(processDefinitionId);

		ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) processDefinition;
		ActivityImpl activityImpl = processDefinitionEntity.findActivity(processInstance.getActivityId());
		model.put("deploymentId", processDefinition.getDeploymentId());
		model.put("imageName", processDefinition.getDiagramResourceName());
		model.put("width", activityImpl.getWidth());
		model.put("height", activityImpl.getHeight());
		model.put("x", activityImpl.getX());
		model.put("y", activityImpl.getY());
		return "image";

	}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值