activity工作流引擎

activity工作流引擎工作流activity引擎入门案例1、工作流是什么?简单来说工作流就是将一条信息根据角色、分工、条件不同进行固定的向上传递,数据是按照固定的流向进行传输,一级一级传递下去,这种场景在OA,CRM/ERP中应用的比较多。通常这种操作自己本身也可以通过逻辑来实现,但是复杂度很高。而且不方便维护。所以通常都采用第三方引擎框架来实现,出了引擎本身简化了操作以外。更重要的是维护起来很方便。2、…

大家好,又见面了,我是你们的朋友全栈君。

工作流activity引擎入门案例

1、工作流是什么?
简单来说工作流就是将一条信息根据角色、分工、条件不同进行固定的向上传递,数据是按照固定的流向进行传输,一级一级传递下去,这种场景在OA , CRM / ERP中应用的比较多。通常这种操作自己本身也可以通过逻辑来实现,但是复杂度很高。而且不方便维护。所以通常都采用第三方引擎框架来实现,出了引擎本身简化了操作以外。更重要的是维护起来很方便。

2、activity工作流引擎
activity是一个比较简单容易上手的工作流,主要操作分为一下步骤

  • 利用activity插件画出需要的逻辑流程图
  • 部署流程
  • 启动流程
  • 迭代处理流程
  • 流程结束

3、activity环境搭建
1、新建一个maven项目
在这里插入图片描述
2、导入maven依赖

  <dependencies> 
    <dependency> 
      <groupId>org.mortbay.jetty</groupId>  
      <artifactId>jetty-util</artifactId>  
      <version>${jetty.version}</version>  
      <scope>provided</scope> 
    </dependency>  
    <dependency> 
      <groupId>org.mortbay.jetty</groupId>  
      <artifactId>jetty-management</artifactId>  
      <version>${jetty.version}</version>  
      <scope>provided</scope> 
    </dependency>  
    <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>  
    <dependency> 
      <groupId>org.codehaus.groovy</groupId>  
      <artifactId>groovy-all</artifactId>  
      <version>2.4.3</version> 
    </dependency>  
    <dependency> 
      <groupId>org.slf4j</groupId>  
      <artifactId>slf4j-api</artifactId>  
      <version>1.7.6</version> 
    </dependency>  
    <dependency> 
      <groupId>org.slf4j</groupId>  
      <artifactId>slf4j-jdk14</artifactId>  
      <version>1.7.6</version> 
    </dependency>  
    <dependency> 
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>3.8.1</version>  
      <scope>test</scope> 
    </dependency>  
    <dependency> 
      <groupId>mysql</groupId>  
      <artifactId>mysql-connector-java</artifactId>  
      <version>5.1.38</version> 
    </dependency> 
  </dependencies>  

3、安装画图插件,本操作比较简单, 百度能收到,建议采用离线安装
略。。。。。。。。。。。
4、activity是一套完成的体系,包含各种操作和数据库表都由框架本身提供,所以第一步先导入ativity需要的表结构
在resources下新建activiti.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        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">
	<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
        <property name="databaseSchemaUpdate" value="true"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"/>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="root" />
    </bean>
</beans>

新建一个java类 【CreateTable.java】

package com.test.activity.TestActi;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;

public class CreateTable {
	 
	  public static void main(String args[]){
	 
	      ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
	 
	              .buildProcessEngine();
	 
	      System.out.println("processEngine="+processEngine);
	 
	  }
}

然后运行就会在数据库中就会出现如下:
在这里插入图片描述
有了画图插件和数据库的表结构,基本环境就算搭建完成。

4、入门案例编写
第一步:画流程图。 流程图是最核心的操作,后面的数据走向就会按流程图进行传递。
这里以报销单为例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
画图时要注意,提前吧几个模块加载出来
在这里插入图片描述properties可以通过window—showview加载出来,右边的为画图的控件,
我们一共需要4个节点
StartEvent : 启动事件
在这里插入图片描述

选中图标拖拽到左边空白出即可
在这里插入图片描述
然后点击右边箭头图标,表示新增一个用户任务[UserTask],
在这里插入图片描述
同理在依次添加经理审批、财务审批、结束事件
在这里插入图片描述
然后修改各个模块属性(properties):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后保存该流程图, 画图完成。注意,箭头路径就是数据流向。如下图:
在这里插入图片描述

*此处注意:*如果无保存后无图片生成,则需要开启一个配置,然后重新保存
在这里插入图片描述

5、编写代码,发布、启动、查询任务、处理任务

  /**
	 * 部署流程
	 */
	private static ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	 
	    public void delployFlow(){
	                 Deployment deployment = processEngine.getRepositoryService()
	                .createDeployment()
	                .name("报销流程")	//流程名字
	                .addClasspathResource("baoxiao.bpmn")
	                .addClasspathResource("baoxiao.png")
	                .deploy();
	        
	        // 存在在数据库 act_re_procdef的DEPLOYMENT_ID_
	        System.out.println(deployment.getId());
	        System.out.println(deployment.getName());
	   }

