在 Flowable 工作流引擎中,如何获取表单数据信息

在 Flowable 工作流引擎中,获取表单数据信息的方法取决于表单类型(动态表单、外置表单)和流程节点(启动节点、任务节点、历史节点)。以下是核心方法及代码示例:


📋 一、获取启动节点表单数据

适用于流程发起时定义的动态表单或外置表单。

  1. 通过流程定义获取表单属性
    使用 FormService.getStartFormData() 获取表单字段定义(如字段名称、类型、是否必填):

    ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
        .processDefinitionKey("leaveProcess") // 流程定义Key
        .latestVersion()
        .singleResult();
    StartFormData startFormData = formService.getStartFormData(pd.getId());
    List<FormProperty> formProperties = startFormData.getFormProperties(); // 表单字段列表
    

    输出示例
    id=days, name=请假天数, type=long
    来源:

  2. 获取已填写的表单数据
    表单数据实际存储在流程变量中,通过 RuntimeService 获取:

    Map<String, Object> variables = runtimeService.getVariables(processInstanceId);
    Object leaveDays = variables.get("days"); // 直接读取流程变量
    

    来源:


📝 二、获取任务节点表单数据

适用于处理用户任务时的表单。

  1. 查询任务表单字段定义
    使用 FormService.getTaskFormData()

    Task task = taskService.createTaskQuery().taskId("taskId").singleResult();
    TaskFormData taskFormData = formService.getTaskFormData(task.getId());
    List<FormProperty> formProperties = taskFormData.getFormProperties(); // 任务表单字段
    

    来源:

  2. 获取已提交的表单值
    通过流程变量或历史服务查询:

    // 方式1:从运行时变量获取
    Map<String, Object> taskVariables = runtimeService.getVariables(task.getExecutionId());
    
    // 方式2:从历史记录获取(任务完成后)
    HistoricVariableInstance historicVar = historyService.createHistoricVariableInstanceQuery()
        .taskId(task.getId())
        .variableName("reason")
        .singleResult();
    

    来源:


三、获取历史表单数据

流程结束后,通过历史服务查询持久化的表单数据:

List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery()
    .processInstanceId(processInstanceId)
    .formProperties() // 筛选表单数据
    .list();

for (HistoricDetail detail : historicDetails) {
    HistoricFormPropertyEntity formEntity = (HistoricFormPropertyEntity) detail;
    String fieldId = formEntity.getPropertyId(); // 字段ID(如"days")
    String fieldValue = formEntity.getPropertyValue(); // 字段值
}

适用场景

  • 审计日志
  • 已完成流程的数据回溯
    来源:

🔧 四、外置表单的特殊处理

外置表单(JSON/HTML 定义)的数据获取方式与内置表单一致,但需注意:

  1. 表单部署
    外置表单文件(如 leave.form)需放在 resources/forms 目录下自动部署。
  2. 数据提交
    使用 submitStartFormData()submitTaskFormData() 提交数据,引擎自动映射到流程变量。

💎 五、核心原理

  • 表单数据存储:所有表单字段值均以流程变量(act_ru_variable)形式存储,运行时表随流程结束删除,历史表(act_hi_varinst)永久保留。
  • 动态 vs 外置表单
    • 动态表单:字段定义嵌入 BPMN XML,需在每个任务节点重复配置。
    • 外置表单:独立 JSON 文件定义,通过 formKey 引用,更易复用。

🔍 六、对比总结

场景API/表数据是否持久化来源
启动节点表单字段定义getStartFormData()否(仅元数据)
任务节点表单字段定义getTaskFormData()否(仅元数据)
运行时表单数据RuntimeService.getVariables()流程结束即删除
历史表单数据HistoricDetailQuery永久保存
获取表单数据
启动节点
任务节点
历史节点
FormService.getStartFormData
RuntimeService.getVariables
FormService.getTaskFormData
TaskService+RuntimeService
HistoryService查询

通过上述方法,可覆盖 Flowable 中所有表单数据获取场景。建议优先使用流程变量(RuntimeService/HistoryService)直接操作数据,避免频繁访问表单定义元数据以提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyzroundo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值