【Flowable】Flowable流程设计器

Flowable流程设计器有两种实现方式

  • Eclipse Designer
  • Flowable UI应用

1.Eclipse Designer

Flowable提供了名为Flowable Eclipse Designer的Eclipse插件,可以用于图形化地建模、测试与部署BPMN 2.0流程。

(1).下载安装Eclipse

去Eclipse官网下载即可:https://www.eclipse.org/downloads/packages/release 注意2020-09后的版本不再支持jdk8
在这里插入图片描述
解压缩就可以了,然后进入解压缩的目录
在这里插入图片描述
直接启动即可
在这里插入图片描述
在这里插入图片描述

(2).安装Flowable插件

安装Flowable的插件,选择Help → Install New Software。在下图面板中,点击Add按钮,并填写下列字段

  • Name: Flowable BPMN 2.0 designer
  • Location: http://www.flowable.org/designer/update/
    在这里插入图片描述
    这种在线更新的方式已经被官网移除了,操作不了
    在这里插入图片描述
    这时我们就只能通过离线安装的方式来实现了,下载对应的离线文件
    在这里插入图片描述
    安装步骤来操作
    在这里插入图片描述然后继续:选择Help → Install New Software

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后finish。弹出如下窗口
在这里插入图片描述
重启即可

(3).创建项目

然后我们就可以创建一个Flowable Project了
在这里插入图片描述
然后我们可以在src/mian/resources/ 的目录下创建对应的流程图了
在这里插入图片描述
看到如下的界面说明插件安装成功了
在这里插入图片描述

(4).创建流程图

使用滑板来绘制流程,通过从右侧把图标拖拽到左侧的面板,最终的效果
在这里插入图片描述
指定流程的主键
在这里插入图片描述
指定任务的负责人

在Properties视图中指定每个任务节点的负责人
在这里插入图片描述
创建请假单:zhangsan

审批请假单:lisi

当我们设置完成后保存文件,会同时生成png图片
在这里插入图片描述
注意:生成图片需要如下配置
在这里插入图片描述

(5).部署流程

首先在Eclipse中生成bar文件,选中项目然后鼠标右击
在这里插入图片描述
然后会发现在项目的根目录下多了一个deployment文件夹,里面多了一个MyProcess.bar文件
在这里插入图片描述
然后我们就可以把这个bar文件拷贝到IDEA中,继续部署的流程
在这里插入图片描述
而部署的代码和前面没啥区别

    @Test
    public void testDeploy(){
        // 1.获取 ProcessEngine 对象
        ProcessEngine processEngine = configuration.buildProcessEngine();
        // 2.获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("MyHoliday.bar");
        ZipInputStream zipInputStream = new ZipInputStream(in);
        // 3.完成流程的部署操作 ZIP 或者 Bar文件
        Deployment deploy = repositoryService.createDeployment()
               // .addClasspathResource("MyHoliday.bar")// 关联要部署的流程文件
                .addZipInputStream(zipInputStream)
                .name("XXX公司请求流程")
                .deploy() ;// 部署流程
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println("deploy.getName() = " + deploy.getName());
    }

执行后查看表结构,相关的信息就进去了
在这里插入图片描述
完整的案例代码:

package com.bobo.flowable.test;

import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

public class Test02 {

    ProcessEngineConfiguration configuration = null;
    @Before
    public void before(){
        // 获取  ProcessEngineConfiguration 对象
        configuration = new StandaloneProcessEngineConfiguration();
        // 配置 相关的数据库的连接信息
        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("123456");
        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true");
        // 如果数据库中的表结构不存在就新建
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    }

    /**
     * 部署流程
     *
     */
    @Test
    public void testDeploy(){
        // 1.获取 ProcessEngine 对象
        ProcessEngine processEngine = configuration.buildProcessEngine();
        // 2.获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("MyHoliday.bar");
        ZipInputStream zipInputStream = new ZipInputStream(in);
        // 3.完成流程的部署操作 ZIP 或者 Bar文件
        Deployment deploy = repositoryService.createDeployment()
               // .addClasspathResource("MyHoliday.bar")// 关联要部署的流程文件
                .addZipInputStream(zipInputStream)
                .name("XXX公司请求流程")
                .deploy() ;// 部署流程
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println("deploy.getName() = " + deploy.getName());
    }

