阅读 135

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

作者:汤圆

个人博客:javalover.cc

前言

上一篇学习了基于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,核心流程跟上一篇是一样的;


作者:汤圆学Java
链接:https://juejin.cn/post/7028786656530415630


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