侧边栏壁纸
  • 累计撰写 46 篇文章
  • 累计创建 38 个标签
  • 累计收到 2 条评论
隐藏侧边栏

Activiti入门

哒卟刘先生
2022-01-10 / 0 评论 / 0 点赞 / 105 阅读 / 4,433 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

最近要用activiti工作流,之前没用过,没办法强撸吧,参考了官方文档感觉比较生涩难懂,又翻了很多博客,加上我们团队小姐姐粘的几页代码,勉强总结一下子,不足请谅解

老规矩,先来波简介

简介

Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

工作流概念:工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

demo准备

知道他是干什么的那么怎么用呢,暂时需要这些东西,先跑跑看看

  1. 环境 我用的是JDK8 ,官方说JDK6+就行
  2. 软件 我用的idea idea的插件没有eclipes的好用
  3. 版本 我这是activiti5的,官网最高本版本是7
  4. 项目管理用的maven 导个依赖就行方便快捷,当然你如果有需要就自己下jar包
  5. tomcat 我用的SpringBoot内嵌tomcat,你们自己玩把。

插件下载

我这里只有idea插件下载教程,eclipes的自己找吧
左上角 file>settings>plugins >Browse Repositories 搜索 "actiBPM"
在这里插入图片描述在这里插入图片描述
下载完成重启idea,然后有这个BPMN File就说明下载好了
在这里插入图片描述

创建demo

创建一个maven工程,我用的SpringBoot。
1,导入依赖。其他依赖自己导,我这只把activity粘出来了

<!--activiti-->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<version>5.21.0</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>5.21.0</version>
		</dependency>

2,配置文件
application.yml文件我就不说了,数据源你自己配
接下来是activity配置文件

@Configuration
public class ActivitiConfig {

    @Autowired
    private DataSource dataSource;
    @Autowired
    private ResourcePatternResolver resourceLoader;

    /**
     * 初始化配置,将创建28张表
     * @return
     */
    @Bean
    public StandaloneProcessEngineConfiguration processEngineConfiguration() {
        StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
        configuration.setDataSource(dataSource);
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.setAsyncExecutorActivate(false);
        return configuration;
    }

    @Bean
    public ProcessEngine processEngine() {
        return processEngineConfiguration().buildProcessEngine();
    }

    @Bean
    public RepositoryService repositoryService() {
        return processEngine().getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService() {
        return processEngine().getRuntimeService();
    }

    @Bean
    public TaskService taskService() {
        return processEngine().getTaskService();
    }

配置了之几个常用组件,后面熟悉了按需可以配置其它

3,画流程图
再resources目录下建个文件夹,new BPMN File
在这里插入图片描述
画图就是右侧图标来过来就行,连线时你将鼠标放到节点中间,变成个圈往另一个节点拉就行,小绿是开始节点,小红是结束节点,这俩必须得有,其它自行翻译。
在这里插入图片描述
点击节点,给他设置id 名字,受理人等信息。老夫给翻译了一下。
在这里插入图片描述
4,测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class OaActivityApplicationTests {

	@Autowired
	RepositoryService repositoryService;
	@Autowired
	RuntimeService runtimeService;
	@Autowired
	TaskService taskService;
	private String processInstanceKey = "test";
	@Test
	public void createLiucheng() {
		System.out.println("--创建流程定义--");
		String processResourceFile = "diagrams/test.bpmn";

		Deployment deploy = repositoryService.createDeployment()
				.addClasspathResource(processResourceFile)
				.name(processInstanceKey)
				.deploy();
		System.out.println("部署ID:" + deploy.getId()); //2501
		System.out.println("部署名称:" + deploy.getName());//test
	}

	@Test
	public void firstLiucheng() {
		System.out.println("--测试步骤--");
		Map<String,Object> property = new HashMap<>();
		property.put("user", "1");
		ProcessInstance pi = runtimeService.startProcessInstanceByKey("test",property);
		System.out.println("流程实例的ProcessInstanceId: "+pi.getId());//5001
		System.out.println("流程实例的ProcessDefinitionKey: "+pi.getProcessDefinitionKey());//test
		System.out.println("流程实例的ProcessDefinitionId: "+pi.getProcessDefinitionId());//test:1:2504
		System.out.println("流程实例的ProcessDefinitionName: "+pi.getProcessDefinitionName());//null
		System.out.println("流程实例的ProcessDefinitionVersion: "+pi.getProcessDefinitionVersion());//null
	}

	@Test
	public void getDaiban() {
		System.out.println("--得到待办--");
		String assignnee = "1";
		String processInstanceId = "5001";
		List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId)
				.taskAssignee(assignnee).list();
		for(Task task:tasks){
			System.out.println("任务id: "+task.getId());//5005
			System.out.println("任务name: "+task.getName());// 测试
			System.out.println("任务formkey: "+task.getFormKey());//null
		}
	}

}

再结合点百度。run

数据库生成的表

Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

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

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

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

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

ACT_GE_*: 通用数据, 用于不同场景下。

总结

这里分享一下官方文档地址,可以去里面参考
Activiti 5.15 用户手册
Activiti 5.16 用户手册
官网Activiti 5 6 7 用户手册

只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰

下篇: activiti API

0

评论区