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分为两组, 简单对比它们的特点:
- External Forms: 流程流转通过自建的应用完成,表单可以任意复杂; User task的formKey属性值可以填写任意data ; Form 上的元素并不会自动作为Process变量, 如果需要的话, 必须在submit时候设置输出的Process变量.
- 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 设计工具(国人开源)
-
form making(组件较多)
form making官网
form making的github -
form create(组件较少)
form create官网
form create的github