camunda_12_forms

User task 和 Start event的 form 类型

  • Camunda forms: 使用 Modeler 创建的外部form文件, Camunda TaskList 应用能自动渲染该form.
  • Embeded or External Task forms: 手写js +html, Embeded 和 External 区别在于, Embeded form可以在 TaskList 应用中渲染, 而 External form 不能.
  • Generated Task forms: 使用Modeler创建的内部form, form和流程定义保存在同一个文件中. TaskList 应用能自动渲染该form.

按照是否可以通过TaskList应用渲染, 将上面几种类型form分为两组, 简单对比它们的特点:

  1. External Forms: 流程流转通过自建的应用完成,表单可以任意复杂; User task的formKey属性值可以填写任意data ; Form 上的元素并不会自动作为Process变量, 如果需要的话, 必须在submit时候设置输出的Process变量.
  2. Non-External Forms: 流程流转通过Camunda TaskList 应用完成, 表单元素种类较少, 适合于快速交付的小型项目, 真实项目中使用的并不多; formKey和formRef属性必须按照官方要求格式填写, 这样TaskList才能正常渲染form; Form上的所有元素都将作为Process 变量暴露出来, 并保存到后台数据库中.

External forms 使用思路

  • 在定义流程时, 先为user task的formKey 设定form 路径信息或其他标识性信息.
  • 在Task处理时, 我们的项目使用Camunda FormService类提供的API获取user task的formKey信息, 得到 form 的路径信息, 进而完成form的渲染.
  • 最后, 通过FormService类的submit API提交 user task结果.

bpmn 文件的 formKey 属性:

<userTask id="theTask" camunda:formKey="app:FORM_NAME.html"
          camunda:candidateUsers="John, Mary"
          name="my Task">

FormService 类的主要API:


String getTaskFormKey(String processDefinitionId, String taskDefinitionKey);
String getStartFormKey(String processDefinitionId);


void submitTaskForm(String taskId, Map<String, Object> properties);
ProcessInstance submitStartForm(String processDefinitionId, Map<String, Object> properties);

快速 form 设计工具(国人开源)

  1. form making(组件较多)
    form making官网
    form making的github

  2. form create(组件较少)
    form create官网
    form create的github

posted @ 2022-10-06 17:07  harrychinese  阅读(522)  评论(0编辑  收藏  举报