我们使用bpm建模流程,并在Spring环境中使用camunda引擎执行所述bpm。在一个场景中,我希望在两个用户任务之间执行自定义Java代码。我从阅读大量camunda文档中得出的结论是,我最好使用Service概念。
我想做两件事,一是用服务任务存储多个进程变量,二是动态定义哪个进程变量映射到服务任务的哪个输入参数。
据我所知,Camunda提供了两种将Java代码与服务任务集成的方法:
1.)声明实现JavaDelegate接口的Spring。(该方法获得一个DelegateExecution作为参数)。这一项允许我存储任意多的结果变量,但我看不到定义映射过程变量->输入变量的选项。
2.)声明一个通用Spring可以通过camunda访问,并定义要由系统任务执行的bean的方法。这允许我通过bpm定义指定进程变量->输入变量模式,但最多只存储一个结果变量。
那么,有什么办法可以做到这两点呢?
澄清
为了澄清我的需求,有时我的系统任务可能会检测到不一致的状态(在数据库或进程变量中)。我希望任务将错误代码(类似于程序的错误代码"exit(1)")存储在流程变量中,以便在用户任务之后获得纠正错误的机会。这个错误代码最好存储在流程变量中的一个固定位置,但是我希望能够在指定的位置至少放置一个“真实结果”。
发布于 2013-10-15 12:09:03
您应该能够在使用当前执行来读取和更新变量的Spring中实现该行为。
您可以用这样的服务任务连接名为myErrorHandler的spring
<serviceTask id="checkError"
             camunda:expression="#{myErrorHandler.checkError(execution)}" />execution变量在每个默认表达式中都是可用的,并指向DelegateExecution的一个实例,该实例允许您访问当前流程变量。
Spring的实现如下所示:
@Component
public class MyErrorHandler {
  /**
   * Actual error handler invoked as service
   */
  public void checkError(DelegateExecution execution) {
    execution.getVariables(); // Map<String, Object> of variables
    execution.setVariable("errorCode", 500); // update variable
  }
}https://stackoverflow.com/questions/19319486
复制相似问题