运行很简单,自己建个main方法跑一下就OK,结果如下:
在这里插入图片描述
部署后查看数据库
在这里插入图片描述
注意此处的key值: 下一步需要使用它 【此处由于是demo,所以我们就不查询数据库,直接取值操作查看效果

启动流程代码:

        // 启动流程
	    public void flowStart(){
	        RuntimeService runtimeService = processEngine.getRuntimeService();
	        //用key启动时按照最新的流程图版本定义启动  [数据库表=act_re_procdef流程定义表中的KEY_字段]
	        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("员工报销单据");
	 
	    }

在这里插入图片描述

运行代码后查看数据库act_ru_task表 红框位置表示节点信息
在这里插入图片描述

我们在查询employe的任务:

  public void findEmployeeTask(){
	    	//数据库关系》》》》ID【act_re_deployment】 == ID【act_ru_execution】  == ID【act_ru_task】 ==》【ASSIGNEE_(cwh)】
	        String assignee = "employee";  //节点的assignee_
	        List<Task> taskList= processEngine.getTaskService()//获取任务service
	                .createTaskQuery()//创建查询对象
	                .taskAssignee(assignee)//指定查询人
	                .list();
	        
	        if(taskList.size()>0){
	            for (Task task : taskList){
	                System.out.println("代办任务ID:"+task.getId());
	                System.out.println("代办任务name:"+task.getName());
	                System.out.println("代办任务创建时间:"+task.getCreateTime());
	                System.out.println("代办任务办理人:"+task.getAssignee());
	                System.out.println("流程实例ID:"+task.getProcessInstanceId());
	                System.out.println("执行对象ID:"+task.getExecutionId());
	            }
	        }
	    }

在这里插入图片描述
我们查到employee下有一个5004的任务在等待处理,我们直接处理

 /**
	     * 处理流程
	     * 
	     * @Description:
	     */
	    public void completeTask(){
	    	// ID【act_ru_task】
	        String taskId = "5004";        
	        processEngine.getTaskService().complete(taskId);//完成任务
	 
	        System.out.println("完成任务,任务ID"+taskId);
	 
	  }

在这里插入图片描述

然后查看数据库效果
在这里插入图片描述
很明显,流程从employee流转到了 manager 下面, 当然这个过程自己分析一下会更清楚,,

处理流程只需要看 ru相关的表, 这是在处理的任务信息表。 在为处理完之前不参与记录数据,

剩下的就是 重复操作了。。
1、获取经理的代办流程 – 处理流程
2、获取财务的代办流程 – 处理流程 – 流程结束

这只是一个很简单的初始demo,但基本可以搞清楚activity的运行流程和执行逻辑。以及大概会应用到那些 场景。至于后续操作,可以查看文档或者其他资料根据需求学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131683.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 基于java的贪吃蛇游戏的设计与实现(贪吃蛇安卓游戏源码)

    一.前言某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩。自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏案例,没有想要的实现,因此自己动手实现一个JAVA版的贪吃蛇游戏。我在这个Dome完成之后重写了这个游戏的Android版,并重新更名为《蛇王传说》。也欢迎大家下载试玩。游戏下载地址:https…

  • 国内Centos镜像下载链接「建议收藏」

    国内Centos镜像下载链接「建议收藏」https://mirrors.aliyun.com/centos/转载于:https://www.cnblogs.com/Presley-lpc/p/10198845.html

  • app加固_360加固保手机版

    app加固_360加固保手机版为什么要加固APP?答:因为黑客通过反编译APK得到源码后,会在应用中插入代码,获取利益,比如添加广告,盗取用户账号、密码,后台定制活动等。反编译的方法?反编译是指apk文件通过反编译工具(例如

  • latex IEEEtran bib参考文献title双引号

    latex IEEEtran bib参考文献title双引号1.我想在其他latex文档中,使用IEEEtran.bst所定义的格式去引用参考文献,我的参考文献的具体信息存放在cankao.bib文件中了;然后我就使用下面两句引用参考文献;文献也能引用,也能正常显示,就是title上没有双引号,与IEEE提供的模板出现的参考文献有些差异;\bibliographystyle{IEEEtran}\bibliography{IEEEabrv,cankao}{}2.我这个傻叉捣鼓了两天,发现我所使用的文档中有一个语句已经定义了参考文献的格式,语句的内容如下

  • c++的发展方向

    c++的发展方向我现在是一名在校大学生,在学校期间自学C++有两年的时间了,看过C++Primer,stl,insideC++model(侯捷翻译的那本),com本质论等… 在学习C++的过程中感觉C++语言本身的确很强大,而且随着学习的深入,我逐渐感到要想在短时间了解这门语言的本质几乎是不可能的.因为我也学习过javaSE的一些东西,感觉就java和C#来说,语言本身不难,不过在底层调用方面有时候就

  • INSERT INTO SELECT 实例

    INSERT INTO SELECT 实例需求:   把一个表中特定的2列查询出来,然后插入到另外一张表,插到另一张表的其他列的值是固定值。要插入的表,插入全部内容时是这样的:INSERTINTO`mapping_record`(id,mapping_record.type,sim_id,wx_id,created_time,updated_time,is_available)VALUES(uuid(),’94

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号