由于新项目要用到工作流,之前也没接触过,这几天就学了学工作流Activiti。好记性不如烂笔头,在这里记录一下,以后也可以回过头看一看。
概念:我的理解是通过定义流程,启动流程,执行流程等一系列操作,实现业务逻辑。在定义好流程后,会产生两个文件分别是*.bpmn和*.png。
应用场景:比如常见的请假,正规一点的,可能需要好几级领导审批,或者根据不同的请假天数,对应不同的领导签字(后面会发现有了排他网关,实现很方便);费用报销、会议的多人会签等等,都是可以使用工作流来完成。
数据库的支持: activiti的后台是有数据库的支持,所有的表都是以ACT_开头的,第二部分表示表的用途的两个字母标识,用途也和服务的API对应。
下面这些我就直接截图了,码字的话,太多了。网上也都能看到这些表的说明。
表的生成:
有两种方式,(1)通过Java代码实现。(2)通过配置文件实现。这里附上如何配置的(参考b站上面的视频资源),一般都是用配置来实现。
<!-- ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); //连接数据库的配置 processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver"); processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8"); processEngineConfiguration.setJdbcUsername("root"); processEngineConfiguration.setJdbcPassword("root"); /** public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在 public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表 public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表 */ processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); --> <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/activiti?useUnicode=true&characterEncoding=utf8"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value="123456"></property> <!-- 没有表创建表 --> <property name="databaseSchemaUpdate" value="true"></property> </bean>
重点来了!!! 重点来了!!!重点来了!!!
activiti的核心就是ProcessEngine流程引擎对象,所有的操作,都是通过流程引擎来实现的,本篇就讲述几个常用Api。
(1)ProcessEngine(核心)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
(2)RepositoryService(规则相关)
RepositoryService repositoryService = processEngine.getRepositoryService();
(3)RunTimeServicce(运行时)
RuntimeService runtimeService = processEngine.getRuntimeService();
(4)TaskService(用户任务)
TaskService taskService = processEngine.getTaskService();
(5)ProcessDefinition(流程定义对象)
(6)ProcessInstance(流程实例)
下一章我们再说这些api的具体应用。