返回介绍

2.4. 开始使用 Flowable REST API

发布于 2023-09-17 23:40:35 字数 3371 浏览 0 评论 0 收藏 0

这个章节展示了与上一章节相同的例子:部署一个流程定义,启动一个流程实例,获取任务列表并完成一个任务。最好先快速浏览上一章节以了解所做的事情。

这一次,将使用Flowable REST API而不是Java API。你很快就会意识到 REST API 与 Java API 紧密关联。只要了解一个,就能很快学会另一个。

可以在REST API章节找到Flowable REST API的完整细节。

2.4.1. 安装REST应用

从 flowable.org 网站下载 .zip 文件后,可以在 wars 文件夹下找到 REST 应用。要运行这个WAR文件,需要一个servlet容器,例如TomcatJetty等。

使用Tomcat的步骤如下:

  • 下载并解压缩最新的Tomcat zip文件(在Tomcat网站中选择’Core’发行版)。

  • 将flowable-rest.war文件从解压的Flowable发行版的wars文件夹中复制到解压的Tomcat文件夹下的webapps文件夹下。

  • 使用命令行,转到Tomcat文件夹下的bin文件夹。

  • 执行'./catalina run'启动Tomcat服务器。

在服务启动过程中,会显示一些Flowable日志信息。在最后显示的一条类似'INFO [main] org.apache.catalina.startup.Catalina.start Server startup in xyz ms'的消息标志着服务器已经启动,可以接受请求。请注意默认情况下,使用H2内存数据库,这意味着数据在服务器重启后会丢失。

在下面的章节中,我们使用cURL展示各种REST调用。所有的REST调用默认都使用基本认证保护,所有的调用的用户都是 rest-admin,密码为’test'。

在启动后,通过执行下列命令验证应用运行正常:

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

如果能获得正确的json响应,则说明REST API已经启动并在工作。

2.4.2. 部署流程定义

第一步是部署一个流程定义。使用REST API时,需要将一个.bpmn20.xml文件(或对于多个流程引擎,一个.zip文件)作为’multipart/formdata’上传:

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

要验证流程定义已经正确部署,可以请求流程定义的列表:

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

这将返回当前引擎中部署的所有流程定义的列表。

2.4.3. 启动流程实例

使用REST API启动一个流程实例与使用Java API很像:提供key作为流程定义的标识,并使用一个map作为初始化流程变量:

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

将返回:

{"id":"43","url":"http://localhost:8080/flowable-rest/service/runtime/process-instances/43","businessKey":null,"suspended":false,"ended":false,"processDefinitionId":"holidayRequest:1:42","processDefinitionUrl":"http://localhost:8080/flowable-rest/service/repository/process-definitions/holidayRequest:1:42","activityId":null,"variables":[],"tenantId":"","completed":false}

2.4.4. 任务列表与完成任务

当流程实例启动后,第一个任务会指派给’managers’组。要获取这个组的所有任务,可以通过REST API进行任务查询:

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

这将返回’manager’组的所有任务的列表。

可以这样完成任务:

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

然而,很可能会产生如下的错误:

{"message":"Internal server error","exception":"couldn't instantiate class org.flowable.CallExternalSystemDelegate"}

这意味着引擎无法找到服务任务引用的CallExternalSystemDelegate类。要解决这个错误,需要将该类放在应用的classpath下(并需要重启应用)。按照上一章节的介绍创建该类,并将其打包为JAR,放在Tomcat的webapps目录下的flowable-rest目录下的WEB-INF/lib目录下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文