【问题标题】:Accessing current process instance variable information from Camunda BPMN engine从 Camunda BPMN 引擎访问当前流程实例变量信息
【发布时间】:2015-05-21 05:13:38
【问题描述】:

我想把所有正在运行的流程实例的信息存储在H2数据库的act_proc_in_表下。(比如starttime, endtime, author..)

我在 ExecutionListener 方法中(在实现 JavaDelegate 接口的类中),我需要进一步转发信息。

我知道带有 createExecutionQuery() 方法的 RuntimeService 接口,但在我看到的所有示例中,它似乎映射到某种实体类。我不明白。 抱歉,我是 Camunda BPM 引擎的新手。

    public class ProcessRequestDelegate implements JavaDelegate { 
    private final static Logger LOGGER = Logger.getLogger("LOAN-REQUESTS"); 
    public void execute(DelegateExecution execution) throws Exception { LOGGER.info("Processing request by '"+execution.getVariable("customerId")+"'...");
    System.out.println(execution.getVariable("amount")); 
    int Amount= ((Double) execution.getVariable("amount")).intValue(); System.out.println("Amountis"+Amount);

    ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine();
    RuntimeService runtimeService = processEngine.getRuntimeService(); 

    ResulstSet rs= runtimeService.createExecutionQuery("What to write here?"); 
 while (rs.next()) {
         String author=rs.getString("AUTHOR");
            Date start = rs.getDate("START_TIME");
            int sales = rs.getInt("SALES");

} }
       

【问题讨论】:

  • 请正确格式化您的问题
  • 我希望这更具可读性?对此感到抱歉。

标签: java sql camunda


【解决方案1】:

从 Camunda BPM 7.2 开始,您可以使用方法 execution.getProcessEngineServices() 访问 java 委托类中的 engines services。使用 HistoryService 或 RuntimeService 创建一个 (Historic-)ProcessInstanceQuery 类似

HistoryService historyService = execution.getProcessEngineServices().getHistoryService(); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(execution.getProcessInstanceId()).singleResult();

然后您可以访问 HistoricProcessInstance 上的信息。

请注意,您正在通过这些服务查询数据库。在事务提交之前,当前事务中更改的数据无法通过服务获得。

【讨论】:

  • 当我使用 .singleResult() 时,代码抛出了异常。然后,我检索了 list 中的数据(以检查我是否正在检索任何内容),令人惊讶的是,列表的大小为 0。我想知道这怎么可能?
  • 这意味着该进程尚未持久化到数据库中。您可能仍在第一笔交易中。有关流程上下文中的事务是什么以及如何影响它们的描述,请参见 [1]。 [1]:docs.camunda.org/7.2/guides/user-guide/…
  • 非常感谢,它通过将 servicetask 的 asyncbefore 的值更改为 true 来工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多