首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Camunda/活动服务任务

Camunda/活动服务任务
EN

Stack Overflow用户
提问于 2013-10-11 13:32:19
回答 1查看 4.6K关注 0票数 2

我们使用bpm建模流程,并在Spring环境中使用camunda引擎执行所述bpm。在一个场景中,我希望在两个用户任务之间执行自定义Java代码。我从阅读大量camunda文档中得出的结论是,我最好使用Service概念。

我想做两件事,一是用服务任务存储多个进程变量,二是动态定义哪个进程变量映射到服务任务的哪个输入参数。

据我所知,Camunda提供了两种将Java代码与服务任务集成的方法:

1.)声明实现JavaDelegate接口的Spring。(该方法获得一个DelegateExecution作为参数)。这一项允许我存储任意多的结果变量,但我看不到定义映射过程变量->输入变量的选项。

2.)声明一个通用Spring可以通过camunda访问,并定义要由系统任务执行的bean的方法。这允许我通过bpm定义指定进程变量->输入变量模式,但最多只存储一个结果变量。

那么,有什么办法可以做到这两点呢?

澄清

为了澄清我的需求,有时我的系统任务可能会检测到不一致的状态(在数据库或进程变量中)。我希望任务将错误代码(类似于程序的错误代码"exit(1)")存储在流程变量中,以便在用户任务之后获得纠正错误的机会。这个错误代码最好存储在流程变量中的一个固定位置,但是我希望能够在指定的位置至少放置一个“真实结果”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 12:09:03

您应该能够在使用当前执行来读取和更新变量的Spring中实现该行为。

您可以用这样的服务任务连接名为myErrorHandler的spring

代码语言:javascript
运行
复制
<serviceTask id="checkError"
             camunda:expression="#{myErrorHandler.checkError(execution)}" />

execution变量在每个默认表达式中都是可用的,并指向DelegateExecution的一个实例,该实例允许您访问当前流程变量。

Spring的实现如下所示:

代码语言:javascript
运行
复制
@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
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19319486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档