当前位置: 首页 > 知识库问答 >
问题:

Camunda/活动服务任务

逑沛
2023-03-14

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

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

2.)声明一个通用的Spring bean可由camunda访问,并定义该bean的方法由system任务执行。这允许我通过bpm-definition指定process-variable->input-variable模式,但最多存储一个result-variable。

澄清

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

共有1个答案

仲孙疏珂
2023-03-14

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

您可以将名为MyErrorHandler的spring bean与如下所示的服务任务连接起来

<serviceTask id="checkError"
             camunda:expression="#{myErrorHandler.checkError(execution)}" />

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

@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
  }
}
 类似资料:
  • 我开始用camunda开发我的流程,我有一个简单的问题要问如何远程管理不同类型的任务。首先,让我解释一下我的场景: 我有两个主要的小组:会计师和客户。客户只看到他们自己的仪表板,内置在我的系统和会计有所有的信息,客户在他们的系统,其中有一个简单的任务列表。现在,我不想为用户提供另一个界面。 一旦我的场景被解释,让我们回到我的问题: 使用camunda,我可以收集实际的任务,如果这是一个用户任务,创

  • 首先,我是卡蒙达的新手。。我在camunda中创建了一个自定义任务列表。我可以申请/取消申请任务等,这是可行的。 现在我想完成一项任务,但是当我打电话的时候: 似乎camunda希望在此上下文中进入下一步,而不是部署BPMN模式以及部署执行下一步所需的一切的上下文。所以我得到了“classNotFound”异常,因为我的customTasklist中没有相同的类。战争就像卡蒙达处理器一样。战争 我

  • 我们在审批流应用程序中使用Camunda。根据以下来自Camunda的文档,我们可以创建任务并将其分配给用户。 我想知道我们是否可以将任务分配给一个组而不是单个用户 请求参数-我尝试使用但没有成功。

  • 我有一个端口上带有UDP套接字的活动。如果我按下Home按钮,活动进入后台,将调用OnPause()和OnStop()方法。现在,当我收到一些UDP数据包时,我想恢复我的活动。阅读其他帖子,我明白我必须: 将活动声明为(或) 然后,当我想恢复活动时: 这个解决方案对我不起作用。调用不会在前台显示我的活动,也不会调用。 以下标志可以完成任务,但我不想清除任务并重新启动新任务。

  • 我有一个包含服务方法的报警服务服务类。这些方法在警报服务激活时被调用。我想做的是调用这些方法中的另一个类的意图,这些方法在服务类中被调用(当警报关闭时)。它所做的只是在调用意图时标记错误。这只发生在激活警报服务时调用的方法中(服务类中的方法)。这是因为类而不是吗?我不确定,有什么想法吗? (以下是我的服务类,当在方法中调用另一个活动的意图时,应用程序强制关闭。) LogCat上的这些错误之一是:

  • 我正在尝试在JMeter中记录任何客户端-服务器活动作为学习的开始。我是从公司网络这样做的,因此必须通过代理。以下是我记录的步骤。 > 我在JMeter文档中读到,为了通过代理进行记录,我必须通过提供适当的代理从命令中调用。我用下面的代码来调用JMeter。 jmeter -H "取自互联网设置的代理地址"-P "8080" -u "域*用户名*" -a "密码"。 用这个JMeter调用fine