You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需在模型中声明成员,如何在任务间传递对象与变量?

任务间传递对象/变量(无需在流程模型中声明)

针对你的两个问题,核心诉求都是**不用修改流程模型(不用提前声明变量/成员)**就实现任务间的数据传递——从你提到的process、activation这些对象来看,应该是用Activiti或Camunda这类BPMN流程引擎吧?下面给你几个实用的方案:

1. 任务局部变量(Task Local Variables)

任务局部变量是绑定到单个任务实例的变量,不属于流程实例级别,因此完全不需要在流程模型里提前定义。

  • 设置变量:在当前任务的执行逻辑里,通过任务对象设置局部变量:
    // 先获取当前任务实例
    Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
    // 把对象存入当前任务的局部变量
    taskService.setVariableLocal(currentTask.getId(), "transferredObject", yourCustomObject);
    
  • 获取变量:在后续任务中,只要能找到对应的前置任务实例,就能取出变量:
    // 比如通过流程实例ID+前置任务的定义Key查询
    Task previousTask = taskService.createTaskQuery()
                                    .processInstanceId(currentExecution.getProcessInstanceId())
                                    .taskDefinitionKey("previousTaskKey")
                                    .singleResult();
    YourCustomObject obj = (YourCustomObject) taskService.getVariableLocal(previousTask.getId(), "transferredObject");
    
  • 小提示:局部变量只属于当前任务,不会自动同步到流程实例;如果是顺序执行的任务,也可以在前置任务完成前,把局部变量转存到执行实例的临时变量里,操作更灵活。

2. 执行实例临时变量(Transient Variables)

临时变量是流程执行实例的非持久化变量,不会存到数据库,也不需要在流程模型里声明,特别适合临时传递小对象。

  • 设置变量:在当前任务的执行逻辑中,通过执行实例设置:
    // 假设你拿到了当前任务对应的Execution实例
    execution.setTransientVariable("tempObject", yourCustomObject);
    
  • 获取变量:后续任务直接从执行实例里取就行:
    YourCustomObject obj = (YourCustomObject) execution.getTransientVariable("tempObject");
    
  • 注意:临时变量不会被持久化,所以如果流程挂起、重启或者走了异步任务,这个变量就会丢失——适合短期、同步的任务间传递场景。

3. 外部存储+业务ID传递

如果你的对象比较大,或者需要长期保留,完全可以把对象放到流程引擎外部的存储(比如Redis、自定义数据库表),然后只传递对象的唯一ID,后续任务用ID从外部存储里捞对象。

  • 步骤示例:
    1. 当前任务中存对象拿ID:
      // 把对象存入自定义存储服务
      String objectId = customStorageService.save(yourCustomObject);
      // 把ID存到任务局部变量(还是不用改模型)
      taskService.setVariableLocal(currentTask.getId(), "objectId", objectId);
      
    2. 后续任务中取ID拿对象:
      String objectId = (String) taskService.getVariableLocal(previousTask.getId(), "objectId");
      YourCustomObject obj = customStorageService.getById(objectId);
      
  • 小提示:这种方法需要你自己维护外部存储的生命周期(比如定时清理无用对象),但好处是完全脱离流程引擎的变量机制,彻底不用碰流程模型。

总结

如果是短期小对象传递,优先选临时变量或任务局部变量;如果是大对象或需要持久化的场景,用外部存储+ID传递。这三种方案都不需要在流程模型里声明任何变量/成员,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者Siddharth Kulshreshtha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:00:19