Flowable的REST API(一)

4 篇文章 0 订阅
3 篇文章 0 订阅


关于flowable的一些操作和介绍。

现在,我很高兴使用Flowable Modeler来建模业务流程并创建用户任务和流程实例,但是,我还想使用Flowable的REST API与流程实例和用户任务进行交互。

Flowable Modeler

开始使用Flowable的最简单方法是使用flowable / all-in-one Docker镜像:

docker run --name flowable -p 8080:8080 flowable/all-in-one

要么

docker start --interactive flowable

本地浏览器输入http://localhost:8080/flowable-modeler并使用默认用户ID登录:admin和password:test

登入

然后,您将被重定向到Flowable Modeler仪表板中的“Process”选项卡:

流程模型设计器-1

要开始创建业务流程模型(使用BPMN标准),请单击“ 创建流程”按钮:

创建业务流程模型-1

输入一个Model name,一个Model key和一个Description然后单击Create new model按钮:

BPMN编辑器

“流程设计界面”(Flowable的BPMN编辑器)包括一个侧面菜单,其中包含BPMN 2.0元素的调色板和页面底部的属性面板。每个新流程都以Start事件(小圆圈)开头。

您可以从侧面菜单中拖放元素,也可以使用所选元素的“快捷菜单”。单击“ 开始”事件元素,将显示其快捷菜单。

我们要添加一个User任务,所以单击代表用户的图标:

添加用户任务

这将添加一个箭头链接到Start事件的框。双击该框,为任务命名为“填写请假申请表”,然后在框外单击以保存更改:

填空题形式

再次单击该框以显示其快捷菜单,然后选择停止事件图标(带有粗边框的圆圈):

快捷菜单

我们的业务流程模型现在包含一个Start事件,一个User任务和一个End事件:

最终事件

分配任务

为了使Flowable成功执行我们的业务流程,它需要知道哪些用户可以完成用户任务。选择“填写请假申请表”用户任务,然后单击其Assignments属性:

任务

您可以将任务分配给个人或组:

分配任务

勾选“允许流程创建人完成任务”框,然后单击“ 保存”按钮。

关联表单

要将表单与用户任务相关联,请选择“填写请假申请表单”用户任务,然后单击其Form reference属性:

表单参考

我们还没有任何形式:

新形式

单击“ 新建表单”按钮:

创建一个表单

输入Form name,Form key和Description然后单击“ 创建表单”按钮:

形式建设者

表单设计器包含一个侧面菜单,其中包含可以拖放到设计画布上的表单组件选项板:

请假单应用形式

应用定义

现在我们已经建模了我们的业务流程,我们需要让它供人们使用。导航到Flowable Modeler仪表板中的“应用程序”选项卡,然后单击“ 创建应用程序”按钮:

新建应用程序定义

输入App definition name,App definition key和Description然后单击Create new app definition按钮:

应用程序定义,细节

我更改了Icon,使用Edit included models按钮将’Leave Application Process’添加到’HR App’,然后点击Save图标:

应用标签小时应用内

点击“HR App”卡:

HR-APP-发布

注意:您可以将App定义导出为zip文件或可部署的bar文件。

单击“ 发布”按钮:

屏幕截图 - 2018年12月24日 - 在 - 35年8月21日

单击“ 发布应用程序定义”按钮。

现在我们将使用Flowable的REST API来检查我们的应用程序定义是否已部署:

curl -i 'http://admin:test@localhost:8080/flowable-task/process-api/repository/deployments'

您应该看到如下输出:

{
    "data": [
        {
            "id": "c56b72eb-06f8-11e9-a85e-0242ac110002",
            "name": "hr-app.zip",
            "deploymentTime": "2018-12-23T21:21:54.532Z",
            "category": null,
            "parentDeploymentId": "c55ec8b6-06f8-11e9-a85e-0242ac110002",
            "url": "http://localhost:8080/flowable-task/process-api/repository/deployments/c56b72eb-06f8-11e9-a85e-0242ac110002",
            "tenantId": ""
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "id",
    "order": "asc",
    "size": 1
}

让我们检查一下我们的流程定义是否已经部署过:

curl -i 'http://admin:test@localhost:8080/flowable-task/process-api/repository/process-definitions'

您应该看到如下输出:

{
    "data": [
        {
            "id": "leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "url": "http://localhost:8080/flowable-task/process-api/repository/process-definitions/leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "key": "leave-application-process",
            "version": 1,
            "name": "Leave Application Process",
            "description": "An employee wants to take some time off.",
            "tenantId": "",
            "deploymentId": "c56b72eb-06f8-11e9-a85e-0242ac110002",
            "deploymentUrl": "http://localhost:8080/flowable-task/process-api/repository/deployments/c56b72eb-06f8-11e9-a85e-0242ac110002",
            "resource": "http://localhost:8080/flowable-task/process-api/repository/deployments/c56b72eb-06f8-11e9-a85e-0242ac110002/resources/leave-application-process.bpmn",
            "diagramResource": "http://localhost:8080/flowable-task/process-api/repository/deployments/c56b72eb-06f8-11e9-a85e-0242ac110002/resources/leave-application-process.leave-application-process.png",
            "category": "http://www.flowable.org/processdef",
            "graphicalNotationDefined": true,
            "suspended": false,
            "startFormDefined": false
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "name",
    "order": "asc",
    "size": 1
}

流程任务

地址访问: http://localhost:8080/flowable-task

流动性任务-HR-应用

单击“HR App”卡并导航到“进程”选项卡:

流动性任务流程标签

单击“ 启动进程”按钮:

流动性任务,离开应用程序进程

然后单击“ 开始”进程按钮:

流动性任务圈-2

现在我们将使用Flowable的REST API来获取有关流程实例的信息:

curl -i 'http://admin:test@localhost:8080/flowable-task/process-api/runtime/process-instances'

您应该看到如下输出:

{
    "data": [
        {
            "id": "02d460bb-070e-11e9-a85e-0242ac110002",
            "url": "http://localhost:8080/flowable-task/process-api/runtime/process-instances/02d460bb-070e-11e9-a85e-0242ac110002",
            "name": "Leave Application Process - December 24th 2018",
            "businessKey": null,
            "suspended": false,
            "ended": false,
            "processDefinitionId": "leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "processDefinitionUrl": "http://localhost:8080/flowable-task/process-api/repository/process-definitions/leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "activityId": null,
            "startedBy": "admin",
            "started": "2018-12-23T23:53:56.992Z",
            "variables": [],
            "callbackId": null,
            "callbackType": null,
            "tenantId": "",
            "completed": false
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "id",
    "order": "asc",
    "size": 1
}

让我们检查一下,看看我们是否有任务要完成:

curl -i 'http://admin:test@localhost:8080/flowable-task/process-api/runtime/tasks'

您应该看到如下输出:

{
    "data": [
        {
            "id": "1fae489a-070f-11e9-a85e-0242ac110002",
            "url": "http://localhost:8080/flowable-task/process-api/runtime/tasks/1fae489a-070f-11e9-a85e-0242ac110002",
            "owner": null,
            "assignee": "admin",
            "delegationState": null,
            "name": "Fill in a Leave Application Form",
            "description": null,
            "createTime": "2018-12-24T00:01:54.893Z",
            "dueDate": null,
            "priority": 50,
            "suspended": false,
            "taskDefinitionKey": "sid-3BA1F4D1-500F-4766-89BF-519166929F2D",
            "scopeDefinitionId": null,
            "scopeId": null,
            "scopeType": null,
            "tenantId": "",
            "category": null,
            "formKey": "leave-application-form",
            "parentTaskId": null,
            "parentTaskUrl": null,
            "executionId": "1fadfa77-070f-11e9-a85e-0242ac110002",
            "executionUrl": "http://localhost:8080/flowable-task/process-api/runtime/executions/1fadfa77-070f-11e9-a85e-0242ac110002",
            "processInstanceId": "1fadfa74-070f-11e9-a85e-0242ac110002",
            "processInstanceUrl": "http://localhost:8080/flowable-task/process-api/runtime/process-instances/1fadfa74-070f-11e9-a85e-0242ac110002",
            "processDefinitionId": "leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "processDefinitionUrl": "http://localhost:8080/flowable-task/process-api/repository/process-definitions/leave-application-process:1:c5ae6f5e-06f8-11e9-a85e-0242ac110002",
            "variables": []
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "id",
    "order": "asc",
    "size": 1
}

formKey 包含与User任务关联的表单名称(‘leave-application-form’)。

我们可以在表单存储库中查看“请假申请表”:

curl -i 'http://admin:test@localhost:8080/flowable-task/form-api/form-repository/form-definitions'

您应该看到如下输出:

{
    "data": [
        {
            "id": "c5bdb1a1-06f8-11e9-a85e-0242ac110002",
            "url": "http://localhost:8080/flowable-task/form-api/form-repository/form-definitions/c5bdb1a1-06f8-11e9-a85e-0242ac110002",
            "category": null,
            "name": "Leave Application Form",
            "key": "leave-application-form",
            "description": null,
            "version": 1,
            "resourceName": "form-leave-application-form.form",
            "deploymentId": "c5b0b94f-06f8-11e9-a85e-0242ac110002",
            "tenantId": ""
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "name",
    "order": "asc",
    "size": 1
}

我们可以使用它id来获取表单模型的JSON表示:

curl -i 'http://admin:test@localhost:8080/flowable-task/form-api/form-repository/form-definitions/c5bdb1a1-06f8-11e9-a85e-0242ac110002/model'

您应该看到如下输出:

{
    "id": "c5bdb1a1-06f8-11e9-a85e-0242ac110002",
    "name": "Leave Application Form",
    "key": "leave-application-form",
    "version": 1,
    "url": "http://localhost:8080/flowable-task/form-api/form/model",
    "fields": [
        {
            "fieldType": "FormField",
            "id": "givenName",
            "name": "Given Name",
            "type": "text",
            "value": null,
            "required": true,
            "readOnly": false,
            "overrideId": true,
            "placeholder": "",
            "layout": null
        },
        {
            "fieldType": "FormField",
            "id": "familyName",
            "name": "Family Name",
            "type": "text",
            "value": null,
            "required": true,
            "readOnly": false,
            "overrideId": true,
            "placeholder": null,
            "layout": null
        },
        {
            "fieldType": "FormField",
            "id": "employeeNumber",
            "name": "Employee Number",
            "type": "integer",
            "value": null,
            "required": true,
            "readOnly": false,
            "overrideId": true,
            "placeholder": null,
            "layout": null
        },
        {
            "fieldType": "FormField",
            "id": "fromDate",
            "name": "From Date",
            "type": "date",
            "value": null,
            "required": true,
            "readOnly": false,
            "overrideId": true,
            "placeholder": null,
            "layout": null
        },
        {
            "fieldType": "FormField",
            "id": "toDate",
            "name": "To Date",
            "type": "date",
            "value": null,
            "required": true,
            "readOnly": false,
            "overrideId": true,
            "placeholder": null,
            "layout": null
        }
    ],
    "outcomes": []
}

现在导航到Tasks选项卡,查看Flowable的Form引擎如何呈现我们的Leave Application表单:

流动性任务圈-3

我们可以填写以下表格:

流动性任务圈-4

或者使用Flowable的REST API更新表单的变量并完成User任务:

curl -H "Content-Type: application/json" 
     -X POST http://admin:test@localhost:8080/flowable-task/process-api/runtime/tasks/1fae489a-070f-11e9-a85e-0242ac110002
     -d "@data-1.json"

数据1.json:

{
  "action" : "complete",
  "variables" : [
    {
        "id": "givenName",
        "name": "Given Name",
        "type": "string",
        "value": "Rob"
    },
    {
        "id": "familyName",
        "name": "Family Name",
        "type": "string",
        "value": "Ferguson"
    },
    {
        "id": "employeeNumber",
        "name": "Employee Number",
        "type": "integer",
        "value": 123456
    },
    {
        "id": "fromDate",
        "name": "From Date",
        "type": "date",
        "value": "2018-12-21T00:00:00+00:00"
    },
    {
        "id": "toDate",
        "name": "To Date",
        "type": "date",
        "value": "2019-01-07T00:00:00+00:00"
    }
  ]
}

您应该看到如下输出:

Status: 200 OK

尽管返回OK,但调用似乎不会保存用户任务的变量:

空白表格
这里提出了以下Flowable问题:

我也试过,POST/form/form-data

curl -H "Content-Type: application/json" 
     -X POST http://admin:test@localhost:8080/flowable-task/process-api/form/form-data 
     -d "@data-2.json"

数据2.json:

{
  "taskId" : "1fae489a-070f-11e9-a85e-0242ac110002",
  "properties" : [
    {
      "id": "givenName",
      "name": "Given Name",
      "type": "string",
      "value": "Rob"
    },
    {
      "id": "familyName",
      "name": "Family Name",
      "type": "string",
      "value": "Ferguson"
    },
    {
      "id": "employeeNumber",
      "name": "Employee Number",
      "type": "integer",
      "value": 123456
    },
    {
      "id": "fromDate",
      "name": "From Date",
      "type": "date",
      "value": "2018-12-21T00:00:00+00:00"
    },
    {
      "id": "toDate",
      "name": "To Date",
      "type": "date",
      "value": "2019-01-07T00:00:00+00:00"
    }
  ]
}

您应该看到如下输出:

Status: 204 No Content

我不知道它为什么会返回,204 No Content所以我提出了以下Flowable问题:

可流动引擎:POST/Form/Form-Data
但它确实似乎保存了用户任务的变量(并完成了用户任务):

形式数据

流动问题

提出的关于Flowable的问题:

Flowable Engine: POST /runtime/tasks/{taskId}
Flowable Engine:POST /form/form-data
Flowable Engine:JSON body parameters

下一步是什么

在下一篇文章中,我们将使用Angular,Angular Material和Flowable的REST API来创建一个定制的Task List组件:

任务列表

源代码:
GitHub:Serendipity
参考文献:
Paul Holmes-Higgin的博客:Instant Gratification with Flowable 6

本课程是《Flowable流程入门课程》的后续高级课程。在学习本课程前,应先学习入门课程,以掌握相关基础知识。高级课程着重讲解Flowable工作流的高级概念、复杂理论和实战应用。课程内容包括流程管理思想、技术与标准、工作流的控制模式和资源模式;Flowable数据库表及变量;与Spring、Spring Boot的集成;BPMN 2.0主要类图;Flowable高级服务如JAVA服务任务、脚本任务、Web Service任务、外部工作者任务、多实例任务、补偿处理程序、子流程和调用活动等;Flowable事件侦听器、执行侦听器和任务侦听器;Flowable历史和REST APIFlowable事务、并发性、身份管理及LDAP集成;Flowable高级主题如流程实例迁移、异步执行器的设计与配置、用于高并发的UUID ID生成器、多租户、高级流程引擎配置、执行自定义SQL和实验性流程调试器等;Flowable Eclipse设计器特性及定制;Flowable 事件注册;Flowable相关标准和规范如ISO8601标准和cron等。本课程对Flowable官方文档进行了彻底梳理和融汇贯通,并结合实践,形象生动、系统全面、简单易懂地呈现给大家,让大家从开源软件文档冗长耗时、英文晦涩难懂、概念理解困难、知识点分散等困境中解脱出来,从而能快速地将Flowable具有的高级特性应用到项目的高级需求和复杂实践中去。课程特色:案例和代码驱动、基础概念与经典实战相结合、知识环节融会贯通、关联知识平滑拓展、概念和原理展示形象生动。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值