    /**
     * 启动流程实例
     */
    @Test
    public void testRunProcess(){
        ProcessEngine processEngine = configuration.buildProcessEngine();

        // 我们需要通过RuntimeService来启动流程实例
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // 启动流程实例
        ProcessInstance holidayRequest = runtimeService.startProcessInstanceById("myProcess:1:25004");
        System.out.println("holidayRequest.getProcessDefinitionId() = " + holidayRequest.getProcessDefinitionId());
        System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());
        System.out.println("holidayRequest.getId() = " + holidayRequest.getId());
    }

    /**
     * 测试任务查询
     */
    @Test
    public void testQueryTask(){
        ProcessEngine processEngine = configuration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery()
                .processDefinitionKey("myProcess") // 指定查询的流程编程
                .taskAssignee("zhangsan") // 查询这个任务的处理人
                .list();
        for (Task task : list) {
            System.out.println("task.getProcessDefinitionId() = " + task.getProcessDefinitionId());
            System.out.println("task.getName() = " + task.getName());
            System.out.println("task.getAssignee() = " + task.getAssignee());
            System.out.println("task.getDescription() = " + task.getDescription());
            System.out.println("task.getId() = " + task.getId());
        }
    }

    /**
     * 完成当前任务
     */
    @Test
    public void testCompleteTask(){
        ProcessEngine processEngine = configuration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionKey("myProcess")
                .taskAssignee("lisi")
                .singleResult();
        // 创建流程变量

        if(task != null){
            // 完成任务
            taskService.complete(task.getId());
        }


    }

    /**
     * 获取流程任务的历史数据
     */
    @Test
    public void testHistory(){
        ProcessEngine processEngine = configuration.buildProcessEngine();
        HistoryService historyService = processEngine.getHistoryService();
        List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
                .processDefinitionId("myProcess:1:25004")
                .finished() // 查询的历史记录的状态是已经完成
                .orderByHistoricActivityInstanceEndTime().asc() // 指定排序的字段和顺序
                .list();
        for (HistoricActivityInstance history : list) {
            System.out.println(history.getActivityName()+":"+history.getAssignee()+"--"
                    +history.getActivityId()+":" + history.getDurationInMillis()+"毫秒");
        }

    }
}

2.Flowable UI应用

Flowable提供了几个web应用,用于演示及介绍Flowable项目提供的功能:

  • Flowable IDM: 身份管理应用。为所有Flowable UI应用提供单点登录认证功能,并且为拥有IDM管理员权限的用户提供了管理用户、组与权限的功能。
  • Flowable Modeler: 让具有建模权限的用户可以创建流程模型、表单、选择表与应用定义。
  • Flowable Task: 运行时任务应用。提供了启动流程实例、编辑任务表单、完成任务,以及查询流程实例与任务的功能。
  • Flowable Admin: 管理应用。让具有管理员权限的用户可以查询BPMN、DMN、Form及Content引擎,并提供了许多选项用于修改流程实例、任务、作业等。管理应用通过REST API连接至引擎,并与Flowable Task应用及Flowable REST应用一同部署。

所有其他的应用都需要Flowable IDM提供认证。每个应用的WAR文件可以部署在相同的servlet容器(如Apache Tomcat)中,也可以部署在不同的容器中。由于每个应用使用相同的cookie进行认证,因此应用需要运行在相同的域名下。

(1).安装部署

下载Tomcat:https://tomcat.apache.org/download-80.cgi 官网下载后解压缩到非中文目录即可,然后是下载FlowableUI的文件,在Flowable6.6之后把FlowableUI中提供的四个功能合并到了一起。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4R6dfaR-1681261047591)(img\image-20220318102128672.png)]
然后把解压缩后的两个war包拷贝到Tomcat的解压缩的webapps目录下
在这里插入图片描述
Tomcat目录:
在这里插入图片描述

(2).启动服务

启动Tomcat服务,执行startup.bat文件
在这里插入图片描述
如果启动中出现乱码修改Tomcat的conf目录下的 logging.properties 文件中的编码
在这里插入图片描述
如果一闪而过则检查jdk的环境变量配置。
启动成功后,在浏览器中访问 http://localhost:8080/flowable-ui, 默认的账号密码是 admin/test
在这里插入图片描述

(3).用户管理

我们先在 身份管理应用程序 中创建用户并授权
在这里插入图片描述
创建用户
在这里插入图片描述
填写详细信息
在这里插入图片描述
授权管理
在这里插入图片描述

(4).绘制流程

创建新的流程
在这里插入图片描述
流程图界面
在这里插入图片描述
创建流程,分配处理人
在这里插入图片描述
在这里插入图片描述
继续完成流程图的创建
在这里插入图片描述

(5).部署流程

绘制好的流程图,我们只需要一键导出即可
在这里插入图片描述
下载下来后拷贝到项目的resource目录下即可
在这里插入图片描述
然后就是正常的操作流程了

(6).FlowableUI 演示
1).部署流程

在FlowableUI中提供了演示程序
在这里插入图片描述
创建一个新的应用程序,并指定相关的信息
在这里插入图片描述
创建应用后需要指定对应的流程图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发布应用程序
在这里插入图片描述

2). 启动流程

发布了应用程序后我们就可以来启动流程了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击显示图:
在这里插入图片描述
也就是可以看到当前是user1来处理,user1登录后可以看到要处理的流程,user2登录是看不到的。
在这里插入图片描述
点击完成后流程就向下一步流转了
在这里插入图片描述
这时再通过user2登录,就可以看到对应的代办的信息
在这里插入图片描述
在这里插入图片描述
然后点击完成,那么整个流程就结束了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值