侧边栏壁纸
  • 累计撰写 94 篇文章
  • 累计创建 100 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

Flowable最新版6.7.0入门篇之基于REST API的例子

汤圆学Java
2021-12-24 / 0 评论 / 0 点赞 / 1,121 阅读 / 4,163 字
温馨提示:
本文最后更新于 2022-01-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

上一篇学习了基于JavaApi的入门例子,参数主要是通过命令行传入;

这一篇学习下基于REST API的入门例子;

这里我们主要是学习如果使用现有的REST例子,因为官方已经提供了完整版的war包供我们使用

其中使用的流程跟上一篇的基本一致,如下面的目录所示:

目录

  1. 下载 flowable-rest.war 包
  2. 启动 flowable-rest 应用
  3. 部署一个流程定义
  4. 启动流程实例
  5. 获取任务列表
  6. 查询历史记录

正文

1. 下载 flowable-rest.war 包

下载地址:

下载解压后的目录如下所示:flowable-rest.war 就在wars目录中

image-20211108162709504

2. 启动 flowable-rest 应用

进入到wars目录,通过命令行启动:java -jar flowable-rest.war

启动后,显示如下:

image-20211108162958886

当最后一行显示:INFO [main] org.apache.catalina.startup.Catalina.start Server startup in xyz ms时,说明启动成功

此时我们可以通过一个简单的请求来确认:

curl --user rest-admin:test http://localhost:8080/flowable-rest/service/management/engine

image-20211108163337219

这里所有的请求认证方式都为 basic authentication

用户名/密码:reset-admin/test

返回json对象,内容包括flowable的版本号等,说明启动成功

3. 部署流程定义

下面开始,基本跟上一篇的步骤一致,就是请求方式不同;

上一篇是直接在Java程序中,基于Java API;

这里我们需要把流程定义文件bpmn.xml,先上传到数据库,如下所示:请求格式为 multipart/formdata

curl --user rest-admin:test -F "file=@holiday-request.bpmn20.xml" http://localhost:8080/flowable-rest/service/repository/deployments

image-20211108164349935

下面我们获取流程定义的列表,来查看刚才上传的流程定义:

curl --user rest-admin:test http://localhost:8080/flowable-rest/service/repository/process-definitions

image-20211108164557829

返回的列表中,有一个key为holidayRequest的,就是我们刚才上传的流程定义

我们流程定义中的process id="holidayRequest"对应的就是这里的key

4. 启动流程实例

启动时,需设定好流程变量;

上一篇是通过命令行输入的,这次我们直接传json对象,如下所示:

curl --user rest-admin:test -H "Content-Type: application/json" -X POST -d '{ "processDefinitionKey":"holidayRequest", "variables": [ { "name":"employee", "value": "John Doe" }, { "name":"nrOfHolidays", "value": 7 }]}' http://localhost:8080/flowable-rest/service/runtime/process-instances

image-20211108165132398

5. 获取任务列表

这里我们查询属于 经理 的任务列表

curl --user rest-admin:test -H "Content-Type: application/json" -X POST -d '{ "candidateGroup" : "managers" }' http://localhost:8080/flowable-rest/service/query/tasks

image-20211108165649623

这里查询到的任务就是流程定义中的如下用户任务:

<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>

6. 执行用户任务

下面我们就可以调用接口,来执行用户任务;

curl --user rest-admin:test -H "Content-Type: application/json" -X POST -d '{ "action" : "complete", "variables" : [ { "name" : "approved", "value" : true} ]  }' http://localhost:8080/flowable-rest/service/runtime/tasks/25

image-20211108171101080

上面请求url中 tasks后面的参数就是 任务id,上面获取任务列表时有返回

执行后,发现报错,如上图所示,提示找不到类;

这个类就是 请求同意后,执行的类,在bpmn.xml中有配置,如下所示:

<serviceTask id="externalSystemCall" name="Enter holidays in external system"
                     flowable:class="org.flowable.CallExternalSystemDelegate"/>

下面是缺失的类源代码:CallExternalSystemDelegate.java

package org.flowable;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;

public class CallExternalSystemDelegate implements JavaDelegate {

    public void execute(DelegateExecution execution) {
        System.out.println("Calling the external system for employee "
                + execution.getVariable("employee"));
    }

}

那怎么添加呢?

这里我们没按照官方的教程,去把缺失的类打包然后部署到lib下(因为遇到了各种各样奇奇怪怪的错误);

而是直接将class文件,部署到war项目中,步骤如下:

  1. 解压flowable-rest.war:jar xf .\flowable-rest.war
  2. 添加缺失的class到org/flowable目录下
  3. 删除 flowable-rest.war: rm .\flowable-rest.war(删除之前记得备份)
  4. 重新打包成jar:jar cf0M flowable-rest.jar *
  5. 启动:java -jar flowable-rest.jar

然后再次访问刚才出错的接口,接口返回200,但是没有返回值;

但是后台有打印日志,如下所示:

image-20211108194359774

这里我的名字有中文(汤圆学Java),所以前面的没打印出来,这个不重要;

至此,一个基于REST API 的请求流程就算告一段落了;

更多的API可以参考官网REST API

总结

本篇主要介绍了通过Rest风格来调用flowable的API,核心流程跟上一篇是一样的;

0

评论区