2016-11-28 105 views
0

我正在处理简单的activiti进程,我需要以某种方式检查当前进程是否已经运行。我的想法是使用这样的代码:如何获取activiti中活动进程的列表?

activitiInitEngineBean.getRuntimeService() 
           .createExecutionQuery() 
           .processDefinitionKey(BPConstants.PROCESS_ID_D1_ASSEMBLY_PROCESS) 
           .count() > 1; 

所以我只是得到runtimeService这是由Activiti的BPConstants.PROCESS_ID_D1_ASSEMBLY_PROCESS过程中执行的Java方法内使用definitionKey(过程ID)添加过滤器,并检查计数。 我发现.createExecutionQuery()总是返回空列表。例如,这样的代码将返回空单也:

activitiInitEngineBean.getRuntimeService() 
           .createExecutionQuery() 
           .list() 

这不是预期的,因为我把它叫做一个进程内的(所以它应该返回至少1执行)。 我应该如何配置才能使用runtimeService?

回答

0

默认情况下,与< serviceTask>标记一起使用时,activiti不会将任何内容存储到ru表中。解决方案是增加异步属性:

<serviceTask activiti:async="true" 
1

您的更新不被存储到数据库,直到等待状态达到(参见Transactions and Concurrency)。如果你想从运行流程实例的查询中获得流程实例,必须达到第一个等待状态。事实上,你不需要创建查询来获得执行,因为执行已经存在,例如script task variables或作为接口方法的参数。

+0

你能举一个例子吗?我怎样才能通过进程ID找到正在运行的进程? –

相关问题