- 1. 简介
- 2. 开始
- 3. 配置
- 4. Flowable API
- 5. 集成 Spring
- 6. 部署
- 7. BPMN 2.0 介绍
- 8. BPMN 2.0 结构
- 9. 表单
- 10. JPA
- 11. 历史
- 12. 身份管理
- 13. Eclipse Designer
- 14. Flowable UI 应用
- 15. REST API
- 16. 集成 CDI
- 17. 集成 LDAP
- 18. 高级
- 19. 工具
14.4. Flowable Modeler 应用
Flowable Modeler用于建模BPMN流程、DMN选择表、表单定义,以及创建应用定义。BPMN Modeler使用与Flowable 5相同的Oryx与Angular架构,只是迁移为独立的Modeler应用中。在使用Flowable Modeler应用时,请确保Flowable IDM应用已经部署并正常运行(用于认证与授权)。
使用自己的账户(或者默认的admin/test用户)登录Modeler应用后(http://localhost:8080/flowable-modeler),可以看到流程总览页面。可以点击Create Process(创建流程)按钮或Import Process(导入流程)按钮,创建新的BPMN流程模型。
在创建流程模型(以及其他模型)时,需要谨慎选择模型key。模型key是模型仓库中该模型的唯一标识。如果使用了已经存在的模型key,则会显示错误,模型也不会保存。
在弹出窗口中创建模型后,会显示BPMN模型画布。这个BPMN编辑器与Flowable 5中(作为Explorer的组件)的BPMN编辑器十分相像。在设计流程模型时,可以使用Flowable引擎支持的所有BPMN元素。
BPMN编辑器分为4个部分:
画板(Palette): 用于设计流程模型的所有BPMN元素
工具条(Toolbar): 修改模型画布的操作。如缩放、布局、保存等
模型画布(Model canvas): 在模型画布上拖放BPMN元素,设计流程模型
参数面板(Properties panel): 如果没有选择元素,则显示主流程模型的参数;否则显示所选中BPMN元素的参数
用户任务元素的参数面板中有一个Referenced form(引用表单)参数。选择这个参数会弹出窗口,使你可以在仓库中选择一个表单定义,或者创建一个新的表单。如果选择创建一个新的表单,会显示一个类似于流程模型创建对话框的弹窗。填入表单名及表单模型key之后,就会打开表单编辑器。
可以从表单画板中将表单字段拖入表单画布。在这个例子中,在表单画布上添加了一个Name(姓名)文本框,两个日期框,以及一个Remarks(说明)多行文本框。在编辑表单字段时,可以配置Label(标签)、Id、Required(是否必填),以及Placeholder(占位符)。
id是一个重要的参数。流程使用这个id为表单字段创建流程变量。填写label参数时,会自动为id参数赋值。如果需要的话,也可以选中Override Id?(覆盖Id)复选框,并填入所需的id。
保存表单模型并关闭表单编辑器之后,(如果表单编辑器是从BPMN编辑器打开的话)会自动跳转回流程模型。再次选择用户任务元素,并点击Referenced form参数,就可以看到已经将新创建的表单定义附加至用户任务。点击Modeler应用头部的Form(表单)页签,也可以看到模型仓库中保存的所有表单定义。
可以打开表单定义的详情界面,查看各表单定义。在详情页面中,可以修改表单名、key及描述,也可以查阅表单模型的修改历史。也可以复制表单定义,创建一个具有相同表单字段的新的表单定义。
接下来,再次打开BPMN编辑器中的vacation request(请假)流程模型,向流程模型中添加一个脚本任务,用于计算假期开始到结束之间的日数。点击Script form(脚本表单)参数,填入groovy,这样Flowable引擎就会使用Groovy脚本引擎。然后点击Script(脚本)参数,并填入用于计算日数的脚本。
这样就定义了amountOfVacationDays流程变量,接下来可以在流程模型中添加一个选择任务(Decision task)。选择任务用于在Flowable DMN引擎中执行DMN选择表。使用Decision table reference(引用选择表)参数,创建一个新的选择表模型,并打开DMN编辑器。
DMN编辑器提供了一个列表式的编辑器。包括输入列——使用流程中的流程变量定义输入条件;以及输出列——定义输出变量。在这个简单的例子里,只使用一个输入列,并使用amountOfVacationDays变量。如果天数少于10,managerApprovalNeeded变量返回值false。否则返回true。可以定义多个输入列,每条规则也可以有多个输入条件。也可以将一个输入列置空,代表其永远为true。也可以定义一个或多个输出变量。
DMN选择表定义的另一个重要部分是命中策略(Hit Policy)。目前,Flowable支持第一(First)与任意(Any)命中策略。对于第一命中策略,DMN会返回第一条计算为true的规则定义的输出变量,并停止计算。对于任意命中策略,会计算所有的规则,并输出计算为true的最后一条规则定义的输出变量。
保存并关闭DMN编辑器后,Modeler应用跳转回BPMN编辑器,并将新创建的DMN选择表附加至选择任务。在BPMN XML中生成如下的选择任务:
<serviceTask name="Is manager approval needed?" flowable:type="dmn">
<extensionElements>
<flowable:field name="decisionTableReferenceKey">
<flowable:string><![CDATA[managerApprovalNeeded]]></flowable:string>
</flowable:field>
</extensionElements>
</serviceTask>
这样就可以创建带有一个条件顺序流的排他网关,以使用DMN引擎的计算结果,即managerApprovalNeeded变量。
完整的BPMN流程模型为:
完成流程模型之后,就可以创建应用定义(app definition),将一个或多个流程模型及关联的模型(如选择表和表单定义)打包为一个整体。应用定义可以导出为BAR文件(zip格式),并可以在Flowable引擎中部署。创建完成请假应用定义后,应用编辑器将如下显示。
还可以在应用编辑器中选择图标和主题色,调整Flowable Task应用在看板(dashboard)中的显示效果。重点步骤是添加请假流程模型,并通过选择流程模型,自动引入对应的表单定义和DMN选择表。
点击预览图选中流程模型。选择一个或多个模型之后,就可以关闭弹窗,保存并关闭应用定义。在详情页面查看新创建的请假应用定义,如下所示:
在这个页面中,可以通过两种不同格式下载应用定义。第一个下载按钮(带有下箭头)下载每个模型的JSON格式模型文件,用于在不同的Flowable Modeler应用之间共享应用定义。第二个下载按钮(带有指向右上的箭头)下载应用定义模型的BAR文件,用于在Flowable引擎中部署。在BAR文件中,只包含了可以部署的工件,如BPMN 2.0 XML文件和DMN XML文件,而不会包含JSON模型文件。这是因为在Flowable引擎部署时,BAR文件中的所有文件都会保存在数据库中。因此需要避免将不需要部署的文件放在BAR中。
在应用定义详情页面,也可以直接向Flowable引擎发布(Publish)应用定义。Flowable Modeler使用application.properties文件中,flowable.modeler.app.deployment-api-url参数设置的URL部署应用定义。默认部署URL配置为Flowable Task应用。但也可以修改,比如改为使用Flowable REST应用。确保Flowable Task应用正在运行,点击Publish按钮。这样应用定义就会做为一个BAR文件部署到Flowable Task应用。
下表是Modeler UI应用的专用参数。
参数名 | 原参数 | 默认值 | 描述 |
---|---|---|---|
flowable.modeler.app.data-source-prefix | datasource.prefix | - | 数据库表名的前缀。 |
flowable.modeler.app.deployment-api-url | deployment.api.url | http://localhost:8080/flowable-task/process-api | Flowable引擎REST服务的根URL,Flowable Modeler用来向引擎部署应用定义BAR文件。 Flowable Task应用的默认URL为 http://localhost:8080/flowable-task/process-api |
flowable.modeler.app.rest-enabled | rest.modeler-app.enabled | true | 启用REST API(指的是使用基础身份认证的API,而不是UI使用的REST API)。 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论